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