xref: /aosp_15_r20/external/cblas/testing/c_sblas3.c (revision 1858f9982ea1ad57fb52080c08594e4d1cce4fa1)
1*1858f998SYi Kong /*
2*1858f998SYi Kong  *     Written by D.P. Manley, Digital Equipment Corporation.
3*1858f998SYi Kong  *     Prefixed "C_" to BLAS routines and their declarations.
4*1858f998SYi Kong  *
5*1858f998SYi Kong  *     Modified by T. H. Do, 2/19/98, SGI/CRAY Research.
6*1858f998SYi Kong  */
7*1858f998SYi Kong #include <stdio.h>
8*1858f998SYi Kong #include <stdlib.h>
9*1858f998SYi Kong #include "cblas.h"
10*1858f998SYi Kong #include "cblas_test.h"
11*1858f998SYi Kong 
F77_sgemm(int * order,char * transpa,char * transpb,int * m,int * n,int * k,float * alpha,float * a,int * lda,float * b,int * ldb,float * beta,float * c,int * ldc)12*1858f998SYi Kong void F77_sgemm(int *order, char *transpa, char *transpb, int *m, int *n,
13*1858f998SYi Kong               int *k, float *alpha, float *a, int *lda, float *b, int *ldb,
14*1858f998SYi Kong               float *beta, float *c, int *ldc ) {
15*1858f998SYi Kong 
16*1858f998SYi Kong   float *A, *B, *C;
17*1858f998SYi Kong   int i,j,LDA, LDB, LDC;
18*1858f998SYi Kong   enum CBLAS_TRANSPOSE transa, transb;
19*1858f998SYi Kong 
20*1858f998SYi Kong   get_transpose_type(transpa, &transa);
21*1858f998SYi Kong   get_transpose_type(transpb, &transb);
22*1858f998SYi Kong 
23*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
24*1858f998SYi Kong      if (transa == CblasNoTrans) {
25*1858f998SYi Kong         LDA = *k+1;
26*1858f998SYi Kong         A = (float *)malloc( (*m)*LDA*sizeof( float ) );
27*1858f998SYi Kong         for( i=0; i<*m; i++ )
28*1858f998SYi Kong            for( j=0; j<*k; j++ )
29*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
30*1858f998SYi Kong      }
31*1858f998SYi Kong      else {
32*1858f998SYi Kong         LDA = *m+1;
33*1858f998SYi Kong         A   = ( float* )malloc( LDA*(*k)*sizeof( float ) );
34*1858f998SYi Kong         for( i=0; i<*k; i++ )
35*1858f998SYi Kong            for( j=0; j<*m; j++ )
36*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
37*1858f998SYi Kong      }
38*1858f998SYi Kong      if (transb == CblasNoTrans) {
39*1858f998SYi Kong         LDB = *n+1;
40*1858f998SYi Kong         B   = ( float* )malloc( (*k)*LDB*sizeof( float ) );
41*1858f998SYi Kong         for( i=0; i<*k; i++ )
42*1858f998SYi Kong            for( j=0; j<*n; j++ )
43*1858f998SYi Kong               B[i*LDB+j]=b[j*(*ldb)+i];
44*1858f998SYi Kong      }
45*1858f998SYi Kong      else {
46*1858f998SYi Kong         LDB = *k+1;
47*1858f998SYi Kong         B   = ( float* )malloc( LDB*(*n)*sizeof( float ) );
48*1858f998SYi Kong         for( i=0; i<*n; i++ )
49*1858f998SYi Kong            for( j=0; j<*k; j++ )
50*1858f998SYi Kong               B[i*LDB+j]=b[j*(*ldb)+i];
51*1858f998SYi Kong      }
52*1858f998SYi Kong      LDC = *n+1;
53*1858f998SYi Kong      C   = ( float* )malloc( (*m)*LDC*sizeof( float ) );
54*1858f998SYi Kong      for( j=0; j<*n; j++ )
55*1858f998SYi Kong         for( i=0; i<*m; i++ )
56*1858f998SYi Kong            C[i*LDC+j]=c[j*(*ldc)+i];
57*1858f998SYi Kong      cblas_sgemm( CblasRowMajor, transa, transb, *m, *n, *k, *alpha, A, LDA,
58*1858f998SYi Kong                   B, LDB, *beta, C, LDC );
59*1858f998SYi Kong      for( j=0; j<*n; j++ )
60*1858f998SYi Kong         for( i=0; i<*m; i++ )
61*1858f998SYi Kong            c[j*(*ldc)+i]=C[i*LDC+j];
62*1858f998SYi Kong      free(A);
63*1858f998SYi Kong      free(B);
64*1858f998SYi Kong      free(C);
65*1858f998SYi Kong   }
66*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
67*1858f998SYi Kong      cblas_sgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda,
68*1858f998SYi Kong                   b, *ldb, *beta, c, *ldc );
69*1858f998SYi Kong   else
70*1858f998SYi Kong      cblas_sgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda,
71*1858f998SYi Kong                   b, *ldb, *beta, c, *ldc );
72*1858f998SYi Kong }
F77_ssymm(int * order,char * rtlf,char * uplow,int * m,int * n,float * alpha,float * a,int * lda,float * b,int * ldb,float * beta,float * c,int * ldc)73*1858f998SYi Kong void F77_ssymm(int *order, char *rtlf, char *uplow, int *m, int *n,
74*1858f998SYi Kong               float *alpha, float *a, int *lda, float *b, int *ldb,
75*1858f998SYi Kong               float *beta, float *c, int *ldc ) {
76*1858f998SYi Kong 
77*1858f998SYi Kong   float *A, *B, *C;
78*1858f998SYi Kong   int i,j,LDA, LDB, LDC;
79*1858f998SYi Kong   enum CBLAS_UPLO uplo;
80*1858f998SYi Kong   enum CBLAS_SIDE side;
81*1858f998SYi Kong 
82*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
83*1858f998SYi Kong   get_side_type(rtlf,&side);
84*1858f998SYi Kong 
85*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
86*1858f998SYi Kong      if (side == CblasLeft) {
87*1858f998SYi Kong         LDA = *m+1;
88*1858f998SYi Kong         A   = ( float* )malloc( (*m)*LDA*sizeof( float ) );
89*1858f998SYi Kong         for( i=0; i<*m; i++ )
90*1858f998SYi Kong            for( j=0; j<*m; j++ )
91*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
92*1858f998SYi Kong      }
93*1858f998SYi Kong      else{
94*1858f998SYi Kong         LDA = *n+1;
95*1858f998SYi Kong         A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
96*1858f998SYi Kong         for( i=0; i<*n; i++ )
97*1858f998SYi Kong            for( j=0; j<*n; j++ )
98*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
99*1858f998SYi Kong      }
100*1858f998SYi Kong      LDB = *n+1;
101*1858f998SYi Kong      B   = ( float* )malloc( (*m)*LDB*sizeof( float ) );
102*1858f998SYi Kong      for( i=0; i<*m; i++ )
103*1858f998SYi Kong         for( j=0; j<*n; j++ )
104*1858f998SYi Kong            B[i*LDB+j]=b[j*(*ldb)+i];
105*1858f998SYi Kong      LDC = *n+1;
106*1858f998SYi Kong      C   = ( float* )malloc( (*m)*LDC*sizeof( float ) );
107*1858f998SYi Kong      for( j=0; j<*n; j++ )
108*1858f998SYi Kong         for( i=0; i<*m; i++ )
109*1858f998SYi Kong            C[i*LDC+j]=c[j*(*ldc)+i];
110*1858f998SYi Kong      cblas_ssymm( CblasRowMajor, side, uplo, *m, *n, *alpha, A, LDA, B, LDB,
111*1858f998SYi Kong                   *beta, C, LDC );
112*1858f998SYi Kong      for( j=0; j<*n; j++ )
113*1858f998SYi Kong         for( i=0; i<*m; i++ )
114*1858f998SYi Kong            c[j*(*ldc)+i]=C[i*LDC+j];
115*1858f998SYi Kong      free(A);
116*1858f998SYi Kong      free(B);
117*1858f998SYi Kong      free(C);
118*1858f998SYi Kong   }
119*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
120*1858f998SYi Kong      cblas_ssymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
121*1858f998SYi Kong                   *beta, c, *ldc );
122*1858f998SYi Kong   else
123*1858f998SYi Kong      cblas_ssymm( UNDEFINED, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
124*1858f998SYi Kong                   *beta, c, *ldc );
125*1858f998SYi Kong }
126*1858f998SYi Kong 
F77_ssyrk(int * order,char * uplow,char * transp,int * n,int * k,float * alpha,float * a,int * lda,float * beta,float * c,int * ldc)127*1858f998SYi Kong void F77_ssyrk(int *order, char *uplow, char *transp, int *n, int *k,
128*1858f998SYi Kong               float *alpha, float *a, int *lda,
129*1858f998SYi Kong               float *beta, float *c, int *ldc ) {
130*1858f998SYi Kong 
131*1858f998SYi Kong   int i,j,LDA,LDC;
132*1858f998SYi Kong   float *A, *C;
133*1858f998SYi Kong   enum CBLAS_UPLO uplo;
134*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
135*1858f998SYi Kong 
136*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
137*1858f998SYi Kong   get_transpose_type(transp,&trans);
138*1858f998SYi Kong 
139*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
140*1858f998SYi Kong      if (trans == CblasNoTrans) {
141*1858f998SYi Kong         LDA = *k+1;
142*1858f998SYi Kong         A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
143*1858f998SYi Kong         for( i=0; i<*n; i++ )
144*1858f998SYi Kong            for( j=0; j<*k; j++ )
145*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
146*1858f998SYi Kong      }
147*1858f998SYi Kong      else{
148*1858f998SYi Kong         LDA = *n+1;
149*1858f998SYi Kong         A   = ( float* )malloc( (*k)*LDA*sizeof( float ) );
150*1858f998SYi Kong         for( i=0; i<*k; i++ )
151*1858f998SYi Kong            for( j=0; j<*n; j++ )
152*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
153*1858f998SYi Kong      }
154*1858f998SYi Kong      LDC = *n+1;
155*1858f998SYi Kong      C   = ( float* )malloc( (*n)*LDC*sizeof( float ) );
156*1858f998SYi Kong      for( i=0; i<*n; i++ )
157*1858f998SYi Kong         for( j=0; j<*n; j++ )
158*1858f998SYi Kong            C[i*LDC+j]=c[j*(*ldc)+i];
159*1858f998SYi Kong      cblas_ssyrk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta,
160*1858f998SYi Kong 	         C, LDC );
161*1858f998SYi Kong      for( j=0; j<*n; j++ )
162*1858f998SYi Kong         for( i=0; i<*n; i++ )
163*1858f998SYi Kong            c[j*(*ldc)+i]=C[i*LDC+j];
164*1858f998SYi Kong      free(A);
165*1858f998SYi Kong      free(C);
166*1858f998SYi Kong   }
167*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
168*1858f998SYi Kong      cblas_ssyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
169*1858f998SYi Kong 	         c, *ldc );
170*1858f998SYi Kong   else
171*1858f998SYi Kong      cblas_ssyrk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
172*1858f998SYi Kong 	         c, *ldc );
173*1858f998SYi Kong }
174*1858f998SYi Kong 
F77_ssyr2k(int * order,char * uplow,char * transp,int * n,int * k,float * alpha,float * a,int * lda,float * b,int * ldb,float * beta,float * c,int * ldc)175*1858f998SYi Kong void F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k,
176*1858f998SYi Kong                float *alpha, float *a, int *lda, float *b, int *ldb,
177*1858f998SYi Kong                float *beta, float *c, int *ldc ) {
178*1858f998SYi Kong   int i,j,LDA,LDB,LDC;
179*1858f998SYi Kong   float *A, *B, *C;
180*1858f998SYi Kong   enum CBLAS_UPLO uplo;
181*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
182*1858f998SYi Kong 
183*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
184*1858f998SYi Kong   get_transpose_type(transp,&trans);
185*1858f998SYi Kong 
186*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
187*1858f998SYi Kong      if (trans == CblasNoTrans) {
188*1858f998SYi Kong         LDA = *k+1;
189*1858f998SYi Kong         LDB = *k+1;
190*1858f998SYi Kong         A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
191*1858f998SYi Kong         B   = ( float* )malloc( (*n)*LDB*sizeof( float ) );
192*1858f998SYi Kong         for( i=0; i<*n; i++ )
193*1858f998SYi Kong            for( j=0; j<*k; j++ ) {
194*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
195*1858f998SYi Kong               B[i*LDB+j]=b[j*(*ldb)+i];
196*1858f998SYi Kong            }
197*1858f998SYi Kong      }
198*1858f998SYi Kong      else {
199*1858f998SYi Kong         LDA = *n+1;
200*1858f998SYi Kong         LDB = *n+1;
201*1858f998SYi Kong         A   = ( float* )malloc( LDA*(*k)*sizeof( float ) );
202*1858f998SYi Kong         B   = ( float* )malloc( LDB*(*k)*sizeof( float ) );
203*1858f998SYi Kong         for( i=0; i<*k; i++ )
204*1858f998SYi Kong            for( j=0; j<*n; j++ ){
205*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
206*1858f998SYi Kong               B[i*LDB+j]=b[j*(*ldb)+i];
207*1858f998SYi Kong            }
208*1858f998SYi Kong      }
209*1858f998SYi Kong      LDC = *n+1;
210*1858f998SYi Kong      C   = ( float* )malloc( (*n)*LDC*sizeof( float ) );
211*1858f998SYi Kong      for( i=0; i<*n; i++ )
212*1858f998SYi Kong         for( j=0; j<*n; j++ )
213*1858f998SYi Kong            C[i*LDC+j]=c[j*(*ldc)+i];
214*1858f998SYi Kong      cblas_ssyr2k(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA,
215*1858f998SYi Kong 		  B, LDB, *beta, C, LDC );
216*1858f998SYi Kong      for( j=0; j<*n; j++ )
217*1858f998SYi Kong         for( i=0; i<*n; i++ )
218*1858f998SYi Kong            c[j*(*ldc)+i]=C[i*LDC+j];
219*1858f998SYi Kong      free(A);
220*1858f998SYi Kong      free(B);
221*1858f998SYi Kong      free(C);
222*1858f998SYi Kong   }
223*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
224*1858f998SYi Kong      cblas_ssyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda,
225*1858f998SYi Kong 		   b, *ldb, *beta, c, *ldc );
226*1858f998SYi Kong   else
227*1858f998SYi Kong      cblas_ssyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda,
228*1858f998SYi Kong 		   b, *ldb, *beta, c, *ldc );
229*1858f998SYi Kong }
F77_strmm(int * order,char * rtlf,char * uplow,char * transp,char * diagn,int * m,int * n,float * alpha,float * a,int * lda,float * b,int * ldb)230*1858f998SYi Kong void F77_strmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
231*1858f998SYi Kong               int *m, int *n, float *alpha, float *a, int *lda, float *b,
232*1858f998SYi Kong               int *ldb) {
233*1858f998SYi Kong   int i,j,LDA,LDB;
234*1858f998SYi Kong   float *A, *B;
235*1858f998SYi Kong   enum CBLAS_SIDE side;
236*1858f998SYi Kong   enum CBLAS_DIAG diag;
237*1858f998SYi Kong   enum CBLAS_UPLO uplo;
238*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
239*1858f998SYi Kong 
240*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
241*1858f998SYi Kong   get_transpose_type(transp,&trans);
242*1858f998SYi Kong   get_diag_type(diagn,&diag);
243*1858f998SYi Kong   get_side_type(rtlf,&side);
244*1858f998SYi Kong 
245*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
246*1858f998SYi Kong      if (side == CblasLeft) {
247*1858f998SYi Kong         LDA = *m+1;
248*1858f998SYi Kong         A   = ( float* )malloc( (*m)*LDA*sizeof( float ) );
249*1858f998SYi Kong         for( i=0; i<*m; i++ )
250*1858f998SYi Kong            for( j=0; j<*m; j++ )
251*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
252*1858f998SYi Kong      }
253*1858f998SYi Kong      else{
254*1858f998SYi Kong         LDA = *n+1;
255*1858f998SYi Kong         A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
256*1858f998SYi Kong         for( i=0; i<*n; i++ )
257*1858f998SYi Kong            for( j=0; j<*n; j++ )
258*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
259*1858f998SYi Kong      }
260*1858f998SYi Kong      LDB = *n+1;
261*1858f998SYi Kong      B   = ( float* )malloc( (*m)*LDB*sizeof( float ) );
262*1858f998SYi Kong      for( i=0; i<*m; i++ )
263*1858f998SYi Kong         for( j=0; j<*n; j++ )
264*1858f998SYi Kong            B[i*LDB+j]=b[j*(*ldb)+i];
265*1858f998SYi Kong      cblas_strmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
266*1858f998SYi Kong 		 A, LDA, B, LDB );
267*1858f998SYi Kong      for( j=0; j<*n; j++ )
268*1858f998SYi Kong         for( i=0; i<*m; i++ )
269*1858f998SYi Kong            b[j*(*ldb)+i]=B[i*LDB+j];
270*1858f998SYi Kong      free(A);
271*1858f998SYi Kong      free(B);
272*1858f998SYi Kong   }
273*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
274*1858f998SYi Kong      cblas_strmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
275*1858f998SYi Kong 		   a, *lda, b, *ldb);
276*1858f998SYi Kong   else
277*1858f998SYi Kong      cblas_strmm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,
278*1858f998SYi Kong 		   a, *lda, b, *ldb);
279*1858f998SYi Kong }
280*1858f998SYi Kong 
F77_strsm(int * order,char * rtlf,char * uplow,char * transp,char * diagn,int * m,int * n,float * alpha,float * a,int * lda,float * b,int * ldb)281*1858f998SYi Kong void F77_strsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
282*1858f998SYi Kong               int *m, int *n, float *alpha, float *a, int *lda, float *b,
283*1858f998SYi Kong               int *ldb) {
284*1858f998SYi Kong   int i,j,LDA,LDB;
285*1858f998SYi Kong   float *A, *B;
286*1858f998SYi Kong   enum CBLAS_SIDE side;
287*1858f998SYi Kong   enum CBLAS_DIAG diag;
288*1858f998SYi Kong   enum CBLAS_UPLO uplo;
289*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
290*1858f998SYi Kong 
291*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
292*1858f998SYi Kong   get_transpose_type(transp,&trans);
293*1858f998SYi Kong   get_diag_type(diagn,&diag);
294*1858f998SYi Kong   get_side_type(rtlf,&side);
295*1858f998SYi Kong 
296*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
297*1858f998SYi Kong      if (side == CblasLeft) {
298*1858f998SYi Kong         LDA = *m+1;
299*1858f998SYi Kong         A   = ( float* )malloc( (*m)*LDA*sizeof( float ) );
300*1858f998SYi Kong         for( i=0; i<*m; i++ )
301*1858f998SYi Kong            for( j=0; j<*m; j++ )
302*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
303*1858f998SYi Kong      }
304*1858f998SYi Kong      else{
305*1858f998SYi Kong         LDA = *n+1;
306*1858f998SYi Kong         A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
307*1858f998SYi Kong         for( i=0; i<*n; i++ )
308*1858f998SYi Kong            for( j=0; j<*n; j++ )
309*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
310*1858f998SYi Kong      }
311*1858f998SYi Kong      LDB = *n+1;
312*1858f998SYi Kong      B   = ( float* )malloc( (*m)*LDB*sizeof( float ) );
313*1858f998SYi Kong      for( i=0; i<*m; i++ )
314*1858f998SYi Kong         for( j=0; j<*n; j++ )
315*1858f998SYi Kong            B[i*LDB+j]=b[j*(*ldb)+i];
316*1858f998SYi Kong      cblas_strsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
317*1858f998SYi Kong 		 A, LDA, B, LDB );
318*1858f998SYi Kong      for( j=0; j<*n; j++ )
319*1858f998SYi Kong         for( i=0; i<*m; i++ )
320*1858f998SYi Kong            b[j*(*ldb)+i]=B[i*LDB+j];
321*1858f998SYi Kong      free(A);
322*1858f998SYi Kong      free(B);
323*1858f998SYi Kong   }
324*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
325*1858f998SYi Kong      cblas_strsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
326*1858f998SYi Kong 		   a, *lda, b, *ldb);
327*1858f998SYi Kong   else
328*1858f998SYi Kong      cblas_strsm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,
329*1858f998SYi Kong 		   a, *lda, b, *ldb);
330*1858f998SYi Kong }
331