11 #include "cblas_f77.h" 12 void cblas_cgemv(
const CBLAS_LAYOUT layout,
13 const CBLAS_TRANSPOSE TransA,
const CBLAS_INT M,
const CBLAS_INT N,
14 const void *alpha,
const void *A,
const CBLAS_INT lda,
15 const void *X,
const CBLAS_INT incX,
const void *beta,
16 void *Y,
const CBLAS_INT incY)
25 F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY;
34 CBLAS_INT n=0, i=0, incx=incX;
35 const float *xx= (
const float *)X;
36 float ALPHA[2],BETA[2];
37 CBLAS_INT tincY, tincx;
38 float *x=(
float *)X, *y=(
float *)Y, *st=0, *tx=0;
40 extern int CBLAS_CallFromC;
41 extern int RowMajorStrg;
46 if (layout == CblasColMajor)
48 if (TransA == CblasNoTrans) TA =
'N';
49 else if (TransA == CblasTrans) TA =
'T';
50 else if (TransA == CblasConjTrans) TA =
'C';
53 cblas_xerbla(2,
"cblas_cgemv",
"Illegal TransA setting, %d\n", TransA);
59 F77_TA = C2F_CHAR(&TA);
61 F77_cgemv(F77_TA, &F77_M, &F77_N, alpha, A, &F77_lda, X, &F77_incX,
64 else if (layout == CblasRowMajor)
68 if (TransA == CblasNoTrans) TA =
'T';
69 else if (TransA == CblasTrans) TA =
'N';
70 else if (TransA == CblasConjTrans)
72 ALPHA[0]= *( (
const float *) alpha );
73 ALPHA[1]= -( *( (
const float *) alpha+1) );
74 BETA[0]= *( (
const float *) beta );
75 BETA[1]= -( *( (
const float *) beta+1 ) );
80 x = malloc(n*
sizeof(
float));
125 else stx = (
const float *)X;
129 cblas_xerbla(2,
"cblas_cgemv",
"Illegal TransA setting, %d\n", TransA);
135 F77_TA = C2F_CHAR(&TA);
137 if (TransA == CblasConjTrans)
138 F77_cgemv(F77_TA, &F77_N, &F77_M, ALPHA, A, &F77_lda, stx,
139 &F77_incX, BETA, Y, &F77_incY);
141 F77_cgemv(F77_TA, &F77_N, &F77_M, alpha, A, &F77_lda, x,
142 &F77_incX, beta, Y, &F77_incY);
144 if (TransA == CblasConjTrans)
146 if (x != (
const float *)X) free(x);
158 else cblas_xerbla(1,
"cblas_cgemv",
"Illegal layout setting, %d\n", layout);