MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / xsum_small_init

Function xsum_small_init

xs/sources/xsum.c:809–846  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

807/* INITIALIZE A SMALL ACCUMULATOR TO ZERO. */
808
809void xsum_small_init (xsum_small_accumulator *restrict sacc)
810{
811 sacc->adds_until_propagate = XSUM_SMALL_CARRY_TERMS;
812 sacc->Inf = sacc->NaN = 0;
813# if USE_MEMSET_SMALL
814 { memset (sacc->chunk, 0, XSUM_SCHUNKS * sizeof(xsum_schunk));
815 }
816# elif USE_SIMD && __AVX__ && XSUM_SCHUNKS==67
817 { xsum_schunk *ch = sacc->chunk;
818 __m256i z = _mm256_setzero_si256();
819 _mm256_storeu_si256 ((__m256i *)(ch+0), z);
820 _mm256_storeu_si256 ((__m256i *)(ch+4), z);
821 _mm256_storeu_si256 ((__m256i *)(ch+8), z);
822 _mm256_storeu_si256 ((__m256i *)(ch+12), z);
823 _mm256_storeu_si256 ((__m256i *)(ch+16), z);
824 _mm256_storeu_si256 ((__m256i *)(ch+20), z);
825 _mm256_storeu_si256 ((__m256i *)(ch+24), z);
826 _mm256_storeu_si256 ((__m256i *)(ch+28), z);
827 _mm256_storeu_si256 ((__m256i *)(ch+32), z);
828 _mm256_storeu_si256 ((__m256i *)(ch+36), z);
829 _mm256_storeu_si256 ((__m256i *)(ch+40), z);
830 _mm256_storeu_si256 ((__m256i *)(ch+44), z);
831 _mm256_storeu_si256 ((__m256i *)(ch+48), z);
832 _mm256_storeu_si256 ((__m256i *)(ch+52), z);
833 _mm256_storeu_si256 ((__m256i *)(ch+56), z);
834 _mm256_storeu_si256 ((__m256i *)(ch+60), z);
835 _mm_storeu_si128 ((__m128i *)(ch+64), _mm256_castsi256_si128(z));
836 _mm_storeu_si64 (ch+66, _mm256_castsi256_si128(z));
837 }
838# else
839 { xsum_schunk *p;
840 int n;
841 p = sacc->chunk;
842 n = XSUM_SCHUNKS;
843 do { *p++ = 0; n -= 1; } while (n > 0);
844 }
845# endif
846}
847
848
849/* ADD ONE NUMBER TO A SMALL ACCUMULATOR ASSUMING NO CARRY PROPAGATION REQ'D.

Callers 2

xsum_large_initFunction · 0.85
fx_Math_sumPreciseFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected