181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray/*
281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray *     Written by D.P. Manley, Digital Equipment Corporation.
381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray *     Prefixed "C_" to BLAS routines and their declarations.
481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray *
581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray *     Modified by T. H. Do, 2/19/98, SGI/CRAY Research.
681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray */
781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include <stdio.h>
881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include <stdlib.h>
981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include "cblas.h"
1081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray#include "cblas_test.h"
1181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
1281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murrayvoid F77_sgemm(int *order, char *transpa, char *transpb, int *m, int *n,
1381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              int *k, float *alpha, float *a, int *lda, float *b, int *ldb,
1481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              float *beta, float *c, int *ldc ) {
1581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
1681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  float *A, *B, *C;
1781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  int i,j,LDA, LDB, LDC;
1881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_TRANSPOSE transa, transb;
1981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
2081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_transpose_type(transpa, &transa);
2181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_transpose_type(transpb, &transb);
2281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
2381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  if (*order == TEST_ROW_MJR) {
2481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     if (transa == CblasNoTrans) {
2581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *k+1;
2681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A = (float *)malloc( (*m)*LDA*sizeof( float ) );
2781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
2881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*k; j++ )
2981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
3081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
3181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     else {
3281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *m+1;
3381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( LDA*(*k)*sizeof( float ) );
3481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*k; i++ )
3581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*m; j++ )
3681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
3781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
3881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     if (transb == CblasNoTrans) {
3981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDB = *n+1;
4081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        B   = ( float* )malloc( (*k)*LDB*sizeof( float ) );
4181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*k; i++ )
4281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*n; j++ )
4381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              B[i*LDB+j]=b[j*(*ldb)+i];
4481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
4581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     else {
4681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDB = *k+1;
4781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        B   = ( float* )malloc( LDB*(*n)*sizeof( float ) );
4881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*n; i++ )
4981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*k; j++ )
5081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              B[i*LDB+j]=b[j*(*ldb)+i];
5181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
5281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     LDC = *n+1;
5381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     C   = ( float* )malloc( (*m)*LDC*sizeof( float ) );
5481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( j=0; j<*n; j++ )
5581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
5681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           C[i*LDC+j]=c[j*(*ldc)+i];
5781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_sgemm( CblasRowMajor, transa, transb, *m, *n, *k, *alpha, A, LDA,
5881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray                  B, LDB, *beta, C, LDC );
5981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( j=0; j<*n; j++ )
6081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
6181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           c[j*(*ldc)+i]=C[i*LDC+j];
6281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(A);
6381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(B);
6481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(C);
6581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  }
6681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else if (*order == TEST_COL_MJR)
6781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_sgemm( CblasColMajor, transa, transb, *m, *n, *k, *alpha, a, *lda,
6881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray                  b, *ldb, *beta, c, *ldc );
6981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else
7081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_sgemm( UNDEFINED, transa, transb, *m, *n, *k, *alpha, a, *lda,
7181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray                  b, *ldb, *beta, c, *ldc );
7281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray}
7381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murrayvoid F77_ssymm(int *order, char *rtlf, char *uplow, int *m, int *n,
7481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              float *alpha, float *a, int *lda, float *b, int *ldb,
7581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              float *beta, float *c, int *ldc ) {
7681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
7781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  float *A, *B, *C;
7881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  int i,j,LDA, LDB, LDC;
7981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_UPLO uplo;
8081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_SIDE side;
8181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
8281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_uplo_type(uplow,&uplo);
8381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_side_type(rtlf,&side);
8481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
8581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  if (*order == TEST_ROW_MJR) {
8681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     if (side == CblasLeft) {
8781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *m+1;
8881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*m)*LDA*sizeof( float ) );
8981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
9081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*m; j++ )
9181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
9281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
9381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     else{
9481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *n+1;
9581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
9681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*n; i++ )
9781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*n; j++ )
9881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
9981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
10081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     LDB = *n+1;
10181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     B   = ( float* )malloc( (*m)*LDB*sizeof( float ) );
10281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( i=0; i<*m; i++ )
10381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( j=0; j<*n; j++ )
10481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           B[i*LDB+j]=b[j*(*ldb)+i];
10581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     LDC = *n+1;
10681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     C   = ( float* )malloc( (*m)*LDC*sizeof( float ) );
10781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( j=0; j<*n; j++ )
10881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
10981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           C[i*LDC+j]=c[j*(*ldc)+i];
11081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssymm( CblasRowMajor, side, uplo, *m, *n, *alpha, A, LDA, B, LDB,
11181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray                  *beta, C, LDC );
11281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( j=0; j<*n; j++ )
11381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
11481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           c[j*(*ldc)+i]=C[i*LDC+j];
11581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(A);
11681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(B);
11781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(C);
11881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  }
11981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else if (*order == TEST_COL_MJR)
12081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssymm( CblasColMajor, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
12181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray                  *beta, c, *ldc );
12281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else
12381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssymm( UNDEFINED, side, uplo, *m, *n, *alpha, a, *lda, b, *ldb,
12481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray                  *beta, c, *ldc );
12581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray}
12681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
12781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murrayvoid F77_ssyrk(int *order, char *uplow, char *transp, int *n, int *k,
12881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              float *alpha, float *a, int *lda,
12981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              float *beta, float *c, int *ldc ) {
13081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
13181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  int i,j,LDA,LDC;
13281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  float *A, *C;
13381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_UPLO uplo;
13481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_TRANSPOSE trans;
13581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
13681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_uplo_type(uplow,&uplo);
13781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_transpose_type(transp,&trans);
13881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
13981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  if (*order == TEST_ROW_MJR) {
14081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     if (trans == CblasNoTrans) {
14181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *k+1;
14281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
14381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*n; i++ )
14481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*k; j++ )
14581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
14681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
14781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     else{
14881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *n+1;
14981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*k)*LDA*sizeof( float ) );
15081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*k; i++ )
15181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*n; j++ )
15281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
15381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
15481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     LDC = *n+1;
15581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     C   = ( float* )malloc( (*n)*LDC*sizeof( float ) );
15681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( i=0; i<*n; i++ )
15781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( j=0; j<*n; j++ )
15881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           C[i*LDC+j]=c[j*(*ldc)+i];
15981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssyrk(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA, *beta,
16081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray	         C, LDC );
16181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( j=0; j<*n; j++ )
16281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*n; i++ )
16381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           c[j*(*ldc)+i]=C[i*LDC+j];
16481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(A);
16581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(C);
16681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  }
16781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else if (*order == TEST_COL_MJR)
16881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssyrk(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
16981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray	         c, *ldc );
17081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else
17181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssyrk(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda, *beta,
17281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray	         c, *ldc );
17381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray}
17481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
17581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murrayvoid F77_ssyr2k(int *order, char *uplow, char *transp, int *n, int *k,
17681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray               float *alpha, float *a, int *lda, float *b, int *ldb,
17781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray               float *beta, float *c, int *ldc ) {
17881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  int i,j,LDA,LDB,LDC;
17981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  float *A, *B, *C;
18081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_UPLO uplo;
18181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_TRANSPOSE trans;
18281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
18381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_uplo_type(uplow,&uplo);
18481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_transpose_type(transp,&trans);
18581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
18681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  if (*order == TEST_ROW_MJR) {
18781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     if (trans == CblasNoTrans) {
18881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *k+1;
18981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDB = *k+1;
19081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
19181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        B   = ( float* )malloc( (*n)*LDB*sizeof( float ) );
19281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*n; i++ )
19381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*k; j++ ) {
19481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
19581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              B[i*LDB+j]=b[j*(*ldb)+i];
19681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           }
19781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
19881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     else {
19981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *n+1;
20081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDB = *n+1;
20181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( LDA*(*k)*sizeof( float ) );
20281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        B   = ( float* )malloc( LDB*(*k)*sizeof( float ) );
20381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*k; i++ )
20481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*n; j++ ){
20581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
20681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              B[i*LDB+j]=b[j*(*ldb)+i];
20781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           }
20881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
20981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     LDC = *n+1;
21081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     C   = ( float* )malloc( (*n)*LDC*sizeof( float ) );
21181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( i=0; i<*n; i++ )
21281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( j=0; j<*n; j++ )
21381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           C[i*LDC+j]=c[j*(*ldc)+i];
21481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssyr2k(CblasRowMajor, uplo, trans, *n, *k, *alpha, A, LDA,
21581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		  B, LDB, *beta, C, LDC );
21681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( j=0; j<*n; j++ )
21781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*n; i++ )
21881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           c[j*(*ldc)+i]=C[i*LDC+j];
21981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(A);
22081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(B);
22181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(C);
22281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  }
22381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else if (*order == TEST_COL_MJR)
22481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssyr2k(CblasColMajor, uplo, trans, *n, *k, *alpha, a, *lda,
22581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		   b, *ldb, *beta, c, *ldc );
22681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else
22781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_ssyr2k(UNDEFINED, uplo, trans, *n, *k, *alpha, a, *lda,
22881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		   b, *ldb, *beta, c, *ldc );
22981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray}
23081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murrayvoid F77_strmm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
23181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              int *m, int *n, float *alpha, float *a, int *lda, float *b,
23281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              int *ldb) {
23381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  int i,j,LDA,LDB;
23481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  float *A, *B;
23581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_SIDE side;
23681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_DIAG diag;
23781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_UPLO uplo;
23881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_TRANSPOSE trans;
23981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
24081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_uplo_type(uplow,&uplo);
24181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_transpose_type(transp,&trans);
24281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_diag_type(diagn,&diag);
24381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_side_type(rtlf,&side);
24481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
24581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  if (*order == TEST_ROW_MJR) {
24681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     if (side == CblasLeft) {
24781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *m+1;
24881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*m)*LDA*sizeof( float ) );
24981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
25081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*m; j++ )
25181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
25281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
25381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     else{
25481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *n+1;
25581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
25681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*n; i++ )
25781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*n; j++ )
25881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
25981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
26081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     LDB = *n+1;
26181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     B   = ( float* )malloc( (*m)*LDB*sizeof( float ) );
26281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( i=0; i<*m; i++ )
26381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( j=0; j<*n; j++ )
26481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           B[i*LDB+j]=b[j*(*ldb)+i];
26581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_strmm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
26681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		 A, LDA, B, LDB );
26781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( j=0; j<*n; j++ )
26881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
26981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           b[j*(*ldb)+i]=B[i*LDB+j];
27081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(A);
27181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(B);
27281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  }
27381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else if (*order == TEST_COL_MJR)
27481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_strmm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
27581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		   a, *lda, b, *ldb);
27681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else
27781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_strmm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,
27881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		   a, *lda, b, *ldb);
27981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray}
28081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
28181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murrayvoid F77_strsm(int *order, char *rtlf, char *uplow, char *transp, char *diagn,
28281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              int *m, int *n, float *alpha, float *a, int *lda, float *b,
28381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              int *ldb) {
28481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  int i,j,LDA,LDB;
28581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  float *A, *B;
28681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_SIDE side;
28781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_DIAG diag;
28881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_UPLO uplo;
28981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  enum CBLAS_TRANSPOSE trans;
29081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
29181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_uplo_type(uplow,&uplo);
29281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_transpose_type(transp,&trans);
29381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_diag_type(diagn,&diag);
29481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  get_side_type(rtlf,&side);
29581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray
29681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  if (*order == TEST_ROW_MJR) {
29781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     if (side == CblasLeft) {
29881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *m+1;
29981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*m)*LDA*sizeof( float ) );
30081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
30181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*m; j++ )
30281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
30381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
30481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     else{
30581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        LDA = *n+1;
30681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        A   = ( float* )malloc( (*n)*LDA*sizeof( float ) );
30781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*n; i++ )
30881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           for( j=0; j<*n; j++ )
30981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray              A[i*LDA+j]=a[j*(*lda)+i];
31081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     }
31181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     LDB = *n+1;
31281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     B   = ( float* )malloc( (*m)*LDB*sizeof( float ) );
31381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( i=0; i<*m; i++ )
31481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( j=0; j<*n; j++ )
31581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           B[i*LDB+j]=b[j*(*ldb)+i];
31681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_strsm(CblasRowMajor, side, uplo, trans, diag, *m, *n, *alpha,
31781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		 A, LDA, B, LDB );
31881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     for( j=0; j<*n; j++ )
31981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray        for( i=0; i<*m; i++ )
32081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray           b[j*(*ldb)+i]=B[i*LDB+j];
32181253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(A);
32281253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     free(B);
32381253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  }
32481253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else if (*order == TEST_COL_MJR)
32581253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_strsm(CblasColMajor, side, uplo, trans, diag, *m, *n, *alpha,
32681253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		   a, *lda, b, *ldb);
32781253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray  else
32881253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray     cblas_strsm(UNDEFINED, side, uplo, trans, diag, *m, *n, *alpha,
32981253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray		   a, *lda, b, *ldb);
33081253e9afbc34b99e9adc22ddf33a1bfac56c697Tim Murray}
331