xref: /aosp_15_r20/external/cblas/testing/c_cblas3.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, 4/15/98, SGI/CRAY Research.
6*1858f998SYi Kong  */
7*1858f998SYi Kong #include <stdlib.h>
8*1858f998SYi Kong #include "cblas.h"
9*1858f998SYi Kong #include "cblas_test.h"
10*1858f998SYi Kong #define  TEST_COL_MJR	0
11*1858f998SYi Kong #define  TEST_ROW_MJR	1
12*1858f998SYi Kong #define  UNDEFINED     -1
13*1858f998SYi Kong 
F77_cgemm(int * order,char * transpa,char * transpb,int * m,int * n,int * k,CBLAS_TEST_COMPLEX * alpha,CBLAS_TEST_COMPLEX * a,int * lda,CBLAS_TEST_COMPLEX * b,int * ldb,CBLAS_TEST_COMPLEX * beta,CBLAS_TEST_COMPLEX * c,int * ldc)14*1858f998SYi Kong void F77_cgemm(int *order, char *transpa, char *transpb, int *m, int *n,
15*1858f998SYi Kong      int *k, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
16*1858f998SYi Kong      CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
17*1858f998SYi Kong      CBLAS_TEST_COMPLEX *c, int *ldc ) {
18*1858f998SYi Kong 
19*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *B, *C;
20*1858f998SYi Kong   int i,j,LDA, LDB, LDC;
21*1858f998SYi Kong   enum CBLAS_TRANSPOSE transa, transb;
22*1858f998SYi Kong 
23*1858f998SYi Kong   get_transpose_type(transpa, &transa);
24*1858f998SYi Kong   get_transpose_type(transpb, &transb);
25*1858f998SYi Kong 
26*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
27*1858f998SYi Kong      if (transa == CblasNoTrans) {
28*1858f998SYi Kong         LDA = *k+1;
29*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX*)malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX));
30*1858f998SYi Kong         for( i=0; i<*m; i++ )
31*1858f998SYi Kong            for( j=0; j<*k; j++ ) {
32*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
33*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
34*1858f998SYi Kong            }
35*1858f998SYi Kong      }
36*1858f998SYi Kong      else {
37*1858f998SYi Kong         LDA = *m+1;
38*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_COMPLEX));
39*1858f998SYi Kong         for( i=0; i<*k; i++ )
40*1858f998SYi Kong            for( j=0; j<*m; j++ ) {
41*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
42*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
43*1858f998SYi Kong            }
44*1858f998SYi Kong      }
45*1858f998SYi Kong 
46*1858f998SYi Kong      if (transb == CblasNoTrans) {
47*1858f998SYi Kong         LDB = *n+1;
48*1858f998SYi Kong         B=(CBLAS_TEST_COMPLEX* )malloc((*k)*LDB*sizeof(CBLAS_TEST_COMPLEX) );
49*1858f998SYi Kong         for( i=0; i<*k; i++ )
50*1858f998SYi Kong            for( j=0; j<*n; j++ ) {
51*1858f998SYi Kong               B[i*LDB+j].real=b[j*(*ldb)+i].real;
52*1858f998SYi Kong               B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
53*1858f998SYi Kong            }
54*1858f998SYi Kong      }
55*1858f998SYi Kong      else {
56*1858f998SYi Kong         LDB = *k+1;
57*1858f998SYi Kong         B=(CBLAS_TEST_COMPLEX* )malloc(LDB*(*n)*sizeof(CBLAS_TEST_COMPLEX));
58*1858f998SYi Kong         for( i=0; i<*n; i++ )
59*1858f998SYi Kong            for( j=0; j<*k; j++ ) {
60*1858f998SYi Kong               B[i*LDB+j].real=b[j*(*ldb)+i].real;
61*1858f998SYi Kong               B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
62*1858f998SYi Kong            }
63*1858f998SYi Kong      }
64*1858f998SYi Kong 
65*1858f998SYi Kong      LDC = *n+1;
66*1858f998SYi Kong      C=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_COMPLEX));
67*1858f998SYi Kong      for( j=0; j<*n; j++ )
68*1858f998SYi Kong         for( i=0; i<*m; i++ ) {
69*1858f998SYi Kong            C[i*LDC+j].real=c[j*(*ldc)+i].real;
70*1858f998SYi Kong            C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
71*1858f998SYi Kong         }
72*1858f998SYi Kong      cblas_cgemm( CblasRowMajor, transa, transb, *m, *n, *k, alpha, A, LDA,
73*1858f998SYi Kong                   B, LDB, beta, C, LDC );
74*1858f998SYi Kong      for( j=0; j<*n; j++ )
75*1858f998SYi Kong         for( i=0; i<*m; i++ ) {
76*1858f998SYi Kong            c[j*(*ldc)+i].real=C[i*LDC+j].real;
77*1858f998SYi Kong            c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
78*1858f998SYi Kong         }
79*1858f998SYi Kong      free(A);
80*1858f998SYi Kong      free(B);
81*1858f998SYi Kong      free(C);
82*1858f998SYi Kong   }
83*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
84*1858f998SYi Kong      cblas_cgemm( CblasColMajor, transa, transb, *m, *n, *k, alpha, a, *lda,
85*1858f998SYi Kong                   b, *ldb, beta, c, *ldc );
86*1858f998SYi Kong   else
87*1858f998SYi Kong      cblas_cgemm( UNDEFINED, transa, transb, *m, *n, *k, alpha, a, *lda,
88*1858f998SYi Kong                   b, *ldb, beta, c, *ldc );
89*1858f998SYi Kong }
F77_chemm(int * order,char * rtlf,char * uplow,int * m,int * n,CBLAS_TEST_COMPLEX * alpha,CBLAS_TEST_COMPLEX * a,int * lda,CBLAS_TEST_COMPLEX * b,int * ldb,CBLAS_TEST_COMPLEX * beta,CBLAS_TEST_COMPLEX * c,int * ldc)90*1858f998SYi Kong void F77_chemm(int *order, char *rtlf, char *uplow, int *m, int *n,
91*1858f998SYi Kong         CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
92*1858f998SYi Kong 	CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
93*1858f998SYi Kong         CBLAS_TEST_COMPLEX *c, int *ldc ) {
94*1858f998SYi Kong 
95*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *B, *C;
96*1858f998SYi Kong   int i,j,LDA, LDB, LDC;
97*1858f998SYi Kong   enum CBLAS_UPLO uplo;
98*1858f998SYi Kong   enum CBLAS_SIDE side;
99*1858f998SYi Kong 
100*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
101*1858f998SYi Kong   get_side_type(rtlf,&side);
102*1858f998SYi Kong 
103*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
104*1858f998SYi Kong      if (side == CblasLeft) {
105*1858f998SYi Kong         LDA = *m+1;
106*1858f998SYi Kong         A= (CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX));
107*1858f998SYi Kong         for( i=0; i<*m; i++ )
108*1858f998SYi Kong            for( j=0; j<*m; j++ ) {
109*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
110*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
111*1858f998SYi Kong            }
112*1858f998SYi Kong      }
113*1858f998SYi Kong      else{
114*1858f998SYi Kong         LDA = *n+1;
115*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX ) );
116*1858f998SYi Kong         for( i=0; i<*n; i++ )
117*1858f998SYi Kong            for( j=0; j<*n; j++ ) {
118*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
119*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
120*1858f998SYi Kong            }
121*1858f998SYi Kong      }
122*1858f998SYi Kong      LDB = *n+1;
123*1858f998SYi Kong      B=(CBLAS_TEST_COMPLEX* )malloc( (*m)*LDB*sizeof(CBLAS_TEST_COMPLEX ) );
124*1858f998SYi Kong      for( i=0; i<*m; i++ )
125*1858f998SYi Kong         for( j=0; j<*n; j++ ) {
126*1858f998SYi Kong            B[i*LDB+j].real=b[j*(*ldb)+i].real;
127*1858f998SYi Kong            B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
128*1858f998SYi Kong         }
129*1858f998SYi Kong      LDC = *n+1;
130*1858f998SYi Kong      C=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_COMPLEX ) );
131*1858f998SYi Kong      for( j=0; j<*n; j++ )
132*1858f998SYi Kong         for( i=0; i<*m; i++ ) {
133*1858f998SYi Kong            C[i*LDC+j].real=c[j*(*ldc)+i].real;
134*1858f998SYi Kong            C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
135*1858f998SYi Kong         }
136*1858f998SYi Kong      cblas_chemm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB,
137*1858f998SYi Kong                   beta, C, LDC );
138*1858f998SYi Kong      for( j=0; j<*n; j++ )
139*1858f998SYi Kong         for( i=0; i<*m; i++ ) {
140*1858f998SYi Kong            c[j*(*ldc)+i].real=C[i*LDC+j].real;
141*1858f998SYi Kong            c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
142*1858f998SYi Kong         }
143*1858f998SYi Kong      free(A);
144*1858f998SYi Kong      free(B);
145*1858f998SYi Kong      free(C);
146*1858f998SYi Kong   }
147*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
148*1858f998SYi Kong      cblas_chemm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
149*1858f998SYi Kong                   beta, c, *ldc );
150*1858f998SYi Kong   else
151*1858f998SYi Kong      cblas_chemm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
152*1858f998SYi Kong                   beta, c, *ldc );
153*1858f998SYi Kong }
F77_csymm(int * order,char * rtlf,char * uplow,int * m,int * n,CBLAS_TEST_COMPLEX * alpha,CBLAS_TEST_COMPLEX * a,int * lda,CBLAS_TEST_COMPLEX * b,int * ldb,CBLAS_TEST_COMPLEX * beta,CBLAS_TEST_COMPLEX * c,int * ldc)154*1858f998SYi Kong void F77_csymm(int *order, char *rtlf, char *uplow, int *m, int *n,
155*1858f998SYi Kong           CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
156*1858f998SYi Kong 	  CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
157*1858f998SYi Kong           CBLAS_TEST_COMPLEX *c, int *ldc ) {
158*1858f998SYi Kong 
159*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *B, *C;
160*1858f998SYi Kong   int i,j,LDA, LDB, LDC;
161*1858f998SYi Kong   enum CBLAS_UPLO uplo;
162*1858f998SYi Kong   enum CBLAS_SIDE side;
163*1858f998SYi Kong 
164*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
165*1858f998SYi Kong   get_side_type(rtlf,&side);
166*1858f998SYi Kong 
167*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
168*1858f998SYi Kong      if (side == CblasLeft) {
169*1858f998SYi Kong         LDA = *m+1;
170*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX));
171*1858f998SYi Kong         for( i=0; i<*m; i++ )
172*1858f998SYi Kong            for( j=0; j<*m; j++ )
173*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
174*1858f998SYi Kong      }
175*1858f998SYi Kong      else{
176*1858f998SYi Kong         LDA = *n+1;
177*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX ) );
178*1858f998SYi Kong         for( i=0; i<*n; i++ )
179*1858f998SYi Kong            for( j=0; j<*n; j++ )
180*1858f998SYi Kong               A[i*LDA+j]=a[j*(*lda)+i];
181*1858f998SYi Kong      }
182*1858f998SYi Kong      LDB = *n+1;
183*1858f998SYi Kong      B=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_COMPLEX ));
184*1858f998SYi Kong      for( i=0; i<*m; i++ )
185*1858f998SYi Kong         for( j=0; j<*n; j++ )
186*1858f998SYi Kong            B[i*LDB+j]=b[j*(*ldb)+i];
187*1858f998SYi Kong      LDC = *n+1;
188*1858f998SYi Kong      C=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDC*sizeof(CBLAS_TEST_COMPLEX));
189*1858f998SYi Kong      for( j=0; j<*n; j++ )
190*1858f998SYi Kong         for( i=0; i<*m; i++ )
191*1858f998SYi Kong            C[i*LDC+j]=c[j*(*ldc)+i];
192*1858f998SYi Kong      cblas_csymm( CblasRowMajor, side, uplo, *m, *n, alpha, A, LDA, B, LDB,
193*1858f998SYi Kong                   beta, C, LDC );
194*1858f998SYi Kong      for( j=0; j<*n; j++ )
195*1858f998SYi Kong         for( i=0; i<*m; i++ )
196*1858f998SYi Kong            c[j*(*ldc)+i]=C[i*LDC+j];
197*1858f998SYi Kong      free(A);
198*1858f998SYi Kong      free(B);
199*1858f998SYi Kong      free(C);
200*1858f998SYi Kong   }
201*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
202*1858f998SYi Kong      cblas_csymm( CblasColMajor, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
203*1858f998SYi Kong                   beta, c, *ldc );
204*1858f998SYi Kong   else
205*1858f998SYi Kong      cblas_csymm( UNDEFINED, side, uplo, *m, *n, alpha, a, *lda, b, *ldb,
206*1858f998SYi Kong                   beta, c, *ldc );
207*1858f998SYi Kong }
208*1858f998SYi Kong 
F77_cherk(int * order,char * uplow,char * transp,int * n,int * k,float * alpha,CBLAS_TEST_COMPLEX * a,int * lda,float * beta,CBLAS_TEST_COMPLEX * c,int * ldc)209*1858f998SYi Kong void F77_cherk(int *order, char *uplow, char *transp, int *n, int *k,
210*1858f998SYi Kong      float *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
211*1858f998SYi Kong      float *beta, CBLAS_TEST_COMPLEX *c, int *ldc ) {
212*1858f998SYi Kong 
213*1858f998SYi Kong   int i,j,LDA,LDC;
214*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *C;
215*1858f998SYi Kong   enum CBLAS_UPLO uplo;
216*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
217*1858f998SYi Kong 
218*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
219*1858f998SYi Kong   get_transpose_type(transp,&trans);
220*1858f998SYi Kong 
221*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
222*1858f998SYi Kong      if (trans == CblasNoTrans) {
223*1858f998SYi Kong         LDA = *k+1;
224*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX ) );
225*1858f998SYi Kong         for( i=0; i<*n; i++ )
226*1858f998SYi Kong            for( j=0; j<*k; j++ ) {
227*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
228*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
229*1858f998SYi Kong            }
230*1858f998SYi Kong      }
231*1858f998SYi Kong      else{
232*1858f998SYi Kong         LDA = *n+1;
233*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_COMPLEX ) );
234*1858f998SYi Kong         for( i=0; i<*k; i++ )
235*1858f998SYi Kong            for( j=0; j<*n; j++ ) {
236*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
237*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
238*1858f998SYi Kong            }
239*1858f998SYi Kong      }
240*1858f998SYi Kong      LDC = *n+1;
241*1858f998SYi Kong      C=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_COMPLEX ) );
242*1858f998SYi Kong      for( i=0; i<*n; i++ )
243*1858f998SYi Kong         for( j=0; j<*n; j++ ) {
244*1858f998SYi Kong            C[i*LDC+j].real=c[j*(*ldc)+i].real;
245*1858f998SYi Kong            C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
246*1858f998SYi Kong         }
247*1858f998SYi Kong      cblas_cherk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta,
248*1858f998SYi Kong 	         C, LDC );
249*1858f998SYi Kong      for( j=0; j<*n; j++ )
250*1858f998SYi Kong         for( i=0; i<*n; i++ ) {
251*1858f998SYi Kong            c[j*(*ldc)+i].real=C[i*LDC+j].real;
252*1858f998SYi Kong            c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
253*1858f998SYi Kong         }
254*1858f998SYi Kong      free(A);
255*1858f998SYi Kong      free(C);
256*1858f998SYi Kong   }
257*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
258*1858f998SYi Kong      cblas_cherk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
259*1858f998SYi Kong 	         c, *ldc );
260*1858f998SYi Kong   else
261*1858f998SYi Kong      cblas_cherk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
262*1858f998SYi Kong 	         c, *ldc );
263*1858f998SYi Kong }
264*1858f998SYi Kong 
F77_csyrk(int * order,char * uplow,char * transp,int * n,int * k,CBLAS_TEST_COMPLEX * alpha,CBLAS_TEST_COMPLEX * a,int * lda,CBLAS_TEST_COMPLEX * beta,CBLAS_TEST_COMPLEX * c,int * ldc)265*1858f998SYi Kong void F77_csyrk(int *order, char *uplow, char *transp, int *n, int *k,
266*1858f998SYi Kong      CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
267*1858f998SYi Kong      CBLAS_TEST_COMPLEX *beta, CBLAS_TEST_COMPLEX *c, int *ldc ) {
268*1858f998SYi Kong 
269*1858f998SYi Kong   int i,j,LDA,LDC;
270*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *C;
271*1858f998SYi Kong   enum CBLAS_UPLO uplo;
272*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
273*1858f998SYi Kong 
274*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
275*1858f998SYi Kong   get_transpose_type(transp,&trans);
276*1858f998SYi Kong 
277*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
278*1858f998SYi Kong      if (trans == CblasNoTrans) {
279*1858f998SYi Kong         LDA = *k+1;
280*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX));
281*1858f998SYi Kong         for( i=0; i<*n; i++ )
282*1858f998SYi Kong            for( j=0; j<*k; j++ ) {
283*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
284*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
285*1858f998SYi Kong            }
286*1858f998SYi Kong      }
287*1858f998SYi Kong      else{
288*1858f998SYi Kong         LDA = *n+1;
289*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*k)*LDA*sizeof(CBLAS_TEST_COMPLEX ) );
290*1858f998SYi Kong         for( i=0; i<*k; i++ )
291*1858f998SYi Kong            for( j=0; j<*n; j++ ) {
292*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
293*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
294*1858f998SYi Kong            }
295*1858f998SYi Kong      }
296*1858f998SYi Kong      LDC = *n+1;
297*1858f998SYi Kong      C=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDC*sizeof(CBLAS_TEST_COMPLEX ) );
298*1858f998SYi Kong      for( i=0; i<*n; i++ )
299*1858f998SYi Kong         for( j=0; j<*n; j++ ) {
300*1858f998SYi Kong            C[i*LDC+j].real=c[j*(*ldc)+i].real;
301*1858f998SYi Kong            C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
302*1858f998SYi Kong         }
303*1858f998SYi Kong      cblas_csyrk(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA, beta,
304*1858f998SYi Kong 	         C, LDC );
305*1858f998SYi Kong      for( j=0; j<*n; j++ )
306*1858f998SYi Kong         for( i=0; i<*n; i++ ) {
307*1858f998SYi Kong            c[j*(*ldc)+i].real=C[i*LDC+j].real;
308*1858f998SYi Kong            c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
309*1858f998SYi Kong         }
310*1858f998SYi Kong      free(A);
311*1858f998SYi Kong      free(C);
312*1858f998SYi Kong   }
313*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
314*1858f998SYi Kong      cblas_csyrk(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda, beta,
315*1858f998SYi Kong 	         c, *ldc );
316*1858f998SYi Kong   else
317*1858f998SYi Kong      cblas_csyrk(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda, beta,
318*1858f998SYi Kong 	         c, *ldc );
319*1858f998SYi Kong }
F77_cher2k(int * order,char * uplow,char * transp,int * n,int * k,CBLAS_TEST_COMPLEX * alpha,CBLAS_TEST_COMPLEX * a,int * lda,CBLAS_TEST_COMPLEX * b,int * ldb,float * beta,CBLAS_TEST_COMPLEX * c,int * ldc)320*1858f998SYi Kong void F77_cher2k(int *order, char *uplow, char *transp, int *n, int *k,
321*1858f998SYi Kong         CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
322*1858f998SYi Kong 	CBLAS_TEST_COMPLEX *b, int *ldb, float *beta,
323*1858f998SYi Kong         CBLAS_TEST_COMPLEX *c, int *ldc ) {
324*1858f998SYi Kong   int i,j,LDA,LDB,LDC;
325*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *B, *C;
326*1858f998SYi Kong   enum CBLAS_UPLO uplo;
327*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
328*1858f998SYi Kong 
329*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
330*1858f998SYi Kong   get_transpose_type(transp,&trans);
331*1858f998SYi Kong 
332*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
333*1858f998SYi Kong      if (trans == CblasNoTrans) {
334*1858f998SYi Kong         LDA = *k+1;
335*1858f998SYi Kong         LDB = *k+1;
336*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX ));
337*1858f998SYi Kong         B=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_COMPLEX ));
338*1858f998SYi Kong         for( i=0; i<*n; i++ )
339*1858f998SYi Kong            for( j=0; j<*k; j++ ) {
340*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
341*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
342*1858f998SYi Kong               B[i*LDB+j].real=b[j*(*ldb)+i].real;
343*1858f998SYi Kong               B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
344*1858f998SYi Kong            }
345*1858f998SYi Kong      }
346*1858f998SYi Kong      else {
347*1858f998SYi Kong         LDA = *n+1;
348*1858f998SYi Kong         LDB = *n+1;
349*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc( LDA*(*k)*sizeof(CBLAS_TEST_COMPLEX ) );
350*1858f998SYi Kong         B=(CBLAS_TEST_COMPLEX* )malloc( LDB*(*k)*sizeof(CBLAS_TEST_COMPLEX ) );
351*1858f998SYi Kong         for( i=0; i<*k; i++ )
352*1858f998SYi Kong            for( j=0; j<*n; j++ ){
353*1858f998SYi Kong 	      A[i*LDA+j].real=a[j*(*lda)+i].real;
354*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
355*1858f998SYi Kong               B[i*LDB+j].real=b[j*(*ldb)+i].real;
356*1858f998SYi Kong               B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
357*1858f998SYi Kong            }
358*1858f998SYi Kong      }
359*1858f998SYi Kong      LDC = *n+1;
360*1858f998SYi Kong      C=(CBLAS_TEST_COMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_COMPLEX ) );
361*1858f998SYi Kong      for( i=0; i<*n; i++ )
362*1858f998SYi Kong         for( j=0; j<*n; j++ ) {
363*1858f998SYi Kong            C[i*LDC+j].real=c[j*(*ldc)+i].real;
364*1858f998SYi Kong            C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
365*1858f998SYi Kong         }
366*1858f998SYi Kong      cblas_cher2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA,
367*1858f998SYi Kong 		  B, LDB, *beta, C, LDC );
368*1858f998SYi Kong      for( j=0; j<*n; j++ )
369*1858f998SYi Kong         for( i=0; i<*n; i++ ) {
370*1858f998SYi Kong            c[j*(*ldc)+i].real=C[i*LDC+j].real;
371*1858f998SYi Kong            c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
372*1858f998SYi Kong         }
373*1858f998SYi Kong      free(A);
374*1858f998SYi Kong      free(B);
375*1858f998SYi Kong      free(C);
376*1858f998SYi Kong   }
377*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
378*1858f998SYi Kong      cblas_cher2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda,
379*1858f998SYi Kong 		   b, *ldb, *beta, c, *ldc );
380*1858f998SYi Kong   else
381*1858f998SYi Kong      cblas_cher2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda,
382*1858f998SYi Kong 		   b, *ldb, *beta, c, *ldc );
383*1858f998SYi Kong }
F77_csyr2k(int * order,char * uplow,char * transp,int * n,int * k,CBLAS_TEST_COMPLEX * alpha,CBLAS_TEST_COMPLEX * a,int * lda,CBLAS_TEST_COMPLEX * b,int * ldb,CBLAS_TEST_COMPLEX * beta,CBLAS_TEST_COMPLEX * c,int * ldc)384*1858f998SYi Kong void F77_csyr2k(int *order, char *uplow, char *transp, int *n, int *k,
385*1858f998SYi Kong          CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda,
386*1858f998SYi Kong 	 CBLAS_TEST_COMPLEX *b, int *ldb, CBLAS_TEST_COMPLEX *beta,
387*1858f998SYi Kong          CBLAS_TEST_COMPLEX *c, int *ldc ) {
388*1858f998SYi Kong   int i,j,LDA,LDB,LDC;
389*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *B, *C;
390*1858f998SYi Kong   enum CBLAS_UPLO uplo;
391*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
392*1858f998SYi Kong 
393*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
394*1858f998SYi Kong   get_transpose_type(transp,&trans);
395*1858f998SYi Kong 
396*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
397*1858f998SYi Kong      if (trans == CblasNoTrans) {
398*1858f998SYi Kong         LDA = *k+1;
399*1858f998SYi Kong         LDB = *k+1;
400*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX));
401*1858f998SYi Kong         B=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDB*sizeof(CBLAS_TEST_COMPLEX));
402*1858f998SYi Kong         for( i=0; i<*n; i++ )
403*1858f998SYi Kong            for( j=0; j<*k; j++ ) {
404*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
405*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
406*1858f998SYi Kong               B[i*LDB+j].real=b[j*(*ldb)+i].real;
407*1858f998SYi Kong               B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
408*1858f998SYi Kong            }
409*1858f998SYi Kong      }
410*1858f998SYi Kong      else {
411*1858f998SYi Kong         LDA = *n+1;
412*1858f998SYi Kong         LDB = *n+1;
413*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc(LDA*(*k)*sizeof(CBLAS_TEST_COMPLEX));
414*1858f998SYi Kong         B=(CBLAS_TEST_COMPLEX* )malloc(LDB*(*k)*sizeof(CBLAS_TEST_COMPLEX));
415*1858f998SYi Kong         for( i=0; i<*k; i++ )
416*1858f998SYi Kong            for( j=0; j<*n; j++ ){
417*1858f998SYi Kong 	      A[i*LDA+j].real=a[j*(*lda)+i].real;
418*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
419*1858f998SYi Kong               B[i*LDB+j].real=b[j*(*ldb)+i].real;
420*1858f998SYi Kong               B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
421*1858f998SYi Kong            }
422*1858f998SYi Kong      }
423*1858f998SYi Kong      LDC = *n+1;
424*1858f998SYi Kong      C=(CBLAS_TEST_COMPLEX* )malloc( (*n)*LDC*sizeof(CBLAS_TEST_COMPLEX));
425*1858f998SYi Kong      for( i=0; i<*n; i++ )
426*1858f998SYi Kong         for( j=0; j<*n; j++ ) {
427*1858f998SYi Kong            C[i*LDC+j].real=c[j*(*ldc)+i].real;
428*1858f998SYi Kong            C[i*LDC+j].imag=c[j*(*ldc)+i].imag;
429*1858f998SYi Kong         }
430*1858f998SYi Kong      cblas_csyr2k(CblasRowMajor, uplo, trans, *n, *k, alpha, A, LDA,
431*1858f998SYi Kong 		  B, LDB, beta, C, LDC );
432*1858f998SYi Kong      for( j=0; j<*n; j++ )
433*1858f998SYi Kong         for( i=0; i<*n; i++ ) {
434*1858f998SYi Kong            c[j*(*ldc)+i].real=C[i*LDC+j].real;
435*1858f998SYi Kong            c[j*(*ldc)+i].imag=C[i*LDC+j].imag;
436*1858f998SYi Kong         }
437*1858f998SYi Kong      free(A);
438*1858f998SYi Kong      free(B);
439*1858f998SYi Kong      free(C);
440*1858f998SYi Kong   }
441*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
442*1858f998SYi Kong      cblas_csyr2k(CblasColMajor, uplo, trans, *n, *k, alpha, a, *lda,
443*1858f998SYi Kong 		   b, *ldb, beta, c, *ldc );
444*1858f998SYi Kong   else
445*1858f998SYi Kong      cblas_csyr2k(UNDEFINED, uplo, trans, *n, *k, alpha, a, *lda,
446*1858f998SYi Kong 		   b, *ldb, beta, c, *ldc );
447*1858f998SYi Kong }
F77_ctrmm(int * order,char * rtlf,char * uplow,char * transp,char * diagn,int * m,int * n,CBLAS_TEST_COMPLEX * alpha,CBLAS_TEST_COMPLEX * a,int * lda,CBLAS_TEST_COMPLEX * b,int * ldb)448*1858f998SYi Kong void F77_ctrmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
449*1858f998SYi Kong        int *m, int *n, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a,
450*1858f998SYi Kong        int *lda, CBLAS_TEST_COMPLEX *b, int *ldb) {
451*1858f998SYi Kong   int i,j,LDA,LDB;
452*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *B;
453*1858f998SYi Kong   enum CBLAS_SIDE side;
454*1858f998SYi Kong   enum CBLAS_DIAG diag;
455*1858f998SYi Kong   enum CBLAS_UPLO uplo;
456*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
457*1858f998SYi Kong 
458*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
459*1858f998SYi Kong   get_transpose_type(transp,&trans);
460*1858f998SYi Kong   get_diag_type(diagn,&diag);
461*1858f998SYi Kong   get_side_type(rtlf,&side);
462*1858f998SYi Kong 
463*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
464*1858f998SYi Kong      if (side == CblasLeft) {
465*1858f998SYi Kong         LDA = *m+1;
466*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDA*sizeof(CBLAS_TEST_COMPLEX));
467*1858f998SYi Kong         for( i=0; i<*m; i++ )
468*1858f998SYi Kong            for( j=0; j<*m; j++ ) {
469*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
470*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
471*1858f998SYi Kong            }
472*1858f998SYi Kong      }
473*1858f998SYi Kong      else{
474*1858f998SYi Kong         LDA = *n+1;
475*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX));
476*1858f998SYi Kong         for( i=0; i<*n; i++ )
477*1858f998SYi Kong            for( j=0; j<*n; j++ ) {
478*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
479*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
480*1858f998SYi Kong            }
481*1858f998SYi Kong      }
482*1858f998SYi Kong      LDB = *n+1;
483*1858f998SYi Kong      B=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_COMPLEX));
484*1858f998SYi Kong      for( i=0; i<*m; i++ )
485*1858f998SYi Kong         for( j=0; j<*n; j++ ) {
486*1858f998SYi Kong            B[i*LDB+j].real=b[j*(*ldb)+i].real;
487*1858f998SYi Kong            B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
488*1858f998SYi Kong         }
489*1858f998SYi Kong      cblas_ctrmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha,
490*1858f998SYi Kong 		 A, LDA, B, LDB );
491*1858f998SYi Kong      for( j=0; j<*n; j++ )
492*1858f998SYi Kong         for( i=0; i<*m; i++ ) {
493*1858f998SYi Kong            b[j*(*ldb)+i].real=B[i*LDB+j].real;
494*1858f998SYi Kong            b[j*(*ldb)+i].imag=B[i*LDB+j].imag;
495*1858f998SYi Kong         }
496*1858f998SYi Kong      free(A);
497*1858f998SYi Kong      free(B);
498*1858f998SYi Kong   }
499*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
500*1858f998SYi Kong      cblas_ctrmm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha,
501*1858f998SYi Kong 		   a, *lda, b, *ldb);
502*1858f998SYi Kong   else
503*1858f998SYi Kong      cblas_ctrmm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha,
504*1858f998SYi Kong 		   a, *lda, b, *ldb);
505*1858f998SYi Kong }
506*1858f998SYi Kong 
F77_ctrsm(int * order,char * rtlf,char * uplow,char * transp,char * diagn,int * m,int * n,CBLAS_TEST_COMPLEX * alpha,CBLAS_TEST_COMPLEX * a,int * lda,CBLAS_TEST_COMPLEX * b,int * ldb)507*1858f998SYi Kong void F77_ctrsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
508*1858f998SYi Kong          int *m, int *n, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a,
509*1858f998SYi Kong          int *lda, CBLAS_TEST_COMPLEX *b, int *ldb) {
510*1858f998SYi Kong   int i,j,LDA,LDB;
511*1858f998SYi Kong   CBLAS_TEST_COMPLEX *A, *B;
512*1858f998SYi Kong   enum CBLAS_SIDE side;
513*1858f998SYi Kong   enum CBLAS_DIAG diag;
514*1858f998SYi Kong   enum CBLAS_UPLO uplo;
515*1858f998SYi Kong   enum CBLAS_TRANSPOSE trans;
516*1858f998SYi Kong 
517*1858f998SYi Kong   get_uplo_type(uplow,&uplo);
518*1858f998SYi Kong   get_transpose_type(transp,&trans);
519*1858f998SYi Kong   get_diag_type(diagn,&diag);
520*1858f998SYi Kong   get_side_type(rtlf,&side);
521*1858f998SYi Kong 
522*1858f998SYi Kong   if (*order == TEST_ROW_MJR) {
523*1858f998SYi Kong      if (side == CblasLeft) {
524*1858f998SYi Kong         LDA = *m+1;
525*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc( (*m)*LDA*sizeof(CBLAS_TEST_COMPLEX ) );
526*1858f998SYi Kong         for( i=0; i<*m; i++ )
527*1858f998SYi Kong            for( j=0; j<*m; j++ ) {
528*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
529*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
530*1858f998SYi Kong            }
531*1858f998SYi Kong      }
532*1858f998SYi Kong      else{
533*1858f998SYi Kong         LDA = *n+1;
534*1858f998SYi Kong         A=(CBLAS_TEST_COMPLEX* )malloc((*n)*LDA*sizeof(CBLAS_TEST_COMPLEX));
535*1858f998SYi Kong         for( i=0; i<*n; i++ )
536*1858f998SYi Kong            for( j=0; j<*n; j++ ) {
537*1858f998SYi Kong               A[i*LDA+j].real=a[j*(*lda)+i].real;
538*1858f998SYi Kong               A[i*LDA+j].imag=a[j*(*lda)+i].imag;
539*1858f998SYi Kong            }
540*1858f998SYi Kong      }
541*1858f998SYi Kong      LDB = *n+1;
542*1858f998SYi Kong      B=(CBLAS_TEST_COMPLEX* )malloc((*m)*LDB*sizeof(CBLAS_TEST_COMPLEX));
543*1858f998SYi Kong      for( i=0; i<*m; i++ )
544*1858f998SYi Kong         for( j=0; j<*n; j++ ) {
545*1858f998SYi Kong            B[i*LDB+j].real=b[j*(*ldb)+i].real;
546*1858f998SYi Kong            B[i*LDB+j].imag=b[j*(*ldb)+i].imag;
547*1858f998SYi Kong         }
548*1858f998SYi Kong      cblas_ctrsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, alpha,
549*1858f998SYi Kong 		 A, LDA, B, LDB );
550*1858f998SYi Kong      for( j=0; j<*n; j++ )
551*1858f998SYi Kong         for( i=0; i<*m; i++ ) {
552*1858f998SYi Kong            b[j*(*ldb)+i].real=B[i*LDB+j].real;
553*1858f998SYi Kong            b[j*(*ldb)+i].imag=B[i*LDB+j].imag;
554*1858f998SYi Kong         }
555*1858f998SYi Kong      free(A);
556*1858f998SYi Kong      free(B);
557*1858f998SYi Kong   }
558*1858f998SYi Kong   else if (*order == TEST_COL_MJR)
559*1858f998SYi Kong      cblas_ctrsm(CblasColMajor, side, uplo, trans, diag, *m, *n, alpha,
560*1858f998SYi Kong 		   a, *lda, b, *ldb);
561*1858f998SYi Kong   else
562*1858f998SYi Kong      cblas_ctrsm(UNDEFINED, side, uplo, trans, diag, *m, *n, alpha,
563*1858f998SYi Kong 		   a, *lda, b, *ldb);
564*1858f998SYi Kong }
565