16d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#ifndef RS_COMPATIBILITY_LIB 26d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#include "cblas.h" 36d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#else 46d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#include <dlfcn.h> 56d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang/* 66d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * The following enum and function pointers are based on cblas.h 76d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * =========================================================================== 86d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * Prototypes for level 2 BLAS 96d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * =========================================================================== 106d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang */ 116d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 126d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang/* 136d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * Routines with standard 4 prefixes (S, D, C, Z) 146d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang */ 156d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangenum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102}; 166d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangenum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113}; 176d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangenum CBLAS_UPLO {CblasUpper=121, CblasLower=122}; 186d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangenum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132}; 196d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangenum CBLAS_SIDE {CblasLeft=141, CblasRight=142}; 206d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 216d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_sgemv)(const enum CBLAS_ORDER order, 226d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const int M, const int N, 236d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float alpha, const float *A, const int lda, 246d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float *X, const int incX, const float beta, 256d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang float *Y, const int incY); 266d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_sgbmv)(const enum CBLAS_ORDER order, 276d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const int M, const int N, 286d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int KL, const int KU, const float alpha, 296d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float *A, const int lda, const float *X, 306d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, const float beta, float *Y, const int incY); 316d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_strmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 326d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 336d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float *A, const int lda, 346d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang float *X, const int incX); 356d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_stbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 366d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 376d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const float *A, const int lda, 386d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang float *X, const int incX); 396d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_stpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 406d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 416d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float *Ap, float *X, const int incX); 426d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_strsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 436d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 446d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float *A, const int lda, float *X, 456d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX); 466d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_stbsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 476d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 486d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const float *A, const int lda, 496d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang float *X, const int incX); 506d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_stpsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 516d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 526d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float *Ap, float *X, const int incX); 536d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 546d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dgemv)(const enum CBLAS_ORDER order, 556d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const int M, const int N, 566d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double alpha, const double *A, const int lda, 576d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double *X, const int incX, const double beta, 586d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang double *Y, const int incY); 596d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dgbmv)(const enum CBLAS_ORDER order, 606d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const int M, const int N, 616d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int KL, const int KU, const double alpha, 626d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double *A, const int lda, const double *X, 636d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, const double beta, double *Y, const int incY); 646d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dtrmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 656d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 666d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double *A, const int lda, 676d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang double *X, const int incX); 686d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dtbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 696d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 706d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const double *A, const int lda, 716d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang double *X, const int incX); 726d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dtpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 736d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 746d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double *Ap, double *X, const int incX); 756d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dtrsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 766d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 776d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double *A, const int lda, double *X, 786d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX); 796d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dtbsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 806d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 816d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const double *A, const int lda, 826d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang double *X, const int incX); 836d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dtpsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 846d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 856d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double *Ap, double *X, const int incX); 866d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 876d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cgemv)(const enum CBLAS_ORDER order, 886d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const int M, const int N, 896d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 906d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *X, const int incX, const void *beta, 916d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *Y, const int incY); 926d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cgbmv)(const enum CBLAS_ORDER order, 936d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const int M, const int N, 946d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int KL, const int KU, const void *alpha, 956d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *A, const int lda, const void *X, 966d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, const void *beta, void *Y, const int incY); 976d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ctrmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 986d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 996d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *A, const int lda, 1006d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *X, const int incX); 1016d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ctbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1026d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1036d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const void *A, const int lda, 1046d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *X, const int incX); 1056d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ctpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1066d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1076d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *Ap, void *X, const int incX); 1086d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ctrsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1096d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1106d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *A, const int lda, void *X, 1116d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX); 1126d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ctbsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1136d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1146d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const void *A, const int lda, 1156d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *X, const int incX); 1166d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ctpsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1176d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1186d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *Ap, void *X, const int incX); 1196d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 1206d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zgemv)(const enum CBLAS_ORDER order, 1216d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const int M, const int N, 1226d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 1236d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *X, const int incX, const void *beta, 1246d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *Y, const int incY); 1256d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zgbmv)(const enum CBLAS_ORDER order, 1266d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const int M, const int N, 1276d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int KL, const int KU, const void *alpha, 1286d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *A, const int lda, const void *X, 1296d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, const void *beta, void *Y, const int incY); 1306d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ztrmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1316d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1326d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *A, const int lda, 1336d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *X, const int incX); 1346d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ztbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1356d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1366d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const void *A, const int lda, 1376d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *X, const int incX); 1386d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ztpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1396d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1406d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *Ap, void *X, const int incX); 1416d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ztrsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1426d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1436d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *A, const int lda, void *X, 1446d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX); 1456d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ztbsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1466d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1476d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const void *A, const int lda, 1486d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *X, const int incX); 1496d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ztpsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1506d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, 1516d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *Ap, void *X, const int incX); 1526d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 1536d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 1546d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang/* 1556d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * Routines with S and D prefixes only 1566d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang */ 1576d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ssymv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1586d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float alpha, const float *A, 1596d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const float *X, const int incX, 1606d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float beta, float *Y, const int incY); 1616d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ssbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1626d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const float alpha, const float *A, 1636d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const float *X, const int incX, 1646d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float beta, float *Y, const int incY); 1656d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_sspmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1666d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float alpha, const float *Ap, 1676d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float *X, const int incX, 1686d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float beta, float *Y, const int incY); 1696d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_sger)(const enum CBLAS_ORDER order, const int M, const int N, 1706d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float alpha, const float *X, const int incX, 1716d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float *Y, const int incY, float *A, const int lda); 1726d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ssyr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1736d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float alpha, const float *X, 1746d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, float *A, const int lda); 1756d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_sspr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1766d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float alpha, const float *X, 1776d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, float *Ap); 1786d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ssyr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1796d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float alpha, const float *X, 1806d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, const float *Y, const int incY, float *A, 1816d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda); 1826d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_sspr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1836d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float alpha, const float *X, 1846d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, const float *Y, const int incY, float *A); 1856d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 1866d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dsymv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1876d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double alpha, const double *A, 1886d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const double *X, const int incX, 1896d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double beta, double *Y, const int incY); 1906d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dsbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1916d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const double alpha, const double *A, 1926d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const double *X, const int incX, 1936d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double beta, double *Y, const int incY); 1946d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dspmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 1956d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double alpha, const double *Ap, 1966d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double *X, const int incX, 1976d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double beta, double *Y, const int incY); 1986d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dger)(const enum CBLAS_ORDER order, const int M, const int N, 1996d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double alpha, const double *X, const int incX, 2006d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double *Y, const int incY, double *A, const int lda); 2016d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dsyr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2026d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double alpha, const double *X, 2036d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, double *A, const int lda); 2046d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dspr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2056d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double alpha, const double *X, 2066d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, double *Ap); 2076d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dsyr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2086d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double alpha, const double *X, 2096d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, const double *Y, const int incY, double *A, 2106d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda); 2116d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dspr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2126d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double alpha, const double *X, 2136d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, const double *Y, const int incY, double *A); 2146d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 2156d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 2166d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang/* 2176d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * Routines with C and Z prefixes only 2186d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang */ 2196d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_chemv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2206d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *alpha, const void *A, 2216d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const void *X, const int incX, 2226d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *Y, const int incY); 2236d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_chbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2246d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const void *alpha, const void *A, 2256d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const void *X, const int incX, 2266d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *Y, const int incY); 2276d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_chpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2286d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *alpha, const void *Ap, 2296d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *X, const int incX, 2306d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *Y, const int incY); 2316d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cgeru)(const enum CBLAS_ORDER order, const int M, const int N, 2326d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *X, const int incX, 2336d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *Y, const int incY, void *A, const int lda); 2346d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cgerc)(const enum CBLAS_ORDER order, const int M, const int N, 2356d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *X, const int incX, 2366d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *Y, const int incY, void *A, const int lda); 2376d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cher)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2386d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float alpha, const void *X, const int incX, 2396d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *A, const int lda); 2406d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_chpr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2416d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const float alpha, const void *X, 2426d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, void *A); 2436d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cher2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, 2446d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *X, const int incX, 2456d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *Y, const int incY, void *A, const int lda); 2466d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_chpr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, 2476d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *X, const int incX, 2486d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *Y, const int incY, void *Ap); 2496d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 2506d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zhemv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2516d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *alpha, const void *A, 2526d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const void *X, const int incX, 2536d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *Y, const int incY); 2546d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zhbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2556d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const int K, const void *alpha, const void *A, 2566d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const void *X, const int incX, 2576d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *Y, const int incY); 2586d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zhpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2596d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const void *alpha, const void *Ap, 2606d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *X, const int incX, 2616d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *Y, const int incY); 2626d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zgeru)(const enum CBLAS_ORDER order, const int M, const int N, 2636d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *X, const int incX, 2646d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *Y, const int incY, void *A, const int lda); 2656d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zgerc)(const enum CBLAS_ORDER order, const int M, const int N, 2666d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *X, const int incX, 2676d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *Y, const int incY, void *A, const int lda); 2686d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zher)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2696d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double alpha, const void *X, const int incX, 2706d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *A, const int lda); 2716d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zhpr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, 2726d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int N, const double alpha, const void *X, 2736d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int incX, void *A); 2746d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zher2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, 2756d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *X, const int incX, 2766d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *Y, const int incY, void *A, const int lda); 2776d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zhpr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N, 2786d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *X, const int incX, 2796d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *Y, const int incY, void *Ap); 2806d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 2816d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang/* 2826d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * =========================================================================== 2836d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * Prototypes for level 3 BLAS 2846d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * =========================================================================== 2856d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang */ 2866d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 2876d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang/* 2886d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * Routines with standard 4 prefixes (S, D, C, Z) 2896d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang */ 2906d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_sgemm)(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, 2916d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransB, const int M, const int N, 2926d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int K, const float alpha, const float *A, 2936d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const float *B, const int ldb, 2946d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float beta, float *C, const int ldc); 2956d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ssymm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 2966d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const int M, const int N, 2976d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float alpha, const float *A, const int lda, 2986d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float *B, const int ldb, const float beta, 2996d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang float *C, const int ldc); 3006d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ssyrk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 3016d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 3026d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float alpha, const float *A, const int lda, 3036d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float beta, float *C, const int ldc); 3046d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ssyr2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 3056d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 3066d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float alpha, const float *A, const int lda, 3076d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float *B, const int ldb, const float beta, 3086d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang float *C, const int ldc); 3096d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_strmm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3106d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, 3116d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_DIAG Diag, const int M, const int N, 3126d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float alpha, const float *A, const int lda, 3136d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang float *B, const int ldb); 3146d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_strsm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3156d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, 3166d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_DIAG Diag, const int M, const int N, 3176d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float alpha, const float *A, const int lda, 3186d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang float *B, const int ldb); 3196d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 3206d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dgemm)(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, 3216d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransB, const int M, const int N, 3226d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int K, const double alpha, const double *A, 3236d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const double *B, const int ldb, 3246d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double beta, double *C, const int ldc); 3256d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dsymm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3266d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const int M, const int N, 3276d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double alpha, const double *A, const int lda, 3286d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double *B, const int ldb, const double beta, 3296d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang double *C, const int ldc); 3306d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dsyrk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 3316d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 3326d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double alpha, const double *A, const int lda, 3336d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double beta, double *C, const int ldc); 3346d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dsyr2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 3356d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 3366d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double alpha, const double *A, const int lda, 3376d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double *B, const int ldb, const double beta, 3386d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang double *C, const int ldc); 3396d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dtrmm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3406d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, 3416d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_DIAG Diag, const int M, const int N, 3426d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double alpha, const double *A, const int lda, 3436d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang double *B, const int ldb); 3446d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_dtrsm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3456d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, 3466d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_DIAG Diag, const int M, const int N, 3476d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double alpha, const double *A, const int lda, 3486d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang double *B, const int ldb); 3496d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 3506d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cgemm)(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, 3516d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransB, const int M, const int N, 3526d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int K, const void *alpha, const void *A, 3536d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const void *B, const int ldb, 3546d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *C, const int ldc); 3556d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_csymm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3566d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const int M, const int N, 3576d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 3586d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *B, const int ldb, const void *beta, 3596d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *C, const int ldc); 3606d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_csyrk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 3616d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 3626d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 3636d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *C, const int ldc); 3646d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_csyr2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 3656d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 3666d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 3676d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *B, const int ldb, const void *beta, 3686d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *C, const int ldc); 3696d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ctrmm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3706d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, 3716d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_DIAG Diag, const int M, const int N, 3726d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 3736d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *B, const int ldb); 3746d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ctrsm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3756d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, 3766d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_DIAG Diag, const int M, const int N, 3776d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 3786d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *B, const int ldb); 3796d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 3806d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zgemm)(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, 3816d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE TransB, const int M, const int N, 3826d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int K, const void *alpha, const void *A, 3836d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const int lda, const void *B, const int ldb, 3846d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *C, const int ldc); 3856d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zsymm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 3866d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const int M, const int N, 3876d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 3886d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *B, const int ldb, const void *beta, 3896d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *C, const int ldc); 3906d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zsyrk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 3916d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 3926d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 3936d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *beta, void *C, const int ldc); 3946d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zsyr2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 3956d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 3966d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 3976d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *B, const int ldb, const void *beta, 3986d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *C, const int ldc); 3996d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ztrmm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 4006d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, 4016d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_DIAG Diag, const int M, const int N, 4026d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 4036d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *B, const int ldb); 4046d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_ztrsm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 4056d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, 4066d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_DIAG Diag, const int M, const int N, 4076d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 4086d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *B, const int ldb); 4096d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 4106d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 4116d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang/* 4126d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang * Routines with prefixes C and Z only 4136d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang */ 4146d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_chemm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 4156d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const int M, const int N, 4166d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 4176d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *B, const int ldb, const void *beta, 4186d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *C, const int ldc); 4196d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cherk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 4206d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 4216d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float alpha, const void *A, const int lda, 4226d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const float beta, void *C, const int ldc); 4236d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_cher2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 4246d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 4256d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 4266d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *B, const int ldb, const float beta, 4276d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *C, const int ldc); 4286d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 4296d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zhemm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, 4306d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_UPLO Uplo, const int M, const int N, 4316d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 4326d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *B, const int ldb, const void *beta, 4336d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *C, const int ldc); 4346d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zherk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 4356d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 4366d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double alpha, const void *A, const int lda, 4376d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const double beta, void *C, const int ldc); 4386d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangtypedef void (*FnPtr_cblas_zher2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, 4396d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const enum CBLAS_TRANSPOSE Trans, const int N, const int K, 4406d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *alpha, const void *A, const int lda, 4416d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang const void *B, const int ldb, const double beta, 4426d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void *C, const int ldc); 4436d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 4446d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang// Macros to help declare our function pointers for the dispatch table. 4456d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#define RS_APPLY_MACRO_TO(x) \ 4466d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang FnPtr_##x x; 4476d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#include "rsCpuBLAS.inc" 4486d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 4496d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wangbool loadBLASLib() { 4506d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang void* handle = NULL; 4516d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang handle = dlopen("libblasV8.so", RTLD_LAZY | RTLD_LOCAL); 4526d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 4536d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang if (handle == NULL) { 4546d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang return false; 4556d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang } 4566d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 4576d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang// Macros to help load the function pointers. 4586d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#define RS_APPLY_MACRO_TO(x) \ 4596d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang x = (FnPtr_##x)dlsym(handle, #x); \ 4606d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang if (x == nullptr) { \ 4616d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang ALOGE("Failed to load " #x " for RS BLAS implementation."); \ 4626d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang return false; \ 4636d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang } 4646d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#include "rsCpuBLAS.inc" 4656d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang return true; 4666d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang} 4676d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang 4686d4dabc61625fb271c5e3e10f0689b2996de3933Miao Wang#endif 469