2
* Written by D.P. Manley, Digital Equipment Corporation.
3
* Prefixed "C_" to BLAS routines and their declarations.
5
* Modified by T. H. Do, 2/19/98, SGI/CRAY Research.
10
#include "cblas_test.h"
12
void F77_sgemm(int *order, char *transpa, char *transpb, int *m, int *n,
13
int *k, float *alpha, float *a, int *lda, float *b, int *ldb,
14
float *beta, float *c, int *ldc ) {
17
int i,j,LDA, LDB, LDC;
18
enum CBLAS_TRANSPOSE transa, transb;
20
get_transpose_type(transpa, &transa);
21
get_transpose_type(transpb, &transb);
23
if (*order == TEST_ROW_MJR) {
24
if (transa == CblasNoTrans) {
26
A = (float *)malloc( (*m)*LDA*sizeof( float ) );
29
A[i*LDA+j]=a[j*(*lda)+i];
33
A = ( float* )malloc( LDA*(*k)*sizeof( float ) );
36
A[i*LDA+j]=a[j*(*lda)+i];
38
if (transb == CblasNoTrans) {
40
B = ( float* )malloc( (*k)*LDB*sizeof( float ) );
43
B[i*LDB+j]=b[j*(*ldb)+i];
47
B = ( float* )malloc( LDB*(*n)*sizeof( float ) );
50
B[i*LDB+j]=b[j*(*ldb)+i];
53
C = ( float* )malloc( (*m)*LDC*sizeof( float ) );
56
C[i*LDC+j]=c[j*(*ldc)+i];
57
cblas_sgemm( CblasRowMajor, transa, transb, *m, *n, *k, *alpha, A, LDA,
58
B, LDB, *beta, C, LDC );
61
c[j*(*ldc)+i]=C[i*LDC+j];
66
else if (*order == TEST_COL_MJR)
67
cblas_sgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda,
68
b, *ldb, *beta, c, *ldc );
70
cblas_sgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda,
71
b, *ldb, *beta, c, *ldc );
73
void F77_ssymm(int *order, char *rtlf, char *uplow, int *m, int *n,
74
float *alpha, float *a, int *lda, float *b, int *ldb,
75
float *beta, float *c, int *ldc ) {
78
int i,j,LDA, LDB, LDC;
82
get_uplo_type(uplow,&uplo);
83
get_side_type(rtlf,&side);
85
if (*order == TEST_ROW_MJR) {
86
if (side == CblasLeft) {
88
A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
91
A[i*LDA+j]=a[j*(*lda)+i];
95
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
98
A[i*LDA+j]=a[j*(*lda)+i];
101
B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
102
for( i=0; i<*m; i++ )
103
for( j=0; j<*n; j++ )
104
B[i*LDB+j]=b[j*(*ldb)+i];
106
C = ( float* )malloc( (*m)*LDC*sizeof( float ) );
107
for( j=0; j<*n; j++ )
108
for( i=0; i<*m; i++ )
109
C[i*LDC+j]=c[j*(*ldc)+i];
110
cblas_ssymm( CblasRowMajor, side, uplo, *m, *n, *alpha, A, LDA, B, LDB,
112
for( j=0; j<*n; j++ )
113
for( i=0; i<*m; i++ )
114
c[j*(*ldc)+i]=C[i*LDC+j];
119
else if (*order == TEST_COL_MJR)
120
cblas_ssymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
123
cblas_ssymm( UNDEFINED, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
127
void F77_ssyrk(int *order, char *uplow, char *transp, int *n, int *k,
128
float *alpha, float *a, int *lda,
129
float *beta, float *c, int *ldc ) {
133
enum CBLAS_UPLO uplo;
134
enum CBLAS_TRANSPOSE trans;
136
get_uplo_type(uplow,&uplo);
137
get_transpose_type(transp,&trans);
139
if (*order == TEST_ROW_MJR) {
140
if (trans == CblasNoTrans) {
142
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
143
for( i=0; i<*n; i++ )
144
for( j=0; j<*k; j++ )
145
A[i*LDA+j]=a[j*(*lda)+i];
149
A = ( float* )malloc( (*k)*LDA*sizeof( float ) );
150
for( i=0; i<*k; i++ )
151
for( j=0; j<*n; j++ )
152
A[i*LDA+j]=a[j*(*lda)+i];
155
C = ( float* )malloc( (*n)*LDC*sizeof( float ) );
156
for( i=0; i<*n; i++ )
157
for( j=0; j<*n; j++ )
158
C[i*LDC+j]=c[j*(*ldc)+i];
159
cblas_ssyrk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta,
161
for( j=0; j<*n; j++ )
162
for( i=0; i<*n; i++ )
163
c[j*(*ldc)+i]=C[i*LDC+j];
167
else if (*order == TEST_COL_MJR)
168
cblas_ssyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
171
cblas_ssyrk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
175
void F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k,
176
float *alpha, float *a, int *lda, float *b, int *ldb,
177
float *beta, float *c, int *ldc ) {
180
enum CBLAS_UPLO uplo;
181
enum CBLAS_TRANSPOSE trans;
183
get_uplo_type(uplow,&uplo);
184
get_transpose_type(transp,&trans);
186
if (*order == TEST_ROW_MJR) {
187
if (trans == CblasNoTrans) {
190
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
191
B = ( float* )malloc( (*n)*LDB*sizeof( float ) );
192
for( i=0; i<*n; i++ )
193
for( j=0; j<*k; j++ ) {
194
A[i*LDA+j]=a[j*(*lda)+i];
195
B[i*LDB+j]=b[j*(*ldb)+i];
201
A = ( float* )malloc( LDA*(*k)*sizeof( float ) );
202
B = ( float* )malloc( LDB*(*k)*sizeof( float ) );
203
for( i=0; i<*k; i++ )
204
for( j=0; j<*n; j++ ){
205
A[i*LDA+j]=a[j*(*lda)+i];
206
B[i*LDB+j]=b[j*(*ldb)+i];
210
C = ( float* )malloc( (*n)*LDC*sizeof( float ) );
211
for( i=0; i<*n; i++ )
212
for( j=0; j<*n; j++ )
213
C[i*LDC+j]=c[j*(*ldc)+i];
214
cblas_ssyr2k(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA,
215
B, LDB, *beta, C, LDC );
216
for( j=0; j<*n; j++ )
217
for( i=0; i<*n; i++ )
218
c[j*(*ldc)+i]=C[i*LDC+j];
223
else if (*order == TEST_COL_MJR)
224
cblas_ssyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda,
225
b, *ldb, *beta, c, *ldc );
227
cblas_ssyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda,
228
b, *ldb, *beta, c, *ldc );
230
void F77_strmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
231
int *m, int *n, float *alpha, float *a, int *lda, float *b,
235
enum CBLAS_SIDE side;
236
enum CBLAS_DIAG diag;
237
enum CBLAS_UPLO uplo;
238
enum CBLAS_TRANSPOSE trans;
240
get_uplo_type(uplow,&uplo);
241
get_transpose_type(transp,&trans);
242
get_diag_type(diagn,&diag);
243
get_side_type(rtlf,&side);
245
if (*order == TEST_ROW_MJR) {
246
if (side == CblasLeft) {
248
A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
249
for( i=0; i<*m; i++ )
250
for( j=0; j<*m; j++ )
251
A[i*LDA+j]=a[j*(*lda)+i];
255
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
256
for( i=0; i<*n; i++ )
257
for( j=0; j<*n; j++ )
258
A[i*LDA+j]=a[j*(*lda)+i];
261
B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
262
for( i=0; i<*m; i++ )
263
for( j=0; j<*n; j++ )
264
B[i*LDB+j]=b[j*(*ldb)+i];
265
cblas_strmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
267
for( j=0; j<*n; j++ )
268
for( i=0; i<*m; i++ )
269
b[j*(*ldb)+i]=B[i*LDB+j];
273
else if (*order == TEST_COL_MJR)
274
cblas_strmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
277
cblas_strmm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,
281
void F77_strsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
282
int *m, int *n, float *alpha, float *a, int *lda, float *b,
286
enum CBLAS_SIDE side;
287
enum CBLAS_DIAG diag;
288
enum CBLAS_UPLO uplo;
289
enum CBLAS_TRANSPOSE trans;
291
get_uplo_type(uplow,&uplo);
292
get_transpose_type(transp,&trans);
293
get_diag_type(diagn,&diag);
294
get_side_type(rtlf,&side);
296
if (*order == TEST_ROW_MJR) {
297
if (side == CblasLeft) {
299
A = ( float* )malloc( (*m)*LDA*sizeof( float ) );
300
for( i=0; i<*m; i++ )
301
for( j=0; j<*m; j++ )
302
A[i*LDA+j]=a[j*(*lda)+i];
306
A = ( float* )malloc( (*n)*LDA*sizeof( float ) );
307
for( i=0; i<*n; i++ )
308
for( j=0; j<*n; j++ )
309
A[i*LDA+j]=a[j*(*lda)+i];
312
B = ( float* )malloc( (*m)*LDB*sizeof( float ) );
313
for( i=0; i<*m; i++ )
314
for( j=0; j<*n; j++ )
315
B[i*LDB+j]=b[j*(*ldb)+i];
316
cblas_strsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
318
for( j=0; j<*n; j++ )
319
for( i=0; i<*m; i++ )
320
b[j*(*ldb)+i]=B[i*LDB+j];
324
else if (*order == TEST_COL_MJR)
325
cblas_strsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
328
cblas_strsm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,