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