5c5e1a1c452a73778df4113d2936d85ca200da1c
[alexxy/gromacs.git] / src / gmxlib / gmx_blas / sdot.c
1 #include "gmx_blas.h"
2
3
4 float
5 F77_FUNC(sdot,SDOT)(int *n_arg,
6                     float *dx,
7                     int *incx_arg,
8                     float *dy,
9                     int *incy_arg)
10 {
11     int i,ix,iy,m;
12     int n=*n_arg;
13     int incx = *incx_arg;
14     int incy = *incy_arg;
15     float t1;
16     
17     if(n<=0)
18         return 0.0;
19     
20     t1 = 0.0;
21     
22     if(incx!=1 || incy!=1) {
23         ix = 0;
24         iy = 0;
25         if(incx<0)
26             ix = (1-n)*incx;
27         if(incy<0)
28             iy = (1-n)*incy;
29         
30         for(i=0;i<n;i++,ix+=incx,iy+=incy) 
31             t1 += dx[ix] * dy[iy];
32         
33         return t1;
34         
35     } else {
36         
37         m = n%5;
38         
39         for(i=0;i<m;i++)
40             t1 += dx[i] * dy[i];
41         
42         /* unroll */
43         for(i=m;i<n;i+=5) 
44             t1  =  t1 + dx[i] * dy[i]   
45                 +    dx[i+1] * dy[i+1] 
46                 +    dx[i+2] * dy[i+2] 
47                 +    dx[i+3] * dy[i+3]   
48                 +    dx[i+4] * dy[i+4];   
49         
50         return t1;
51     }
52 }
53
54