1e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#ifndef RS_COMPATIBILITY_LIB
2e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#include "cblas.h"
3e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#else
4e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#include <dlfcn.h>
5e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang/*
641ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wang * The following enums are based on cblas.h
741ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wang */
841ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wangenum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};
941ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wangenum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};
1041ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wangenum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
1141ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wangenum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
1241ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wangenum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
1341ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wang#endif
1441ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wang
1541ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wang/*
16e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * ===========================================================================
17e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * Prototypes for level 2 BLAS
18e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * ===========================================================================
19e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang */
20e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
21e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang/*
22e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * Routines with standard 4 prefixes (S, D, C, Z)
23e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang */
24e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_sgemv)(const enum CBLAS_ORDER order,
25e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
26e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float alpha, const float *A, const int lda,
27e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float *X, const int incX, const float beta,
28e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  float *Y, const int incY);
29e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_sgbmv)(const enum CBLAS_ORDER order,
30e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
31e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int KL, const int KU, const float alpha,
32e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float *A, const int lda, const float *X,
33e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX, const float beta, float *Y, const int incY);
34e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_strmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
35e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
36e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const float *A, const int lda,
37e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  float *X, const int incX);
38e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_stbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
39e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
40e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const float *A, const int lda,
41e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  float *X, const int incX);
42e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_stpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
43e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
44e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const float *Ap, float *X, const int incX);
45e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_strsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
46e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
47e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const float *A, const int lda, float *X,
48e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX);
49e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_stbsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
50e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
51e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const float *A, const int lda,
52e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  float *X, const int incX);
53e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_stpsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
54e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
55e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const float *Ap, float *X, const int incX);
56e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
57e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dgemv)(const enum CBLAS_ORDER order,
58e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
59e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double alpha, const double *A, const int lda,
60e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double *X, const int incX, const double beta,
61e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  double *Y, const int incY);
62e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dgbmv)(const enum CBLAS_ORDER order,
63e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
64e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int KL, const int KU, const double alpha,
65e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double *A, const int lda, const double *X,
66e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX, const double beta, double *Y, const int incY);
67e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dtrmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
68e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
69e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const double *A, const int lda,
70e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  double *X, const int incX);
71e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dtbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
72e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
73e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const double *A, const int lda,
74e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  double *X, const int incX);
75e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dtpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
76e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
77e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const double *Ap, double *X, const int incX);
78e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dtrsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
79e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
80e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const double *A, const int lda, double *X,
81e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX);
82e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dtbsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
83e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
84e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const double *A, const int lda,
85e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  double *X, const int incX);
86e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dtpsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
87e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
88e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const double *Ap, double *X, const int incX);
89e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
90e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cgemv)(const enum CBLAS_ORDER order,
91e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
92e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
93e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *X, const int incX, const void *beta,
94e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *Y, const int incY);
95e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cgbmv)(const enum CBLAS_ORDER order,
96e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
97e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int KL, const int KU, const void *alpha,
98e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *A, const int lda, const void *X,
99e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX, const void *beta, void *Y, const int incY);
100e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ctrmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
101e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
102e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *A, const int lda,
103e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *X, const int incX);
104e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ctbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
105e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
106e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const void *A, const int lda,
107e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *X, const int incX);
108e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ctpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
109e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
110e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *Ap, void *X, const int incX);
111e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ctrsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
112e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
113e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *A, const int lda, void *X,
114e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX);
115e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ctbsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
116e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
117e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const void *A, const int lda,
118e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *X, const int incX);
119e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ctpsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
120e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
121e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *Ap, void *X, const int incX);
122e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
123e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zgemv)(const enum CBLAS_ORDER order,
124e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
125e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
126e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *X, const int incX, const void *beta,
127e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *Y, const int incY);
128e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zgbmv)(const enum CBLAS_ORDER order,
129e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const int M, const int N,
130e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int KL, const int KU, const void *alpha,
131e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *A, const int lda, const void *X,
132e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX, const void *beta, void *Y, const int incY);
133e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ztrmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
134e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
135e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *A, const int lda,
136e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *X, const int incX);
137e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ztbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
138e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
139e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const void *A, const int lda,
140e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *X, const int incX);
141e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ztpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
142e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
143e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *Ap, void *X, const int incX);
144e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ztrsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
145e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
146e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *A, const int lda, void *X,
147e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX);
148e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ztbsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
149e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
150e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const void *A, const int lda,
151e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *X, const int incX);
152e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ztpsv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
153e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag,
154e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *Ap, void *X, const int incX);
155e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
156e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
157e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang/*
158e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * Routines with S and D prefixes only
159e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang */
160e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ssymv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
161e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const float alpha, const float *A,
162e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const float *X, const int incX,
163e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float beta, float *Y, const int incY);
164e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ssbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
165e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const float alpha, const float *A,
166e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const float *X, const int incX,
167e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float beta, float *Y, const int incY);
168e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_sspmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
169e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const float alpha, const float *Ap,
170e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float *X, const int incX,
171e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float beta, float *Y, const int incY);
172e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_sger)(const enum CBLAS_ORDER order, const int M, const int N,
173e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const float alpha, const float *X, const int incX,
174e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const float *Y, const int incY, float *A, const int lda);
175e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ssyr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
176e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int N, const float alpha, const float *X,
177e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int incX, float *A, const int lda);
178e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_sspr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
179e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int N, const float alpha, const float *X,
180e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int incX, float *Ap);
181e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ssyr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
182e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const float alpha, const float *X,
183e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX, const float *Y, const int incY, float *A,
184e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda);
185e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_sspr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
186e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const float alpha, const float *X,
187e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX, const float *Y, const int incY, float *A);
188e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
189e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dsymv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
190e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const double alpha, const double *A,
191e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const double *X, const int incX,
192e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double beta, double *Y, const int incY);
193e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dsbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
194e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const double alpha, const double *A,
195e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const double *X, const int incX,
196e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double beta, double *Y, const int incY);
197e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dspmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
198e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const double alpha, const double *Ap,
199e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double *X, const int incX,
200e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double beta, double *Y, const int incY);
201e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dger)(const enum CBLAS_ORDER order, const int M, const int N,
202e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const double alpha, const double *X, const int incX,
203e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const double *Y, const int incY, double *A, const int lda);
204e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dsyr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
205e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int N, const double alpha, const double *X,
206e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int incX, double *A, const int lda);
207e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dspr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
208e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int N, const double alpha, const double *X,
209e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int incX, double *Ap);
210e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dsyr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
211e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const double alpha, const double *X,
212e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX, const double *Y, const int incY, double *A,
213e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda);
214e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dspr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
215e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const double alpha, const double *X,
216e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int incX, const double *Y, const int incY, double *A);
217e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
218e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
219e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang/*
220e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * Routines with C and Z prefixes only
221e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang */
222e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_chemv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
223e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *alpha, const void *A,
224e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const void *X, const int incX,
225e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *Y, const int incY);
226e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_chbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
227e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const void *alpha, const void *A,
228e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const void *X, const int incX,
229e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *Y, const int incY);
230e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_chpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
231e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *alpha, const void *Ap,
232e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *X, const int incX,
233e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *Y, const int incY);
234e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cgeru)(const enum CBLAS_ORDER order, const int M, const int N,
235e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *X, const int incX,
236e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *Y, const int incY, void *A, const int lda);
237e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cgerc)(const enum CBLAS_ORDER order, const int M, const int N,
238e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *X, const int incX,
239e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *Y, const int incY, void *A, const int lda);
240e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cher)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
241e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int N, const float alpha, const void *X, const int incX,
242e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 void *A, const int lda);
243e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_chpr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
244e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int N, const float alpha, const void *X,
245e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int incX, void *A);
246e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cher2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
247e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *X, const int incX,
248e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *Y, const int incY, void *A, const int lda);
249e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_chpr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
250e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *X, const int incX,
251e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *Y, const int incY, void *Ap);
252e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
253e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zhemv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
254e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *alpha, const void *A,
255e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const void *X, const int incX,
256e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *Y, const int incY);
257e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zhbmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
258e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const int K, const void *alpha, const void *A,
259e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const void *X, const int incX,
260e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *Y, const int incY);
261e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zhpmv)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
262e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int N, const void *alpha, const void *Ap,
263e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *X, const int incX,
264e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *Y, const int incY);
265e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zgeru)(const enum CBLAS_ORDER order, const int M, const int N,
266e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *X, const int incX,
267e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *Y, const int incY, void *A, const int lda);
268e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zgerc)(const enum CBLAS_ORDER order, const int M, const int N,
269e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *X, const int incX,
270e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *Y, const int incY, void *A, const int lda);
271e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zher)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
272e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int N, const double alpha, const void *X, const int incX,
273e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 void *A, const int lda);
274e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zhpr)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo,
275e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int N, const double alpha, const void *X,
276e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                 const int incX, void *A);
277e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zher2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
278e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *X, const int incX,
279e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *Y, const int incY, void *A, const int lda);
280e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zhpr2)(const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const int N,
281e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *X, const int incX,
282e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *Y, const int incY, void *Ap);
283e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
284e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang/*
285e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * ===========================================================================
286e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * Prototypes for level 3 BLAS
287e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * ===========================================================================
288e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang */
289e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
290e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang/*
291e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * Routines with standard 4 prefixes (S, D, C, Z)
292e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang */
293e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_sgemm)(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
294e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
295e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int K, const float alpha, const float *A,
296e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const float *B, const int ldb,
297e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float beta, float *C, const int ldc);
298e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ssymm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
299e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const int M, const int N,
300e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float alpha, const float *A, const int lda,
301e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float *B, const int ldb, const float beta,
302e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  float *C, const int ldc);
303e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ssyrk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
304e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
305e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float alpha, const float *A, const int lda,
306e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float beta, float *C, const int ldc);
307e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ssyr2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
308e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
309e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const float alpha, const float *A, const int lda,
310e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const float *B, const int ldb, const float beta,
311e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   float *C, const int ldc);
312e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_strmm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
313e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
314e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_DIAG Diag, const int M, const int N,
315e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float alpha, const float *A, const int lda,
316e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  float *B, const int ldb);
317e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_strsm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
318e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
319e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_DIAG Diag, const int M, const int N,
320e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float alpha, const float *A, const int lda,
321e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  float *B, const int ldb);
322e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
323e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dgemm)(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
324e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
325e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int K, const double alpha, const double *A,
326e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const double *B, const int ldb,
327e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double beta, double *C, const int ldc);
328e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dsymm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
329e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const int M, const int N,
330e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double alpha, const double *A, const int lda,
331e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double *B, const int ldb, const double beta,
332e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  double *C, const int ldc);
333e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dsyrk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
334e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
335e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double alpha, const double *A, const int lda,
336e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double beta, double *C, const int ldc);
337e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dsyr2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
338e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
339e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const double alpha, const double *A, const int lda,
340e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const double *B, const int ldb, const double beta,
341e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   double *C, const int ldc);
342e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dtrmm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
343e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
344e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_DIAG Diag, const int M, const int N,
345e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double alpha, const double *A, const int lda,
346e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  double *B, const int ldb);
347e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_dtrsm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
348e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
349e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_DIAG Diag, const int M, const int N,
350e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double alpha, const double *A, const int lda,
351e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  double *B, const int ldb);
352e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
353e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cgemm)(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
354e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
355e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int K, const void *alpha, const void *A,
356e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const void *B, const int ldb,
357e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *C, const int ldc);
358e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_csymm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
359e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const int M, const int N,
360e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
361e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *B, const int ldb, const void *beta,
362e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *C, const int ldc);
363e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_csyrk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
364e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
365e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
366e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *C, const int ldc);
367e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_csyr2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
368e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
369e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const void *alpha, const void *A, const int lda,
370e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const void *B, const int ldb, const void *beta,
371e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   void *C, const int ldc);
372e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ctrmm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
373e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
374e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_DIAG Diag, const int M, const int N,
375e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
376e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *B, const int ldb);
377e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ctrsm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
378e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
379e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_DIAG Diag, const int M, const int N,
380e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
381e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *B, const int ldb);
382e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
383e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zgemm)(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
384e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
385e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int K, const void *alpha, const void *A,
386e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const int lda, const void *B, const int ldb,
387e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *C, const int ldc);
388e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zsymm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
389e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const int M, const int N,
390e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
391e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *B, const int ldb, const void *beta,
392e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *C, const int ldc);
393e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zsyrk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
394e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
395e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
396e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *beta, void *C, const int ldc);
397e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zsyr2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
398e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
399e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const void *alpha, const void *A, const int lda,
400e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const void *B, const int ldb, const void *beta,
401e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   void *C, const int ldc);
402e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ztrmm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
403e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
404e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_DIAG Diag, const int M, const int N,
405e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
406e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *B, const int ldb);
407e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_ztrsm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
408e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA,
409e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_DIAG Diag, const int M, const int N,
410e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
411e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *B, const int ldb);
412e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
413e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
414e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang/*
415e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang * Routines with prefixes C and Z only
416e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang */
417e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_chemm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
418e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const int M, const int N,
419e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
420e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *B, const int ldb, const void *beta,
421e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *C, const int ldc);
422e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cherk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
423e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
424e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float alpha, const void *A, const int lda,
425e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const float beta, void *C, const int ldc);
426e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_cher2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
427e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
428e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const void *alpha, const void *A, const int lda,
429e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const void *B, const int ldb, const float beta,
430e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   void *C, const int ldc);
431e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
432e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zhemm)(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side,
433e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_UPLO Uplo, const int M, const int N,
434e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *alpha, const void *A, const int lda,
435e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const void *B, const int ldb, const void *beta,
436e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  void *C, const int ldc);
437e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zherk)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
438e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
439e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double alpha, const void *A, const int lda,
440e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                  const double beta, void *C, const int ldc);
441e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangtypedef void (*FnPtr_cblas_zher2k)(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo,
442e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const enum CBLAS_TRANSPOSE Trans, const int N, const int K,
443e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const void *alpha, const void *A, const int lda,
444e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   const void *B, const int ldb, const double beta,
445e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang                                   void *C, const int ldc);
446e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
44741ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wang
44841ab8faaf0d90238d42d8e2bbb7177467c10b4f6Miao Wang#ifdef RS_COMPATIBILITY_LIB
449e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang// Macros to help declare our function pointers for the dispatch table.
450e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#define RS_APPLY_MACRO_TO(x) \
451e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang    FnPtr_##x x;
452e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#include "rsCpuBLAS.inc"
453e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
454e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wangbool loadBLASLib() {
455e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang    void* handle = NULL;
456e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang    handle = dlopen("libblasV8.so", RTLD_LAZY | RTLD_LOCAL);
457e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
458e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang    if (handle == NULL) {
459e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang        return false;
460e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang    }
461e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang
462e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang// Macros to help load the function pointers.
463e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#define RS_APPLY_MACRO_TO(x) \
464e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang    x = (FnPtr_##x)dlsym(handle, #x); \
4654fcef498e1508f2f3a0b9332ea89b0064c2dc6e9Chih-Hung Hsieh    if ((x) == nullptr) { \
466e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang        ALOGE("Failed to load " #x " for RS BLAS implementation."); \
467e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang        return false; \
468e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang    }
469e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#include "rsCpuBLAS.inc"
470e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang    return true;
471e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang}
472e941f18202b9c9883ff81c63710f7faec5c988e4Miao Wang#endif
473