v0.8.23
cblas_cgerc.c
Go to the documentation of this file.
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 enum CBLAS_ORDER order, const int M, const int N,
13  const void *alpha, const void *X, const int incX,
14  const void *Y, const int incY, void *A, const int 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  int 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 (order == CblasColMajor)
35  {
36  F77_cgerc( &F77_M, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, A,
37  &F77_lda);
38  } else if (order == 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 Order setting, %d\n", order);
81  CBLAS_CallFromC = 0;
82  RowMajorStrg = 0;
83  return;
84 }
#define F77_incX
#define F77_N
void F77_cgerc(FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT)
#define F77_incY
int CBLAS_CallFromC
Definition: cblas_globals.c:1
CBLAS_ORDER
Definition: cblas.h:10
#define F77_M
void cblas_xerbla(int p, const char *rout, const char *form,...)
Definition: cblas_xerbla.c:8
#define F77_lda
void F77_cgeru(FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT)
const int N
Definition: speed_test.cpp:3
void cblas_cgerc(const enum CBLAS_ORDER order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda)
Definition: cblas_cgerc.c:12
const int order
approximation order
int RowMajorStrg
Definition: cblas_globals.c:2