Home | History | Annotate | Download | only in src
      1 /*
      2  *
      3  * cblas_sgemv.c
      4  * This program is a C interface to sgemv.
      5  * Written by Keita Teranishi
      6  * 4/6/1998
      7  *
      8  */
      9 #include "cblas.h"
     10 #include "cblas_f77.h"
     11 void cblas_sgemv(const enum CBLAS_ORDER order,
     12                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
     13                  const float alpha, const float  *A, const int lda,
     14                  const float  *X, const int incX, const float beta,
     15                  float  *Y, const int incY)
     16 {
     17    char TA;
     18 #ifdef F77_CHAR
     19    F77_CHAR F77_TA;
     20 #else
     21    #define F77_TA &TA
     22 #endif
     23 #ifdef F77_INT
     24    F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY;
     25 #else
     26    #define F77_M M
     27    #define F77_N N
     28    #define F77_lda lda
     29    #define F77_incX incX
     30    #define F77_incY incY
     31 #endif
     32 
     33    extern int CBLAS_CallFromC;
     34    extern int RowMajorStrg;
     35    RowMajorStrg = 0;
     36 
     37    CBLAS_CallFromC = 1;
     38    if (order == CblasColMajor)
     39    {
     40       if (TransA == CblasNoTrans) TA = 'N';
     41       else if (TransA == CblasTrans) TA = 'T';
     42       else if (TransA == CblasConjTrans) TA = 'C';
     43       else
     44       {
     45          cblas_xerbla(2, "cblas_sgemv","Illegal TransA setting, %d\n", TransA);
     46          CBLAS_CallFromC = 0;
     47          RowMajorStrg = 0;
     48       }
     49       #ifdef F77_CHAR
     50          F77_TA = C2F_CHAR(&TA);
     51       #endif
     52       F77_sgemv(F77_TA, &F77_M, &F77_N, &alpha, A, &F77_lda, X, &F77_incX,
     53                 &beta, Y, &F77_incY);
     54    }
     55    else if (order == CblasRowMajor)
     56    {
     57       RowMajorStrg = 1;
     58       if (TransA == CblasNoTrans) TA = 'T';
     59       else if (TransA == CblasTrans) TA = 'N';
     60       else if (TransA == CblasConjTrans) TA = 'N';
     61       else
     62       {
     63          cblas_xerbla(2, "cblas_sgemv", "Illegal TransA setting, %d\n", TransA);
     64          CBLAS_CallFromC = 0;
     65          RowMajorStrg = 0;
     66          return;
     67       }
     68       #ifdef F77_CHAR
     69          F77_TA = C2F_CHAR(&TA);
     70       #endif
     71       F77_sgemv(F77_TA, &F77_N, &F77_M, &alpha, A, &F77_lda, X,
     72                 &F77_incX, &beta, Y, &F77_incY);
     73    }
     74    else cblas_xerbla(1, "cblas_sgemv", "Illegal Order setting, %d\n", order);
     75    CBLAS_CallFromC = 0;
     76    RowMajorStrg = 0;
     77    return;
     78 }
     79