LAMA
/home/brandes/workspace/LAMA/src/lama/openmp/BLASHelper.hpp
Go to the documentation of this file.
00001 
00033 #ifndef LAMA_BLASHELPER_HPP_
00034 #define LAMA_BLASHELPER_HPP_
00035 
00036 #include <lama/macros/inline.hpp>
00037 
00045 #ifdef CRAY
00046 #include <fortran.h>
00047 #define F77_CHAR _fcd
00048 #define C2F_CHAR(a) ( _cptofcd( (a), 1 ) )
00049 #define C2F_STR(a, i) ( _cptofcd( (a), (i) ) )
00050 #define F77_STRLEN(a) (_fcdlen)
00051 #endif
00052 
00053 #ifdef WeirdNEC
00054 #define F77_INT long
00055 #endif
00056 
00057 #ifdef  F77_CHAR
00058 #define FCHAR F77_CHAR
00059 #else
00060 #define FCHAR char *
00061 #endif
00062 
00063 #ifdef F77_INT
00064 #define FINT const F77_INT *
00065 #define FINT2 F77_INT *
00066 #else
00067 #define FINT const int *
00068 #define FINT2 int *
00069 #endif
00070 
00071 //fallback if nothing is set in cmake
00072 #if !defined(LAMA_FORTRAN_BLAS_STYLE_UNDERSCORE)
00073     #if !defined(LAMA_FORTRAN_BLAS_STYLE_UPCASE)
00074         #if !defined(LAMA_FORTRAN_BLAS_STYLE_LOWCASE)
00075             #define LAMA_FORTRAN_BLAS_STYLE_LOWCASE
00076         #endif
00077     #endif
00078 #endif
00079 
00080 #ifdef __cplusplus
00081 extern "C" {
00082 #endif
00083 
00084 #if defined(LAMA_FORTRAN_BLAS_STYLE_UNDERSCORE)
00085 
00086 /*
00087  * Level 1 BLAS
00088  */
00089 
00090 #define F77_xerbla xerbla_
00091 
00092 #define F77_sdot      sdot_
00093 #define F77_ddot      ddot_
00094 #define F77_snrm2     snrm2_
00095 #define F77_dnrm2     dnrm2_
00096 #define F77_sasum     sasum_
00097 #define F77_dasum     dasum_
00098 #define F77_isamax    isamax_
00099 #define F77_idamax    idamax_
00100 
00101 #define F77_srotg      srotg_
00102 #define F77_srotmg     srotmg_
00103 #define F77_srot       srot_
00104 #define F77_srotm      srotm_
00105 #define F77_drotg      drotg_
00106 #define F77_drotmg     drotmg_
00107 #define F77_drot       drot_
00108 #define F77_drotm      drotm_
00109 #define F77_sswap      sswap_
00110 #define F77_scopy      scopy_
00111 #define F77_saxpy      saxpy_
00112 #define F77_isamax_sub isamaxsub_
00113 #define F77_dswap      dswap_
00114 #define F77_dcopy      dcopy_
00115 #define F77_daxpy      daxpy_
00116 #define F77_idamax_sub idamaxsub_
00117 #define F77_cswap      cswap_
00118 #define F77_ccopy      ccopy_
00119 #define F77_caxpy      caxpy_
00120 #define F77_icamax_sub icamaxsub_
00121 #define F77_zswap      zswap_
00122 #define F77_zcopy      zcopy_
00123 #define F77_zaxpy      zaxpy_
00124 #define F77_izamax_sub izamaxsub_
00125 #define F77_sdot_sub   sdotsub_
00126 #define F77_ddot_sub   ddotsub_
00127 #define F77_dsdot_sub   dsdotsub_
00128 #define F77_sscal      sscal_
00129 #define F77_dscal      dscal_
00130 #define F77_cscal      cscal_
00131 #define F77_zscal      zscal_
00132 #define F77_csscal      csscal_
00133 #define F77_zdscal      zdscal_
00134 #define F77_cdotu_sub  cdotusub_
00135 #define F77_cdotc_sub  cdotcsub_
00136 #define F77_zdotu_sub  zdotusub_
00137 #define F77_zdotc_sub  zdotcsub_
00138 #define F77_snrm2_sub  snrm2sub_
00139 #define F77_sasum_sub  sasumsub_
00140 #define F77_dnrm2_sub  dnrm2sub_
00141 #define F77_dasum_sub  dasumsub_
00142 #define F77_scnrm2_sub  scnrm2sub_
00143 #define F77_scasum_sub  scasumsub_
00144 #define F77_dznrm2_sub  dznrm2sub_
00145 #define F77_dzasum_sub  dzasumsub_
00146 #define F77_sdsdot_sub   sdsdotsub_
00147 
00148 /*
00149  * Level 2 BLAS
00150  */
00151 
00152 #define F77_ssymv      ssymv_
00153 #define F77_ssbmv      ssbmv_
00154 #define F77_sspmv      sspmv_
00155 #define F77_sger       sger_
00156 #define F77_ssyr       ssyr_
00157 #define F77_sspr       sspr_
00158 #define F77_ssyr2      ssyr2_
00159 #define F77_sspr2      sspr2_
00160 #define F77_dsymv      dsymv_
00161 #define F77_dsbmv      dsbmv_
00162 #define F77_dspmv      dspmv_
00163 #define F77_dger       dger_
00164 #define F77_dsyr       dsyr_
00165 #define F77_dspr       dspr_
00166 #define F77_dsyr2      dsyr2_
00167 #define F77_dspr2      dspr2_
00168 #define F77_chemv      chemv_
00169 #define F77_chbmv      chbmv_
00170 #define F77_chpmv      chpmv_
00171 #define F77_cgeru      cgeru_
00172 #define F77_cgerc      cgerc_
00173 #define F77_cher       cher_
00174 #define F77_chpr       chpr_
00175 #define F77_cher2      cher2_
00176 #define F77_chpr2      chpr2_
00177 #define F77_zhemv      zhemv_
00178 #define F77_zhbmv      zhbmv_
00179 #define F77_zhpmv      zhpmv_
00180 #define F77_zgeru      zgeru_
00181 #define F77_zgerc      zgerc_
00182 #define F77_zher       zher_
00183 #define F77_zhpr       zhpr_
00184 #define F77_zher2      zher2_
00185 #define F77_zhpr2      zhpr2_
00186 #define F77_sgemv      sgemv_
00187 #define F77_sgbmv      sgbmv_
00188 #define F77_strmv      strmv_
00189 #define F77_stbmv      stbmv_
00190 #define F77_stpmv      stpmv_
00191 #define F77_strsv      strsv_
00192 #define F77_stbsv      stbsv_
00193 #define F77_stpsv      stpsv_
00194 #define F77_dgemv      dgemv_
00195 #define F77_dgbmv      dgbmv_
00196 #define F77_dtrmv      dtrmv_
00197 #define F77_dtbmv      dtbmv_
00198 #define F77_dtpmv      dtpmv_
00199 #define F77_dtrsv      dtrsv_
00200 #define F77_dtbsv      dtbsv_
00201 #define F77_dtpsv      dtpsv_
00202 #define F77_cgemv      cgemv_
00203 #define F77_cgbmv      cgbmv_
00204 #define F77_ctrmv      ctrmv_
00205 #define F77_ctbmv      ctbmv_
00206 #define F77_ctpmv      ctpmv_
00207 #define F77_ctrsv      ctrsv_
00208 #define F77_ctbsv      ctbsv_
00209 #define F77_ctpsv      ctpsv_
00210 #define F77_zgemv      zgemv_
00211 #define F77_zgbmv      zgbmv_
00212 #define F77_ztrmv      ztrmv_
00213 #define F77_ztbmv      ztbmv_
00214 #define F77_ztpmv      ztpmv_
00215 #define F77_ztrsv      ztrsv_
00216 #define F77_ztbsv      ztbsv_
00217 #define F77_ztpsv      ztpsv_
00218 
00219 /*
00220  * Level 3 BLAS
00221  */
00222 
00223 #define F77_chemm      chemm_
00224 #define F77_cherk      cherk_
00225 #define F77_cher2k     cher2k_
00226 #define F77_zhemm      zhemm_
00227 #define F77_zherk      zherk_
00228 #define F77_zher2k     zher2k_
00229 #define F77_sgemm      sgemm_
00230 #define F77_psgemm     psgemm_
00231 #define F77_ssymm      ssymm_
00232 #define F77_ssyrk      ssyrk_
00233 #define F77_ssyr2k     ssyr2k_
00234 #define F77_strmm      strmm_
00235 #define F77_strsm      strsm_
00236 #define F77_slaswp     slaswp_
00237 #define F77_dgemm      dgemm_
00238 #define F77_pdgemm     pdgemm_
00239 #define F77_dsymm      dsymm_
00240 #define F77_dsyrk      dsyrk_
00241 #define F77_dsyr2k     dsyr2k_
00242 #define F77_dtrmm      dtrmm_
00243 #define F77_dtrsm      dtrsm_
00244 #define F77_dlaswp     dlaswp_
00245 #define F77_cgemm      cgemm_
00246 #define F77_csymm      csymm_
00247 #define F77_csyrk      csyrk_
00248 #define F77_csyr2k     csyr2k_
00249 #define F77_ctrmm      ctrmm_
00250 #define F77_ctrsm      ctrsm_
00251 #define F77_zgemm      zgemm_
00252 #define F77_zsymm      zsymm_
00253 #define F77_zsyrk      zsyrk_
00254 #define F77_zsyr2k     zsyr2k_
00255 #define F77_ztrmm      ztrmm_
00256 #define F77_ztrsm      ztrsm_
00257 #elif defined(LAMA_FORTRAN_BLAS_STYLE_UPCASE)
00258 
00259 /*
00260  * Level 1 BLAS
00261  */
00262 
00263 #define F77_xerbla  XERBLA
00264 #define F77_sdot      SDOT
00265 #define F77_ddot      DDOT
00266 #define F77_snrm2     SNRM2
00267 #define F77_dnrm2     DNRM2
00268 #define F77_sasum     SASUM
00269 #define F77_dasum     DASUM
00270 #define F77_isamax    ISAMAX
00271 #define F77_idamax    IDAMAX
00272 
00273 #define F77_srotg      SROTG
00274 #define F77_srotmg     SROTMG
00275 #define F77_srot       SROT
00276 #define F77_srotm      SROTM
00277 #define F77_drotg      DROTG
00278 #define F77_drotmg     DROTMG
00279 #define F77_drot       DROT
00280 #define F77_drotm      DROTM
00281 #define F77_sswap      SSWAP
00282 #define F77_scopy      SCOPY
00283 #define F77_saxpy      SAXPY
00284 #define F77_isamax_sub ISAMAXSUB
00285 #define F77_dswap      DSWAP
00286 #define F77_dcopy      DCOPY
00287 #define F77_daxpy      DAXPY
00288 #define F77_idamax_sub IDAMAXSUB
00289 #define F77_cswap      CSWAP
00290 #define F77_ccopy      CCOPY
00291 #define F77_caxpy      CAXPY
00292 #define F77_icamax_sub ICAMAXSUB
00293 #define F77_zswap      ZSWAP
00294 #define F77_zcopy      ZCOPY
00295 #define F77_zaxpy      ZAXPY
00296 #define F77_izamax_sub IZAMAXSUB
00297 #define F77_sdot_sub   SDOTSUB
00298 #define F77_ddot_sub   DDOTSUB
00299 #define F77_dsdot_sub   DSDOTSUB
00300 #define F77_sscal      SSCAL
00301 #define F77_dscal      DSCAL
00302 #define F77_cscal      CSCAL
00303 #define F77_zscal      ZSCAL
00304 #define F77_csscal      CSSCAL
00305 #define F77_zdscal      ZDSCAL
00306 #define F77_cdotu_sub  CDOTUSUB
00307 #define F77_cdotc_sub  CDOTCSUB
00308 #define F77_zdotu_sub  ZDOTUSUB
00309 #define F77_zdotc_sub  ZDOTCSUB
00310 #define F77_snrm2_sub  SNRM2SUB
00311 #define F77_sasum_sub  SASUMSUB
00312 #define F77_dnrm2_sub  DNRM2SUB
00313 #define F77_dasum_sub  DASUMSUB
00314 #define F77_scnrm2_sub  SCNRM2SUB
00315 #define F77_scasum_sub  SCASUMSUB
00316 #define F77_dznrm2_sub  DZNRM2SUB
00317 #define F77_dzasum_sub  DZASUMSUB
00318 #define F77_sdsdot_sub   SDSDOTSUB
00319 
00320 /*
00321  * Level 2 BLAS
00322  */
00323 
00324 #define F77_ssymv      SSYMV
00325 #define F77_ssbmv      SSBMV
00326 #define F77_sspmv      SSPMV
00327 #define F77_sger       SGER
00328 #define F77_ssyr       SSYR
00329 #define F77_sspr       SSPR
00330 #define F77_ssyr2      SSYR2
00331 #define F77_sspr2      SSPR2
00332 #define F77_dsymv      DSYMV
00333 #define F77_dsbmv      DSBMV
00334 #define F77_dspmv      DSPMV
00335 #define F77_dger       DGER
00336 #define F77_dsyr       DSYR
00337 #define F77_dspr       DSPR
00338 #define F77_dsyr2      DSYR2
00339 #define F77_dspr2      DSPR2
00340 #define F77_chemv      CHEMV
00341 #define F77_chbmv      CHBMV
00342 #define F77_chpmv      CHPMV
00343 #define F77_cgeru      CGERU
00344 #define F77_cgerc      CGERC
00345 #define F77_cher       CHER
00346 #define F77_chpr       CHPR
00347 #define F77_cher2      CHER2
00348 #define F77_chpr2      CHPR2
00349 #define F77_zhemv      ZHEMV
00350 #define F77_zhbmv      ZHBMV
00351 #define F77_zhpmv      ZHPMV
00352 #define F77_zgeru      ZGERU
00353 #define F77_zgerc      ZGERC
00354 #define F77_zher       ZHER
00355 #define F77_zhpr       ZHPR
00356 #define F77_zher2      ZHER2
00357 #define F77_zhpr2      ZHPR2
00358 #define F77_sgemv      SGEMV
00359 #define F77_sgbmv      SGBMV
00360 #define F77_strmv      STRMV
00361 #define F77_stbmv      STBMV
00362 #define F77_stpmv      STPMV
00363 #define F77_strsv      STRSV
00364 #define F77_stbsv      STBSV
00365 #define F77_stpsv      STPSV
00366 #define F77_dgemv      DGEMV
00367 #define F77_dgbmv      DGBMV
00368 #define F77_dtrmv      DTRMV
00369 #define F77_dtbmv      DTBMV
00370 #define F77_dtpmv      DTPMV
00371 #define F77_dtrsv      DTRSV
00372 #define F77_dtbsv      DTBSV
00373 #define F77_dtpsv      DTPSV
00374 #define F77_cgemv      CGEMV
00375 #define F77_cgbmv      CGBMV
00376 #define F77_ctrmv      CTRMV
00377 #define F77_ctbmv      CTBMV
00378 #define F77_ctpmv      CTPMV
00379 #define F77_ctrsv      CTRSV
00380 #define F77_ctbsv      CTBSV
00381 #define F77_ctpsv      CTPSV
00382 #define F77_zgemv      ZGEMV
00383 #define F77_zgbmv      ZGBMV
00384 #define F77_ztrmv      ZTRMV
00385 #define F77_ztbmv      ZTBMV
00386 #define F77_ztpmv      ZTPMV
00387 #define F77_ztrsv      ZTRSV
00388 #define F77_ztbsv      ZTBSV
00389 #define F77_ztpsv      ZTPSV
00390 
00391 /*
00392  * Level 3 BLAS
00393  */
00394 
00395 #define F77_chemm      CHEMM
00396 #define F77_cherk      CHERK
00397 #define F77_cher2k     CHER2K
00398 #define F77_zhemm      ZHEMM
00399 #define F77_zherk      ZHERK
00400 #define F77_zher2k     ZHER2K
00401 #define F77_sgemm      SGEMM
00402 #define F77_psgemm     PSGEMM
00403 #define F77_ssymm      SSYMM
00404 #define F77_ssyrk      SSYRK
00405 #define F77_ssyr2k     SSYR2K
00406 #define F77_strmm      STRMM
00407 #define F77_strsm      STRSM
00408 #define F77_slaswp     SLASWP
00409 #define F77_dgemm      DGEMM
00410 #define F77_pdgemm     PDGEMM
00411 #define F77_dsymm      DSYMM
00412 #define F77_dsyrk      DSYRK
00413 #define F77_dsyr2k     DSYR2K
00414 #define F77_dtrmm      DTRMM
00415 #define F77_dtrsm      DTRSM
00416 #define F77_dlaswp     DLASWP
00417 #define F77_cgemm      CGEMM
00418 #define F77_csymm      CSYMM
00419 #define F77_csyrk      CSYRK
00420 #define F77_csyr2k     CSYR2K
00421 #define F77_ctrmm      CTRMM
00422 #define F77_ctrsm      CTRSM
00423 #define F77_zgemm      ZGEMM
00424 #define F77_zsymm      ZSYMM
00425 #define F77_zsyrk      ZSYRK
00426 #define F77_zsyr2k     ZSYR2K
00427 #define F77_ztrmm      ZTRMM
00428 #define F77_ztrsm      ZTRSM
00429 #elif defined(LAMA_FORTRAN_BLAS_STYLE_LOWCASE)
00430 
00431 /*
00432  * Level 1 BLAS
00433  */
00434 
00435 #define F77_xerbla  xerbla
00436 
00437 #define F77_sdot      sdot
00438 #define F77_ddot      ddot
00439 #define F77_snrm2     snrm2
00440 #define F77_dnrm2     dnrm2
00441 #define F77_sasum     sasum
00442 #define F77_dasum     dasum
00443 #define F77_isamax    isamax
00444 #define F77_idamax    idamax
00445 
00446 #define F77_srotg      srotg
00447 #define F77_srotmg     srotmg
00448 #define F77_srot       srot
00449 #define F77_srotm      srotm
00450 #define F77_drotg      drotg
00451 #define F77_drotmg     drotmg
00452 #define F77_drot       drot
00453 #define F77_drotm      drotm
00454 #define F77_sswap      sswap
00455 #define F77_scopy      scopy
00456 #define F77_saxpy      saxpy
00457 #define F77_isamax_sub isamaxsub
00458 #define F77_dswap      dswap
00459 #define F77_dcopy      dcopy
00460 #define F77_daxpy      daxpy
00461 #define F77_idamax_sub idamaxsub
00462 #define F77_cswap      cswap
00463 #define F77_ccopy      ccopy
00464 #define F77_caxpy      caxpy
00465 #define F77_icamax_sub icamaxsub
00466 #define F77_zswap      zswap
00467 #define F77_zcopy      zcopy
00468 #define F77_zaxpy      zaxpy
00469 #define F77_izamax_sub izamaxsub
00470 #define F77_sdot_sub   sdotsub
00471 #define F77_ddot_sub   ddotsub
00472 #define F77_dsdot_sub   dsdotsub
00473 #define F77_sscal      sscal
00474 #define F77_dscal      dscal
00475 #define F77_cscal      cscal
00476 #define F77_zscal      zscal
00477 #define F77_csscal      csscal
00478 #define F77_zdscal      zdscal
00479 #define F77_cdotu_sub  cdotusub
00480 #define F77_cdotc_sub  cdotcsub
00481 #define F77_zdotu_sub  zdotusub
00482 #define F77_zdotc_sub  zdotcsub
00483 #define F77_snrm2_sub  snrm2sub
00484 #define F77_sasum_sub  sasumsub
00485 #define F77_dnrm2_sub  dnrm2sub
00486 #define F77_dasum_sub  dasumsub
00487 #define F77_scnrm2_sub  scnrm2sub
00488 #define F77_scasum_sub  scasumsub
00489 #define F77_dznrm2_sub  dznrm2sub
00490 #define F77_dzasum_sub  dzasumsub
00491 #define F77_sdsdot_sub   sdsdotsub
00492 
00493 /*
00494  * Level 2 BLAS
00495  */
00496 
00497 #define F77_ssymv      ssymv
00498 #define F77_ssbmv      ssbmv
00499 #define F77_sspmv      sspmv
00500 #define F77_sger       sger
00501 #define F77_ssyr       ssyr
00502 #define F77_sspr       sspr
00503 #define F77_ssyr2      ssyr2
00504 #define F77_sspr2      sspr2
00505 #define F77_dsymv      dsymv
00506 #define F77_dsbmv      dsbmv
00507 #define F77_dspmv      dspmv
00508 #define F77_dger       dger
00509 #define F77_dsyr       dsyr
00510 #define F77_dspr       dspr
00511 #define F77_dsyr2      dsyr2
00512 #define F77_dspr2      dspr2
00513 #define F77_chemv      chemv
00514 #define F77_chbmv      chbmv
00515 #define F77_chpmv      chpmv
00516 #define F77_cgeru      cgeru
00517 #define F77_cgerc      cgerc
00518 #define F77_cher       cher
00519 #define F77_chpr       chpr
00520 #define F77_cher2      cher2
00521 #define F77_chpr2      chpr2
00522 #define F77_zhemv      zhemv
00523 #define F77_zhbmv      zhbmv
00524 #define F77_zhpmv      zhpmv
00525 #define F77_zgeru      zgeru
00526 #define F77_zgerc      zgerc
00527 #define F77_zher       zher
00528 #define F77_zhpr       zhpr
00529 #define F77_zher2      zher2
00530 #define F77_zhpr2      zhpr2
00531 #define F77_sgemv      sgemv
00532 #define F77_sgbmv      sgbmv
00533 #define F77_strmv      strmv
00534 #define F77_stbmv      stbmv
00535 #define F77_stpmv      stpmv
00536 #define F77_strsv      strsv
00537 #define F77_stbsv      stbsv
00538 #define F77_stpsv      stpsv
00539 #define F77_dgemv      dgemv
00540 #define F77_dgbmv      dgbmv
00541 #define F77_dtrmv      dtrmv
00542 #define F77_dtbmv      dtbmv
00543 #define F77_dtpmv      dtpmv
00544 #define F77_dtrsv      dtrsv
00545 #define F77_dtbsv      dtbsv
00546 #define F77_dtpsv      dtpsv
00547 #define F77_cgemv      cgemv
00548 #define F77_cgbmv      cgbmv
00549 #define F77_ctrmv      ctrmv
00550 #define F77_ctbmv      ctbmv
00551 #define F77_ctpmv      ctpmv
00552 #define F77_ctrsv      ctrsv
00553 #define F77_ctbsv      ctbsv
00554 #define F77_ctpsv      ctpsv
00555 #define F77_zgemv      zgemv
00556 #define F77_zgbmv      zgbmv
00557 #define F77_ztrmv      ztrmv
00558 #define F77_ztbmv      ztbmv
00559 #define F77_ztpmv      ztpmv
00560 #define F77_ztrsv      ztrsv
00561 #define F77_ztbsv      ztbsv
00562 #define F77_ztpsv      ztpsv
00563 
00564 /*
00565  * Level 3 BLAS
00566  */
00567 
00568 #define F77_chemm      chemm
00569 #define F77_cherk      cherk
00570 #define F77_cher2k     cher2k
00571 #define F77_zhemm      zhemm
00572 #define F77_zherk      zherk
00573 #define F77_zher2k     zher2k
00574 #define F77_sgemm      sgemm
00575 #define F77_psgemm     psgemm
00576 #define F77_ssymm      ssymm
00577 #define F77_ssyrk      ssyrk
00578 #define F77_ssyr2k     ssyr2k
00579 #define F77_strmm      strmm
00580 #define F77_strsm      strsm
00581 #define F77_slaswp     slaswp
00582 #define F77_dgemm      dgemm
00583 #define F77_pdgemm     pdgemm
00584 #define F77_dsymm      dsymm
00585 #define F77_dsyrk      dsyrk
00586 #define F77_dsyr2k     dsyr2k
00587 #define F77_dtrmm      dtrmm
00588 #define F77_dtrsm      dtrsm
00589 #define F77_dlaswp     dlaswp
00590 #define F77_cgemm      cgemm
00591 #define F77_csymm      csymm
00592 #define F77_csyrk      csyrk
00593 #define F77_csyr2k     csyr2k
00594 #define F77_ctrmm      ctrmm
00595 #define F77_ctrsm      ctrsm
00596 #define F77_zgemm      zgemm
00597 #define F77_zsymm      zsymm
00598 #define F77_zsyrk      zsyrk
00599 #define F77_zsyr2k     zsyr2k
00600 #define F77_ztrmm      ztrmm
00601 #define F77_ztrsm      ztrsm
00602 #endif
00603 
00604 void F77_xerbla(FCHAR, void *);
00605 
00606 /*
00607  * Level 1 Fortran Prototypes
00608  */
00609 
00610 /* Single Precision */
00611 
00612 void F77_srot(FINT, float *, FINT, float *, FINT, const float *, const float *);
00613 void F77_srotg(float *,float *,float *,float *);
00614 void F77_srotm( FINT, float *, FINT, float *, FINT, const float *);
00615 void F77_srotmg(float *,float *,float *,const float *, float *);
00616 void F77_sswap( FINT, float *, FINT, float *, FINT);
00617 void F77_scopy( FINT, const float *, FINT, float *, FINT);
00618 void F77_saxpy( FINT, const float *, const float *, FINT, float *, FINT);
00619 float F77_sdot(FINT, float*, FINT, float*, FINT);
00620 //   void F77_sdsdot_sub( FINT, const float *, const float *, FINT, const float *, FINT, float *);
00621 void F77_sscal( FINT, const float *, float *, FINT);
00622 float F77_snrm2(FINT, float* , FINT);
00623 float F77_sasum(FINT, float* , FINT);
00624 int F77_isamax(FINT, float* , FINT);
00625 
00626 /* Double Precision */
00627 
00628 void F77_drot(FINT, double *, FINT, double *, FINT, const double *, const double *);
00629 void F77_drotg(double *,double *,double *,double *);
00630 void F77_drotm( FINT, double *, FINT, double *, FINT, const double *);
00631 void F77_drotmg(double *,double *,double *,const double *, double *);
00632 void F77_dswap( FINT, double *, FINT, double *, FINT);
00633 void F77_dcopy( FINT, const double *, FINT, double *, FINT);
00634 void F77_daxpy( FINT, const double *, const double *, FINT, double *, FINT);
00635 void F77_dswap( FINT, double *, FINT, double *, FINT);
00636 //   void F77_dsdot_sub(FINT, const float *, FINT, const float *, FINT, double *);
00637 void F77_dscal( FINT, const double *, double *, FINT);
00638 double F77_ddot(FINT, double*, FINT, double*, FINT);
00639 double F77_dnrm2(FINT, double* , FINT);
00640 double F77_dasum(FINT, double* , FINT);
00641 int F77_idamax(FINT, double* , FINT);
00642 
00643 /* Single Complex Precision */
00644 
00645 //   void F77_cswap( FINT, void *, FINT, void *, FINT);
00646 //   void F77_ccopy( FINT, const void *, FINT, void *, FINT);
00647 //   void F77_caxpy( FINT, const void *, const void *, FINT, void *, FINT);
00648 //   void F77_cswap( FINT, void *, FINT, void *, FINT);
00649 //   void F77_cdotc_sub( FINT, const void *, FINT, const void *, FINT, void *);
00650 //   void F77_cdotu_sub( FINT, const void *, FINT, const void *, FINT, void *);
00651 //   void F77_cscal( FINT, const void *, void *, FINT);
00652 //   void F77_icamax_sub( FINT, const void *, FINT, FINT2);
00653 //   void F77_csscal( FINT, const float *, void *, FINT);
00654 //   void F77_scnrm2_sub( FINT, const void *, FINT, float *);
00655 //   void F77_scasum_sub( FINT, const void *, FINT, float *);
00656 //
00658 //
00659 //   void F77_zswap( FINT, void *, FINT, void *, FINT);
00660 //   void F77_zcopy( FINT, const void *, FINT, void *, FINT);
00661 //   void F77_zaxpy( FINT, const void *, const void *, FINT, void *, FINT);
00662 //   void F77_zswap( FINT, void *, FINT, void *, FINT);
00663 //   void F77_zdotc_sub( FINT, const void *, FINT, const void *, FINT, void *);
00664 //   void F77_zdotu_sub( FINT, const void *, FINT, const void *, FINT, void *);
00665 //   void F77_zdscal( FINT, const double *, void *, FINT);
00666 //   void F77_zscal( FINT, const void *, void *, FINT);
00667 //   void F77_dznrm2_sub( FINT, const void *, FINT, double *);
00668 //   void F77_dzasum_sub( FINT, const void *, FINT, double *);
00669 //   void F77_izamax_sub( FINT, const void *, FINT, FINT2);
00670 
00671 /*
00672  * Level 2 Fortran Prototypes
00673  */
00674 
00675 /* Single Precision */
00676 
00677 void F77_sgemv(FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00678 void F77_sgbmv(FCHAR, FINT, FINT, FINT, FINT, const float *,  const float *, FINT, const float *, FINT, const float *, float *, FINT);
00679 void F77_ssymv(FCHAR, FINT, const float *, const float *, FINT, const float *,  FINT, const float *, float *, FINT);
00680 void F77_ssbmv(FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00681 void F77_sspmv(FCHAR, FINT, const float *, const float *, const float *, FINT, const float *, float *, FINT);
00682 void F77_strmv( FCHAR, FCHAR, FCHAR, FINT, const float *, FINT, float *, FINT);
00683 void F77_stbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, FINT, float *, FINT);
00684 void F77_strsv( FCHAR, FCHAR, FCHAR, FINT, const float *, FINT, float *, FINT);
00685 void F77_stbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, FINT, float *, FINT);
00686 void F77_stpmv( FCHAR, FCHAR, FCHAR, FINT, const float *, float *, FINT);
00687 void F77_stpsv( FCHAR, FCHAR, FCHAR, FINT, const float *, float *, FINT);
00688 void F77_sger( FINT, FINT, const float *, const float *, FINT, const float *, FINT, float *, FINT);
00689 void F77_ssyr(FCHAR, FINT, const float *, const float *, FINT, float *, FINT);
00690 void F77_sspr(FCHAR, FINT, const float *, const float *, FINT, float *);
00691 void F77_sspr2(FCHAR, FINT, const float *, const float *, FINT, const float *, FINT,  float *);
00692 void F77_ssyr2(FCHAR, FINT, const float *, const float *, FINT, const float *, FINT,  float *, FINT);
00693 
00694 /* Double Precision */
00695 
00696 void F77_dgemv(FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00697 void F77_dgbmv(FCHAR, FINT, FINT, FINT, FINT, const double *,  const double *, FINT, const double *, FINT, const double *, double *, FINT);
00698 void F77_dsymv(FCHAR, FINT, const double *, const double *, FINT, const double *,  FINT, const double *, double *, FINT);
00699 void F77_dsbmv(FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00700 void F77_dspmv(FCHAR, FINT, const double *, const double *, const double *, FINT, const double *, double *, FINT);
00701 void F77_dtrmv( FCHAR, FCHAR, FCHAR, FINT, const double *, FINT, double *, FINT);
00702 void F77_dtbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, FINT, double *, FINT);
00703 void F77_dtrsv( FCHAR, FCHAR, FCHAR, FINT, const double *, FINT, double *, FINT);
00704 void F77_dtbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, FINT, double *, FINT);
00705 void F77_dtpmv( FCHAR, FCHAR, FCHAR, FINT, const double *, double *, FINT);
00706 void F77_dtpsv( FCHAR, FCHAR, FCHAR, FINT, const double *, double *, FINT);
00707 void F77_dger( FINT, FINT, const double *, const double *, FINT, const double *, FINT, double *, FINT);
00708 void F77_dsyr(FCHAR, FINT, const double *, const double *, FINT, double *, FINT);
00709 void F77_dspr(FCHAR, FINT, const double *, const double *, FINT, double *);
00710 void F77_dspr2(FCHAR, FINT, const double *, const double *, FINT, const double *, FINT,  double *);
00711 void F77_dsyr2(FCHAR, FINT, const double *, const double *, FINT, const double *, FINT,  double *, FINT);
00712 
00714 //
00715 //   void F77_cgemv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT);
00716 //   void F77_cgbmv(FCHAR, FINT, FINT, FINT, FINT, const void *,  const void *, FINT, const void *, FINT, const void *, void *, FINT);
00717 //   void F77_chemv(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT);
00718 //   void F77_chbmv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT);
00719 //   void F77_chpmv(FCHAR, FINT, const void *, const void *, const void *, FINT, const void *, void *, FINT);
00720 //   void F77_ctrmv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT);
00721 //   void F77_ctbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT);
00722 //   void F77_ctpmv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *, FINT);
00723 //   void F77_ctrsv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT);
00724 //   void F77_ctbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT);
00725 //   void F77_ctpsv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *,FINT);
00726 //   void F77_cgerc( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT);
00727 //   void F77_cgeru( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *,  FINT);
00728 //   void F77_cher(FCHAR, FINT, const float *, const void *, FINT, void *, FINT);
00729 //   void F77_cher2(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT);
00730 //   void F77_chpr(FCHAR, FINT, const float *, const void *, FINT, void *);
00731 //   void F77_chpr2(FCHAR, FINT, const float *, const void *, FINT, const void *, FINT, void *);
00732 //
00734 //
00735 //   void F77_zgemv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT);
00736 //   void F77_zgbmv(FCHAR, FINT, FINT, FINT, FINT, const void *,  const void *, FINT, const void *, FINT, const void *, void *, FINT);
00737 //   void F77_zhemv(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT);
00738 //   void F77_zhbmv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT);
00739 //   void F77_zhpmv(FCHAR, FINT, const void *, const void *, const void *, FINT, const void *, void *, FINT);
00740 //   void F77_ztrmv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT);
00741 //   void F77_ztbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT);
00742 //   void F77_ztpmv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *, FINT);
00743 //   void F77_ztrsv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT);
00744 //   void F77_ztbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT);
00745 //   void F77_ztpsv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *,FINT);
00746 //   void F77_zgerc( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT);
00747 //   void F77_zgeru( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *,  FINT);
00748 //   void F77_zher(FCHAR, FINT, const double *, const void *, FINT, void *, FINT);
00749 //   void F77_zher2(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT);
00750 //   void F77_zhpr(FCHAR, FINT, const double *, const void *, FINT, void *);
00751 //   void F77_zhpr2(FCHAR, FINT, const double *, const void *, FINT, const void *, FINT, void *);
00752 
00753 /*
00754  * Level 3 Fortran Prototypes
00755  */
00756 
00757 /* Single Precision */
00758 
00759 void F77_sgemm(FCHAR, FCHAR, FINT, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00760 void F77_ssymm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00761 void F77_ssyrk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT);
00762 void F77_ssyr2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00763 void F77_strmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT);
00764 void F77_strsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT);
00765 
00766 /* Double Precision */
00767 
00768 void F77_dgemm(FCHAR, FCHAR, FINT, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00769 void F77_dsymm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00770 void F77_dsyrk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT);
00771 void F77_dsyr2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00772 void F77_dtrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT);
00773 void F77_dtrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT);
00774 
00776 //
00777 //   void F77_cgemm(FCHAR, FCHAR, FINT, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00778 //   void F77_csymm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00779 //   void F77_chemm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00780 //   void F77_csyrk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT);
00781 //   void F77_cherk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT);
00782 //   void F77_csyr2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00783 //   void F77_cher2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT);
00784 //   void F77_ctrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT);
00785 //   void F77_ctrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT);
00786 //
00788 //
00789 //   void F77_zgemm(FCHAR, FCHAR, FINT, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00790 //   void F77_zsymm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00791 //   void F77_zhemm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00792 //   void F77_zsyrk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT);
00793 //   void F77_zherk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT);
00794 //   void F77_zsyr2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00795 //   void F77_zher2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT);
00796 //   void F77_ztrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT);
00797 //   void F77_ztrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT);
00798 
00799 #ifdef __cplusplus
00800 }
00801 #endif
00802 
00803 // TODO: decide what to do with this
00804 //enum COMPUTE_UNIT
00805 //{
00806 //    /*lama_noCompute = 0,*/lama_compute_with_cpu = 1, lama_compute_with_gpu = 2,
00807 //    lama_compute_mixed_nvidia = 3
00808 //};
00809 
00810 namespace lama
00811 {
00812 
00813 class BLASHelper
00814 {
00815 public:
00816     void cblas_xerbla(int p, const char *rout, const char *form, ...);
00817     //    void setComputeUnit(enum COMPUTE_UNIT unit);
00818     //    enum COMPUTE_UNIT getComputeUnit();
00819 
00820     static void XERBLA_cpu(
00821         int RowMajorStrg,
00822         int info,
00823         const char *rout,
00824         const char *form,
00825         ...);
00826 };
00827 
00828 /*
00829  * Converts a floatPointerPointer to a voidPointerPointer without emmiting a Compiler warning.
00830  * Results in the same operation as casting to a void Pointer( tested on gcc 4.6.0(20110429) with -O3).
00831  * There is a little Overhead in the unoptimized version. But that shouldn't matter in a debug build.
00832  */
00833 LAMA_STATIC_INLINE_FUNCTION_PREFIX void** lama_sToVoidPtr( float** floatPointer )
00834 {
00835     union {
00836         float** fpp;
00837         void** vpp;
00838     } convert;
00839     convert.fpp = floatPointer;
00840     return convert.vpp;
00841 }
00842 
00843 /*
00844  * Converts a doublePointerPointer to a voidPointerPointer without emmiting a Compiler warning.
00845  * Results in the same operation as casting to a void Pointer( tested on gcc 4.6.0(20110429) with -O3).
00846  * There is a little Overhead in the unoptimized version. But that shouldn't matter in a debug build.
00847  */
00848 LAMA_STATIC_INLINE_FUNCTION_PREFIX void** lama_dToVoidPtr(double** doublePointer){
00849     union {
00850         double** dpp;
00851         void** vpp;
00852     } convert;
00853     convert.dpp = doublePointer;
00854     return convert.vpp;
00855 }
00856 
00857 } /* namespace lama */
00858 
00859 #endif // LAMA_BLASHELPER_HPP_