| 807 | /* INITIALIZE A SMALL ACCUMULATOR TO ZERO. */ |
| 808 | |
| 809 | void 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. |
no outgoing calls
no test coverage detected