v0.9.0
cblas_cher.c
Go to the documentation of this file.
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 enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
13  const int N, const float alpha, const void *X, const int incX
14  ,void *A, const int 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  int 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 (order == 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 (order == 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 Order setting, %d\n", order);
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 }
#define F77_N
CBLAS_UPLO
Definition: cblas.h:12
void cblas_cher(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const void *X, const int incX, void *A, const int lda)
Definition: cblas_cher.c:12
void F77_cher(FCHAR, FINT, const float *, const void *, FINT, void *, FINT)
int CBLAS_CallFromC
Definition: cblas_globals.c:1
CBLAS_ORDER
Definition: cblas.h:10
void cblas_xerbla(int p, const char *rout, const char *form,...)
Definition: cblas_xerbla.c:8
#define F77_incX
#define F77_lda
const int N
Definition: speed_test.cpp:3
int RowMajorStrg
Definition: cblas_globals.c:2
#define F77_UL