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