Home | History | Annotate | Download | only in cpu_ref
      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