blob: 46021358706cc54e627a957ea70e7612fc29adfd [file] [log] [blame]
Miao Wange941f182015-07-14 16:18:49 -07001#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 */
15enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};
16enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};
17enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
18enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
19enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
20
21typedef 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);
26typedef 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);
31typedef 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);
35typedef 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);
39typedef 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);
42typedef 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);
46typedef 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);
50typedef 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
54typedef 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);
59typedef 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);
64typedef 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);
68typedef 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);
72typedef 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);
75typedef 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);
79typedef 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);
83typedef 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
87typedef 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);
92typedef 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);
97typedef 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);
101typedef 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);
105typedef 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);
108typedef 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);
112typedef 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);
116typedef 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
120typedef 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);
125typedef 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);
130typedef 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);
134typedef 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);
138typedef 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);
141typedef 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);
145typedef 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);
149typedef 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 */
157typedef 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);
161typedef 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);
165typedef 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);
169typedef 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);
172typedef 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);
175typedef 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);
178typedef 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);
182typedef 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
186typedef 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);
190typedef 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);
194typedef 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);
198typedef 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);
201typedef 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);
204typedef 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);
207typedef 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);
211typedef 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 */
219typedef 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);
223typedef 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);
227typedef 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);
231typedef 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);
234typedef 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);
237typedef 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);
240typedef 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);
243typedef 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);
246typedef 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
250typedef 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);
254typedef 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);
258typedef 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);
262typedef 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);
265typedef 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);
268typedef 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);
271typedef 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);
274typedef 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);
277typedef 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 */
290typedef 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);
295typedef 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);
300typedef 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);
304typedef 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);
309typedef 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);
314typedef 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
320typedef 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);
325typedef 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);
330typedef 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);
334typedef 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);
339typedef 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);
344typedef 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
350typedef 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);
355typedef 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);
360typedef 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);
364typedef 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);
369typedef 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);
374typedef 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
380typedef 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);
385typedef 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);
390typedef 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);
394typedef 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);
399typedef 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);
404typedef 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 */
414typedef 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);
419typedef 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);
423typedef 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
429typedef 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);
434typedef 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);
438typedef 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
449bool 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