4 #include "types/simple.h"
5 #include "../gmx_blas.h"
8 F77_FUNC(sgemm,SGEMM)(const char *transa,
22 const char tra=toupper(*transa);
23 const char trb=toupper(*transb);
26 int nrowa,ncola,nrowb;
35 float alpha = *alpha__;
51 if(m==0 || n==0 || (( fabs(alpha)<GMX_FLOAT_MIN || k==0) && fabs(beta-1.0)<GMX_FLOAT_EPS))
54 if(fabs(alpha)<GMX_FLOAT_MIN) {
55 if(fabs(beta)<GMX_FLOAT_MIN) {
72 if(fabs(beta)<GMX_FLOAT_MIN) {
75 } else if(fabs(beta-1.0)>GMX_FLOAT_EPS) {
80 if( fabs(b[ j*(ldb) + l ])>GMX_FLOAT_MIN) {
81 temp = alpha * b[ j*(ldb) + l ];
83 c[j*(ldc)+i] += temp * a[l*(lda)+i];
88 /* transpose A, but not B */
93 temp += a[i*(lda)+l] * b[j*(ldb)+l];
94 if(fabs(beta)<GMX_FLOAT_MIN)
95 c[j*(ldc)+i] = alpha * temp;
97 c[j*(ldc)+i] = alpha * temp + beta * c[j*(ldc)+i];
105 /* transpose B, but not A */
108 if(fabs(beta)<GMX_FLOAT_MIN) {
111 } else if(fabs(beta-1.0)>GMX_FLOAT_EPS) {
113 c[j*(ldc)+i] *= beta;
116 if( fabs(b[ l*(ldb) + j ])>GMX_FLOAT_MIN) {
117 temp = alpha * b[ l*(ldb) + j ];
119 c[j*(ldc)+i] += temp * a[l*(lda)+i];
125 /* Transpose both A and B */
130 temp += a[i*(lda)+l] * b[l*(ldb)+j];
131 if(fabs(beta)<GMX_FLOAT_MIN)
132 c[j*(ldc)+i] = alpha * temp;
134 c[j*(ldc)+i] = alpha * temp + beta * c[j*(ldc)+i];