diff options
author | Eric Anholt <anholt@FreeBSD.org> | 2005-12-13 20:13:44 +0000 |
---|---|---|
committer | Eric Anholt <anholt@FreeBSD.org> | 2005-12-13 20:13:44 +0000 |
commit | a3559ae8483cc92d35cd67616e15821fef6c62a5 (patch) | |
tree | 77bb7dc20131b99e977fe73ac1b4eb5e57acf3d2 /liboil/simdpack | |
parent | 2e2995282ec0960feae094559840720152961993 (diff) | |
download | liboil-a3559ae8483cc92d35cd67616e15821fef6c62a5.tar.gz |
Implement multsum_f32_unroll2 as I think it was meant to be implemented
(previous implementation looked bogus). Fixes a make check failure
for me.
Diffstat (limited to 'liboil/simdpack')
-rw-r--r-- | liboil/simdpack/multsum.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/liboil/simdpack/multsum.c b/liboil/simdpack/multsum.c index 89a7c18..5c2c547 100644 --- a/liboil/simdpack/multsum.c +++ b/liboil/simdpack/multsum.c @@ -41,14 +41,14 @@ static void multsum_f32_unroll2 (float *dest, float *src1, int sstr1, double sum1 = 0; double sum2 = 0; - if (n&1) { + for(i=0;i<n-1;i+=2){ sum1 += OIL_GET(src1,0, float) * OIL_GET(src2,0, float); - OIL_INCREMENT (src1, sstr1); - OIL_INCREMENT (src2, sstr2); + sum2 += OIL_GET(src1,sstr1, float) * OIL_GET(src2,sstr2, float); + OIL_INCREMENT (src1, sstr1*2); + OIL_INCREMENT (src2, sstr2*2); } - for(i=0;i<n;i++){ - sum1 += OIL_GET(src1,sstr1*i, float) * OIL_GET(src2,sstr2*i, float); - sum2 += OIL_GET(src1,sstr1*i, float) * OIL_GET(src2,sstr2*i, float); + if (i<n) { + sum1 += OIL_GET(src1,0, float) * OIL_GET(src2,0, float); } *dest = sum1 + sum2; |