You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

cblas_zgerc.c 1.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * cblas_zgerc.c
  3. * The program is a C interface to zgerc.
  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_zgerc(const CBLAS_LAYOUT layout, 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. int n, i, tincy, incy=incY;
  26. double *y=(double *)Y, *yy=(double *)Y, *ty, *st;
  27. extern int CBLAS_CallFromC;
  28. extern int RowMajorStrg;
  29. RowMajorStrg = 0;
  30. CBLAS_CallFromC = 1;
  31. if (layout == CblasColMajor)
  32. {
  33. F77_zgerc( &F77_M, &F77_N, alpha, X, &F77_incX, Y, &F77_incY, A,
  34. &F77_lda);
  35. } else if (layout == CblasRowMajor)
  36. {
  37. RowMajorStrg = 1;
  38. if (N > 0)
  39. {
  40. n = N << 1;
  41. y = malloc(n*sizeof(double));
  42. ty = y;
  43. if( incY > 0 ) {
  44. i = incY << 1;
  45. tincy = 2;
  46. st= y+n;
  47. } else {
  48. i = incY *(-2);
  49. tincy = -2;
  50. st = y-2;
  51. y +=(n-2);
  52. }
  53. do
  54. {
  55. *y = *yy;
  56. y[1] = -yy[1];
  57. y += tincy ;
  58. yy += i;
  59. }
  60. while (y != st);
  61. y = ty;
  62. #ifdef F77_INT
  63. F77_incY = 1;
  64. #else
  65. incy = 1;
  66. #endif
  67. }
  68. else y = (double *) Y;
  69. F77_zgeru( &F77_N, &F77_M, alpha, y, &F77_incY, X, &F77_incX, A,
  70. &F77_lda);
  71. if(Y!=y)
  72. free(y);
  73. } else cblas_xerbla(1, "cblas_zgerc", "Illegal layout setting, %d\n", layout);
  74. CBLAS_CallFromC = 0;
  75. RowMajorStrg = 0;
  76. return;
  77. }