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