summaryrefslogtreecommitdiff
path: root/liboil/simdpack
diff options
context:
space:
mode:
authorEric Anholt <anholt@FreeBSD.org>2005-12-13 20:13:44 +0000
committerEric Anholt <anholt@FreeBSD.org>2005-12-13 20:13:44 +0000
commita3559ae8483cc92d35cd67616e15821fef6c62a5 (patch)
tree77bb7dc20131b99e977fe73ac1b4eb5e57acf3d2 /liboil/simdpack
parent2e2995282ec0960feae094559840720152961993 (diff)
downloadliboil-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.c12
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;