74f227e0f99b6709ffec5b624177de379c4f60e9
[alexxy/gromacs.git] / src / gmxlib / gmx_blas / daxpy.c
1 #include "gmx_blas.h"
2
3
4 void
5 F77_FUNC(daxpy,DAXPY)(int   *   n_arg,
6                       double *   da_arg,
7                       double *   dx,
8                       int *      incx_arg,
9                       double *   dy,
10                       int *      incy_arg)
11 {
12   int i,ix,iy;
13   int n=*n_arg;
14   double da=*da_arg;
15   int incx = *incx_arg;
16   int incy = *incy_arg;
17
18   if (n<=0)
19     return;
20
21   if(incx!=1 || incy!=1) {
22     ix = 0;
23     iy = 0;
24     if(incx<0)
25       ix = (1-n)*incx;
26     if(incy<0)
27       iy = (1-n)*incy;
28     
29     for(i=0;i<n;i++,ix+=incx,iy+=incy) 
30       dy[iy] += da*dx[ix];
31
32     return;
33
34   } else {
35
36     /* unroll */
37     
38     for(i=0;i<(n-4);i+=4) {
39       dy[i]   += da*dx[i];
40       dy[i+1] += da*dx[i+1];
41       dy[i+2] += da*dx[i+2];
42       dy[i+3] += da*dx[i+3];
43     }
44     /* continue with current value of i */
45     for(;i<n;i++)
46       dy[i]   += da*dx[i];
47   }
48 }