"Fossies" - the Fresh Open Source Software Archive

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

    1 /*
    2  * cblas_cher2.c
    3  * The program is a C interface to cher2.
    4  *
    5  * Keita Teranishi  3/23/98
    6  *
    7  */
    8 #include <stdio.h>
    9 #include <stdlib.h>
   10 #include "cblas.h"
   11 #include "cblas_f77.h"
   12 void cblas_cher2(const CBLAS_LAYOUT layout, const CBLAS_UPLO Uplo,
   13                  const CBLAS_INDEX N, 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    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, F77_incY=incY;
   25 #else
   26    #define F77_N N
   27    #define F77_lda lda
   28    #define F77_incX incx
   29    #define F77_incY incy
   30 #endif
   31    CBLAS_INDEX n, i, j, tincx, tincy, incx=incX, incy=incY;
   32    float *x=(float *)X, *xx=(float *)X, *y=(float *)Y,
   33          *yy=(float *)Y, *tx, *ty, *stx, *sty;
   34 
   35    extern int CBLAS_CallFromC;
   36    extern int RowMajorStrg;
   37    RowMajorStrg = 0;
   38 
   39    CBLAS_CallFromC = 1;
   40    if (layout == CblasColMajor)
   41    {
   42       if (Uplo == CblasLower) UL = 'L';
   43       else if (Uplo == CblasUpper) UL = 'U';
   44       else
   45       {
   46          cblas_xerbla(2, "cblas_cher2","Illegal Uplo setting, %d\n",Uplo );
   47          CBLAS_CallFromC = 0;
   48          RowMajorStrg = 0;
   49          return;
   50       }
   51       #ifdef F77_CHAR
   52          F77_UL = C2F_CHAR(&UL);
   53       #endif
   54 
   55       F77_cher2(F77_UL, &F77_N, alpha, X, &F77_incX,
   56                                             Y, &F77_incY, A, &F77_lda);
   57 
   58    }  else if (layout == CblasRowMajor)
   59    {
   60       RowMajorStrg = 1;
   61       if (Uplo == CblasUpper) UL = 'L';
   62       else if (Uplo == CblasLower) UL = 'U';
   63       else
   64       {
   65          cblas_xerbla(2, "cblas_cher2","Illegal Uplo setting, %d\n", Uplo);
   66          CBLAS_CallFromC = 0;
   67          RowMajorStrg = 0;
   68          return;
   69       }
   70       #ifdef F77_CHAR
   71          F77_UL = C2F_CHAR(&UL);
   72       #endif
   73       if (N > 0)
   74       {
   75          n = N << 1;
   76          x = malloc(n*sizeof(float));
   77          y = malloc(n*sizeof(float));
   78          tx = x;
   79          ty = y;
   80          if( incX > 0 ) {
   81             i = incX << 1 ;
   82             tincx = 2;
   83             stx= x+n;
   84          } else {
   85             i = incX *(-2);
   86             tincx = -2;
   87             stx = x-2;
   88             x +=(n-2);
   89          }
   90 
   91          if( incY > 0 ) {
   92             j = incY << 1;
   93             tincy = 2;
   94             sty= y+n;
   95          } else {
   96             j = incY *(-2);
   97             tincy = -2;
   98             sty = y-2;
   99             y +=(n-2);
  100          }
  101 
  102          do
  103          {
  104             *x = *xx;
  105             x[1] = -xx[1];
  106             x += tincx ;
  107             xx += i;
  108          }
  109          while (x != stx);
  110 
  111          do
  112          {
  113             *y = *yy;
  114             y[1] = -yy[1];
  115             y += tincy ;
  116             yy += j;
  117          }
  118          while (y != sty);
  119 
  120          x=tx;
  121          y=ty;
  122 
  123          #ifdef F77_INT
  124             F77_incX = 1;
  125             F77_incY = 1;
  126          #else
  127             incx = 1;
  128             incy = 1;
  129          #endif
  130       }  else
  131       {
  132          x = (float *) X;
  133          y = (float *) Y;
  134       }
  135       F77_cher2(F77_UL, &F77_N, alpha, y, &F77_incY, x,
  136                                       &F77_incX, A, &F77_lda);
  137    } else
  138    {
  139       cblas_xerbla(1, "cblas_cher2","Illegal layout setting, %d\n", layout);
  140       CBLAS_CallFromC = 0;
  141       RowMajorStrg = 0;
  142       return;
  143    }
  144    if(X!=x)
  145       free(x);
  146    if(Y!=y)
  147       free(y);
  148 
  149    CBLAS_CallFromC = 0;
  150    RowMajorStrg = 0;
  151    return;
  152 }