optimized sdot.c for increments != 1
authorWerner Saar <wernsaar@googlemail.com>
Fri, 24 Apr 2015 11:13:20 +0000 (13:13 +0200)
committerWerner Saar <wernsaar@googlemail.com>
Fri, 24 Apr 2015 11:13:20 +0000 (13:13 +0200)
kernel/x86_64/sdot.c

index c146590..a6da1fe 100644 (file)
@@ -80,7 +80,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
        if ( (inc_x == 1) && (inc_y == 1) )
        {
 
-               int n1 = n & -32;
+               BLASLONG n1 = n & -32;
 
                if ( n1 )
                        sdot_kernel_16(n1, x, y , &dot );
@@ -99,6 +99,18 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
 
        }
 
+       BLASLONG n1 = n & -2;
+
+       while(i < n1)
+       {
+
+               dot += y[iy] * x[ix] + y[iy+inc_y] * x[ix+inc_x];
+               ix  += inc_x*2 ;
+               iy  += inc_y*2 ;
+               i+=2 ;
+
+       }
+
        while(i < n)
        {