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