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 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