void F77_cgbmv(int *order, char *transp, int *m, int *n, int *kl, int *ku, CBLAS_TEST_COMPLEX *alpha, CBLAS_TEST_COMPLEX *a, int *lda, CBLAS_TEST_COMPLEX *x, int *incx, CBLAS_TEST_COMPLEX *beta, CBLAS_TEST_COMPLEX *y, int *incy) { CBLAS_TEST_COMPLEX *A; int i,j,irow,jcol,LDA; enum CBLAS_TRANSPOSE trans; get_transpose_type(transp, &trans); if (*order == TEST_ROW_MJR) { LDA = *ku+*kl+2; A=( CBLAS_TEST_COMPLEX* )malloc((*n+*kl)*LDA*sizeof(CBLAS_TEST_COMPLEX)); for( i=0; i<*ku; i++ ){ irow=*ku+*kl-i; jcol=(*ku)-i; for( j=jcol; j<*n; j++ ){ A[ LDA*(j-jcol)+irow ].real=a[ (*lda)*j+i ].real; A[ LDA*(j-jcol)+irow ].imag=a[ (*lda)*j+i ].imag; } } i=*ku; irow=*ku+*kl-i; for( j=0; j<*n; j++ ){ A[ LDA*j+irow ].real=a[ (*lda)*j+i ].real; A[ LDA*j+irow ].imag=a[ (*lda)*j+i ].imag; } for( i=*ku+1; i<*ku+*kl+1; i++ ){ irow=*ku+*kl-i; jcol=i-(*ku); for( j=jcol; j<(*n+*kl); j++ ){ A[ LDA*j+irow ].real=a[ (*lda)*(j-jcol)+i ].real; A[ LDA*j+irow ].imag=a[ (*lda)*(j-jcol)+i ].imag; } } cblas_cgbmv( CblasRowMajor, trans, *m, *n, *kl, *ku, alpha, A, LDA, x, *incx, beta, y, *incy ); free(A); } else if (*order == TEST_COL_MJR) cblas_cgbmv( CblasColMajor, trans, *m, *n, *kl, *ku, alpha, a, *lda, x, *incx, beta, y, *incy ); else cblas_cgbmv( UNDEFINED, trans, *m, *n, *kl, *ku, alpha, a, *lda, x, *incx, beta, y, *incy ); }
inline void gbmv( const Order, const Trans, const int m, const int n, const int kl, const int ku, const std::complex<float> alpha, const std::complex<float>* a, const int lda, const std::complex<float>* x, const int incx, const std::complex<float> beta, std::complex<float>* y, const int incy ) { cblas_cgbmv( cblas_option< Order >::value, cblas_option< Trans >::value, m, n, kl, ku, &alpha, a, lda, x, incx, &beta, y, incy ); }
/* f77 interface */ void cgbmv_(char *transa,int *m, int *n, int *kl, int *ku, float *alpha, float *A, int *lda, float *X, int *incx, float *beta, float *Y, int *incy) { Blasx_Debug_Output("Calling cgbmv interface\n"); enum CBLAS_TRANSPOSE TransA; int info = -1; if(F77TransToCBLASTrans(transa,&TransA) < 0) info = 2; if (info >= 0) { xerbla_(ERROR_NAME, &info); return; } cblas_cgbmv(CblasColMajor, TransA, *m, *n, *kl, *ku, alpha, A, *lda, X, *incx, beta, Y, *incy); }