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