4 #include "types/simple.h"
5 #include "../gmx_blas.h"
8 F77_FUNC(ssyr2,SSYR2)(const char * uplo,
18 int kx,ky,ix,iy,jx,jy,j,i;
20 const char ch=toupper(*uplo);
26 float alpha = *alpha__;
28 if(n<=0 || fabs(alpha)<GMX_FLOAT_MIN || incx==0 || incy==0 ||
29 (ch != 'U' && ch != 'L'))
32 jx = jy = kx = ky = 0;
34 /* init start points for non-unit increments */
35 if(incx!=1 || incy!=1) {
39 kx = 1 - (n - 1)*(incx);
43 ky = 1 - (n - 1)*(incy);
50 /* Data in upper part of A */
51 if(incx==1 && incy==1) {
52 /* Unit increments for both x and y */
54 if( fabs(x[j-1])>GMX_FLOAT_MIN || fabs(y[j-1])>GMX_FLOAT_MIN ) {
55 temp1 = alpha * y[j-1];
56 temp2 = alpha * x[j-1];
58 a[(j-1)*(lda)+(i-1)] += x[i-1]*temp1 + y[i-1]*temp2;
63 /* non-unit increments */
66 if( fabs(x[jx-1])>GMX_FLOAT_MIN || fabs(y[jy-1])>GMX_FLOAT_MIN ) {
67 temp1 = alpha * y[jy-1];
68 temp2 = alpha * x[jx-1];
72 a[(j-1)*(lda)+(i-1)] += x[ix-1]*temp1 + y[iy-1]*temp2;
82 /* Data in lower part of A */
83 if(incx==1 && incy==1) {
84 /* Unit increments for both x and y */
86 if( fabs(x[j-1])>GMX_FLOAT_MIN || fabs(y[j-1])>GMX_FLOAT_MIN ) {
87 temp1 = alpha * y[j-1];
88 temp2 = alpha * x[j-1];
90 a[(j-1)*(lda)+(i-1)] += x[i-1]*temp1 + y[i-1]*temp2;
95 /* non-unit increments */
98 if( fabs(x[jx-1])>GMX_FLOAT_MIN || fabs(y[jy-1])>GMX_FLOAT_MIN ) {
99 temp1 = alpha * y[jy-1];
100 temp2 = alpha * x[jx-1];
104 a[(j-1)*(lda)+(i-1)] += x[ix-1]*temp1 + y[iy-1]*temp2;