"Fossies" - the Fresh Open Source Software Archive

Member "lapack-3.9.1/CBLAS/src/cblas_cher.c" (25 Mar 2021, 2592 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_cher.c": 3.9.0_vs_3.9.1.

    1 /*
    2  * cblas_cher.c
    3  * The program is a C interface to cher.
    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_cher(const CBLAS_LAYOUT layout, const CBLAS_UPLO Uplo,
   13                 const CBLAS_INDEX N, const float alpha, const void *X, const CBLAS_INDEX incX
   14                 ,void *A, const CBLAS_INDEX lda)
   15 {
   16    char UL;
   17 #ifdef F77_CHAR
   18    F77_CHAR F77_UL;
   19 #else
   20    #define F77_UL &UL
   21 #endif
   22 
   23 #ifdef F77_INT
   24    F77_INT F77_N=N, F77_lda=lda, F77_incX=incX;
   25 #else
   26    #define F77_N N
   27    #define F77_lda lda
   28    #define F77_incX incx
   29 #endif
   30    CBLAS_INDEX n, i, tincx, incx=incX;
   31    float *x=(float *)X, *xx=(float *)X, *tx, *st;
   32 
   33    extern int CBLAS_CallFromC;
   34    extern int RowMajorStrg;
   35    RowMajorStrg = 0;
   36 
   37    CBLAS_CallFromC = 1;
   38    if (layout == CblasColMajor)
   39    {
   40       if (Uplo == CblasLower) UL = 'L';
   41       else if (Uplo == CblasUpper) UL = 'U';
   42       else
   43       {
   44          cblas_xerbla(2, "cblas_cher","Illegal Uplo setting, %d\n",Uplo );
   45          CBLAS_CallFromC = 0;
   46          RowMajorStrg = 0;
   47          return;
   48       }
   49       #ifdef F77_CHAR
   50          F77_UL = C2F_CHAR(&UL);
   51       #endif
   52 
   53       F77_cher(F77_UL, &F77_N, &alpha, X, &F77_incX, A, &F77_lda);
   54 
   55    }  else if (layout == CblasRowMajor)
   56    {
   57       RowMajorStrg = 1;
   58       if (Uplo == CblasUpper) UL = 'L';
   59       else if (Uplo == CblasLower) UL = 'U';
   60       else
   61       {
   62          cblas_xerbla(2, "cblas_cher","Illegal Uplo setting, %d\n", Uplo);
   63          CBLAS_CallFromC = 0;
   64          RowMajorStrg = 0;
   65          return;
   66       }
   67       #ifdef F77_CHAR
   68          F77_UL = C2F_CHAR(&UL);
   69       #endif
   70       if (N > 0)
   71       {
   72          n = N << 1;
   73          x = malloc(n*sizeof(float));
   74          tx = x;
   75          if( incX > 0 ) {
   76             i = incX << 1 ;
   77             tincx = 2;
   78             st= x+n;
   79          } else {
   80             i = incX *(-2);
   81             tincx = -2;
   82             st = x-2;
   83             x +=(n-2);
   84          }
   85          do
   86          {
   87             *x = *xx;
   88             x[1] = -xx[1];
   89             x += tincx ;
   90             xx += i;
   91          }
   92          while (x != st);
   93          x=tx;
   94 
   95          #ifdef F77_INT
   96            F77_incX = 1;
   97          #else
   98            incx = 1;
   99          #endif
  100       }
  101       else x = (float *) X;
  102       F77_cher(F77_UL, &F77_N, &alpha, x, &F77_incX, A, &F77_lda);
  103    } else
  104    {
  105       cblas_xerbla(1, "cblas_cher","Illegal layout setting, %d\n", layout);
  106       CBLAS_CallFromC = 0;
  107       RowMajorStrg = 0;
  108       return;
  109    }
  110    if(X!=x)
  111       free(x);
  112 
  113    CBLAS_CallFromC = 0;
  114    RowMajorStrg = 0;
  115    return;
  116 }