annotate ext/cblas/src/cblas_dgemm.c @ 515:08bcc06c38ec tip master

Remove fast-math
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 28 Jan 2020 15:27:37 +0000
parents 905e45637745
children
rev   line source
c@427 1 /*
c@427 2 *
c@427 3 * cblas_dgemm.c
c@427 4 * This program is a C interface to dgemm.
c@427 5 * Written by Keita Teranishi
c@427 6 * 4/8/1998
c@427 7 *
c@427 8 */
c@427 9
c@427 10 #include "cblas.h"
c@427 11 #include "cblas_f77.h"
c@427 12 void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
c@427 13 const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
c@427 14 const int K, const double alpha, const double *A,
c@427 15 const int lda, const double *B, const int ldb,
c@427 16 const double beta, double *C, const int ldc)
c@427 17 {
c@427 18 char TA, TB;
c@427 19 #ifdef F77_CHAR
c@427 20 F77_CHAR F77_TA, F77_TB;
c@427 21 #else
c@427 22 #define F77_TA &TA
c@427 23 #define F77_TB &TB
c@427 24 #endif
c@427 25
c@427 26 #ifdef F77_INT
c@427 27 F77_INT F77_M=M, F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb;
c@427 28 F77_INT F77_ldc=ldc;
c@427 29 #else
c@427 30 #define F77_M M
c@427 31 #define F77_N N
c@427 32 #define F77_K K
c@427 33 #define F77_lda lda
c@427 34 #define F77_ldb ldb
c@427 35 #define F77_ldc ldc
c@427 36 #endif
c@427 37
c@427 38 extern int CBLAS_CallFromC;
c@427 39 extern int RowMajorStrg;
c@427 40 RowMajorStrg = 0;
c@427 41 CBLAS_CallFromC = 1;
c@427 42
c@427 43 if( Order == CblasColMajor )
c@427 44 {
c@427 45 if(TransA == CblasTrans) TA='T';
c@427 46 else if ( TransA == CblasConjTrans ) TA='C';
c@427 47 else if ( TransA == CblasNoTrans ) TA='N';
c@427 48 else
c@427 49 {
c@427 50 cblas_xerbla(2, "cblas_dgemm","Illegal TransA setting, %d\n", TransA);
c@427 51 CBLAS_CallFromC = 0;
c@427 52 RowMajorStrg = 0;
c@427 53 return;
c@427 54 }
c@427 55
c@427 56 if(TransB == CblasTrans) TB='T';
c@427 57 else if ( TransB == CblasConjTrans ) TB='C';
c@427 58 else if ( TransB == CblasNoTrans ) TB='N';
c@427 59 else
c@427 60 {
c@427 61 cblas_xerbla(3, "cblas_dgemm","Illegal TransB setting, %d\n", TransB);
c@427 62 CBLAS_CallFromC = 0;
c@427 63 RowMajorStrg = 0;
c@427 64 return;
c@427 65 }
c@427 66
c@427 67 #ifdef F77_CHAR
c@427 68 F77_TA = C2F_CHAR(&TA);
c@427 69 F77_TB = C2F_CHAR(&TB);
c@427 70 #endif
c@427 71
c@427 72 F77_dgemm(F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, &alpha, A,
c@427 73 &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc);
c@427 74 } else if (Order == CblasRowMajor)
c@427 75 {
c@427 76 RowMajorStrg = 1;
c@427 77 if(TransA == CblasTrans) TB='T';
c@427 78 else if ( TransA == CblasConjTrans ) TB='C';
c@427 79 else if ( TransA == CblasNoTrans ) TB='N';
c@427 80 else
c@427 81 {
c@427 82 cblas_xerbla(2, "cblas_dgemm","Illegal TransA setting, %d\n", TransA);
c@427 83 CBLAS_CallFromC = 0;
c@427 84 RowMajorStrg = 0;
c@427 85 return;
c@427 86 }
c@427 87 if(TransB == CblasTrans) TA='T';
c@427 88 else if ( TransB == CblasConjTrans ) TA='C';
c@427 89 else if ( TransB == CblasNoTrans ) TA='N';
c@427 90 else
c@427 91 {
c@427 92 cblas_xerbla(2, "cblas_dgemm","Illegal TransB setting, %d\n", TransB);
c@427 93 CBLAS_CallFromC = 0;
c@427 94 RowMajorStrg = 0;
c@427 95 return;
c@427 96 }
c@427 97 #ifdef F77_CHAR
c@427 98 F77_TA = C2F_CHAR(&TA);
c@427 99 F77_TB = C2F_CHAR(&TB);
c@427 100 #endif
c@427 101
c@427 102 F77_dgemm(F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, &alpha, B,
c@427 103 &F77_ldb, A, &F77_lda, &beta, C, &F77_ldc);
c@427 104 }
c@427 105 else cblas_xerbla(1, "cblas_dgemm", "Illegal Order setting, %d\n", Order);
c@427 106 CBLAS_CallFromC = 0;
c@427 107 RowMajorStrg = 0;
c@427 108 return;
c@427 109 }