"Fossies" - the Fresh Open Source Software Archive

Member "lapack-3.9.1/CBLAS/src/cblas_cgerc.c" (25 Mar 2021, 1965 Bytes) of package /linux/misc/lapack-3.9.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "cblas_cgerc.c": 3.9.0_vs_3.9.1.

    1 /*
    2  * cblas_cgerc.c
    3  * The program is a C interface to cgerc.
    4  *
    5  * Keita Teranishi  5/20/98
    6  *
    7  */
    8 #include <stdio.h>
    9 #include <stdlib.h>
   10 #include "cblas.h"
   11 #include "cblas_f77.h"
   12 void cblas_cgerc(const CBLAS_LAYOUT layout, const CBLAS_INDEX M, const CBLAS_INDEX N,
   13                  const void *alpha, const void *X, const CBLAS_INDEX incX,
   14                  const void *Y, const CBLAS_INDEX incY, void *A, const CBLAS_INDEX lda)
   15 {
   16 #ifdef F77_INT
   17    F77_INT F77_M=M, F77_N=N, F77_lda=lda, F77_incX=incX, F77_incY=incY;
   18 #else
   19    #define F77_M M
   20    #define F77_N N
   21    #define F77_incX incX
   22    #define F77_incY incy
   23    #define F77_lda lda
   24 #endif
   25 
   26    CBLAS_INDEX n, i, tincy, incy=incY;
   27    float *y=(float *)Y, *yy=(float *)Y, *ty, *st;
   28 
   29    extern int CBLAS_CallFromC;
   30    extern int RowMajorStrg;
   31    RowMajorStrg = 0;
   32 
   33    CBLAS_CallFromC = 1;
   34    if (layout == CblasColMajor)
   35    {
   36       F77_cgerc( &F77_M, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, A,
   37                       &F77_lda);
   38    }  else if (layout == CblasRowMajor)
   39    {
   40       RowMajorStrg = 1;
   41       if (N > 0)
   42       {
   43          n = N << 1;
   44          y = malloc(n*sizeof(float));
   45 
   46          ty = y;
   47          if( incY > 0 ) {
   48             i = incY << 1;
   49             tincy = 2;
   50             st= y+n;
   51          } else {
   52             i = incY *(-2);
   53             tincy = -2;
   54             st = y-2;
   55             y +=(n-2);
   56          }
   57          do
   58          {
   59             *y = *yy;
   60             y[1] = -yy[1];
   61             y += tincy ;
   62             yy += i;
   63          }
   64          while (y != st);
   65          y = ty;
   66 
   67          #ifdef F77_INT
   68             F77_incY = 1;
   69          #else
   70             incy = 1;
   71          #endif
   72       }
   73       else y = (float *) Y;
   74 
   75       F77_cgeru( &F77_N, &F77_M, alpha, y, &F77_incY, X, &F77_incX, A,
   76                       &F77_lda);
   77       if(Y!=y)
   78          free(y);
   79 
   80    } else cblas_xerbla(1, "cblas_cgerc", "Illegal layout setting, %d\n", layout);
   81    CBLAS_CallFromC = 0;
   82    RowMajorStrg = 0;
   83    return;
   84 }