libflame  revision_anchor
blis_macro_defs.h
Go to the documentation of this file.
00001 /*
00002 
00003     Copyright (C) 2014, The University of Texas at Austin
00004 
00005     This file is part of libflame and is available under the 3-Clause
00006     BSD license, which can be found in the LICENSE file at the top-level
00007     directory, or at http://opensource.org/licenses/BSD-3-Clause
00008 
00009 */
00010 
00011 #ifndef BLIS1_MACRO_DEFS_H
00012 #define BLIS1_MACRO_DEFS_H
00013 
00014 // --- Constants ---------------------------------------------------------------
00015 
00016 #define BLIS1_NO_INTRINSICS  0
00017 #define BLIS1_SSE_INTRINSICS 3
00018 
00019 // --- boolean ---
00020 
00021 #undef FALSE
00022 #define FALSE 0
00023 
00024 #undef TRUE
00025 #define TRUE 1
00026 
00027 /*
00028 // --- trans ---
00029 
00030 #define BLIS1_NO_TRANSPOSE      'n'
00031 #define BLIS1_TRANSPOSE         't'
00032 #define BLIS1_CONJ_NO_TRANSPOSE 'c'
00033 #define BLIS1_CONJ_TRANSPOSE    'h'
00034 
00035 // --- conj ---
00036 
00037 #define BLIS1_NO_CONJUGATE      'n'
00038 #define BLIS1_CONJUGATE         'c'
00039 
00040 // --- uplo ---
00041 
00042 #define BLIS1_LOWER_TRIANGULAR  'l'
00043 #define BLIS1_UPPER_TRIANGULAR  'u'
00044 
00045 // --- side ---
00046 
00047 #define BLIS1_LEFT              'l'
00048 #define BLIS1_RIGHT             'r'
00049 
00050 // --- diag ---
00051 
00052 #define BLIS1_NONUNIT_DIAG      'n'
00053 #define BLIS1_UNIT_DIAG         'u'
00054 #define BLIS1_ZERO_DIAG         'z'
00055 */
00056 
00057 // --- Functional macros -------------------------------------------------------
00058 
00059 // --- Type-agnostic ---
00060 
00061 // min, max, abs
00062 
00063 #define bl1_min( a, b )  ( (a) < (b) ? (a) : (b) )
00064 #define bl1_max( a, b )  ( (a) > (b) ? (a) : (b) )
00065 #define bl1_abs( a )     ( (a) <= 0 ? -(a) : (a) )
00066 
00067 // fmin, fmax, fabs
00068 
00069 #define bl1_fmin( a, b ) bl1_min( a, b )
00070 #define bl1_fmax( a, b ) bl1_max( a, b )
00071 #define bl1_fabs( a )    ( (a) <= 0.0 ? -(a) : (a) )
00072 
00073 // fminabs, fmaxabs
00074 #define bl1_fminabs( a, b ) \
00075 \
00076     bl1_fmin( bl1_fabs( a ), \
00077               bl1_fabs( b ) )
00078 
00079 #define bl1_fmaxabs( a, b ) \
00080 \
00081     bl1_fmax( bl1_fabs( a ), \
00082               bl1_fabs( b ) )
00083 
00084 // --- Type-dependent ---
00085 
00086 // --- neg1 ---
00087 
00088 // void bl1_sneg1( float* x );
00089 #define bl1_sneg1( x ) \
00090 *(x)     *= -1.0F;
00091 
00092 // void bl1_dneg1( double* x );
00093 #define bl1_dneg1( x ) \
00094 *(x)     *= -1.0;
00095 
00096 // void bl1_cneg1( scomplex* x );
00097 #define bl1_cneg1( x ) \
00098 (x)->real *= -1.0F; \
00099 (x)->imag *= -1.0F;
00100 
00101 // void bl1_zneg1( dcomplex* x );
00102 #define bl1_zneg1( x ) \
00103 (x)->real *= -1.0; \
00104 (x)->imag *= -1.0;
00105 
00106 // --- neg2 ---
00107 
00108 // void bl1_sneg2( float* x, float* y );
00109 #define bl1_sneg2( x, y ) \
00110 *(y)      = -1.0F * *(x);
00111 
00112 // void bl1_dneg2( double* x, double* y );
00113 #define bl1_dneg2( x, y ) \
00114 *(y)      = -1.0  * *(x);
00115 
00116 // void bl1_cneg2( scomplex* x, scomplex* y );
00117 #define bl1_cneg2( x, y ) \
00118 (y)->real = -1.0F * (x)->real; \
00119 (y)->imag = -1.0F * (x)->imag;
00120 
00121 // void bl1_zneg2( dcomplex* x, dcomplex* y );
00122 #define bl1_zneg2( x, y ) \
00123 (y)->real = -1.0  * (x)->real; \
00124 (y)->imag = -1.0  * (x)->imag;
00125 
00126 // --- sqrte ---
00127 
00128 // void bl1_ssqrte( float* alpha, int* error );
00129 #define bl1_ssqrte( alpha, error ) \
00130 if ( *(alpha)      <= 0.0F || isnan( *(alpha) ) ) {  *(error) = FLA_FAILURE; } \
00131 else { *(alpha)      =  ( float ) sqrt( *(alpha) );  *(error) = FLA_SUCCESS; }
00132 
00133 // void bl1_dsqrte( double* alpha, int* error );
00134 #define bl1_dsqrte( alpha, error ) \
00135 if ( *(alpha)      <= 0.0 || isnan( *(alpha) ) ) {   *(error) = FLA_FAILURE; } \
00136 else { *(alpha)      = ( double ) sqrt( *(alpha) );  *(error) = FLA_SUCCESS; }
00137 
00138 // void bl1_csqrte( scomplex* alpha, int* error );
00139 #define bl1_csqrte( alpha, error ) \
00140 if ( (alpha)->real <= 0.0F || isnan( (alpha)->real) ) \
00141 {                     *(error) = FLA_FAILURE; } \
00142 else { \
00143 (alpha)->real =  ( float ) sqrt( (alpha)->real ); \
00144 (alpha)->imag = 0.0F; *(error) = FLA_SUCCESS; }
00145 
00146 // void bl1_zsqrte( dcomplex* alpha, int* error );
00147 #define bl1_zsqrte( alpha, error ) \
00148 if ( (alpha)->real <= 0.0 || isnan( (alpha)->real) )  \
00149 {                     *(error) = FLA_FAILURE; } \
00150 else { \
00151 (alpha)->real = ( double ) sqrt( (alpha)->real ); \
00152 (alpha)->imag = 0.0;  *(error) = FLA_SUCCESS; }
00153 
00154 // --- absval2 ---
00155 
00156 // void bl1_sabsval2( float* alpha, float* absval );
00157 #define bl1_sabsval2( alpha, absval ) \
00158 *(absval) = ( float ) fabs( ( double ) *(alpha) );
00159 
00160 // void bl1_dabsval2( double* alpha, double* absval );
00161 #define bl1_dabsval2( alpha, absval ) \
00162 *(absval) = fabs( *(alpha) );
00163 
00164 // void bl1_cabsval2( scomplex* x, scomplex* a );
00165 #define bl1_cabsval2( x, a ) \
00166 { \
00167     float  s   = bl1_fmaxabs( (x)->real, (x)->imag ); \
00168     float  mag = sqrtf( s ) * \
00169                  sqrtf( ( (x)->real / s ) * (x)->real + \
00170                         ( (x)->imag / s ) * (x)->imag ); \
00171     (a)->real   = mag; \
00172     (a)->imag   = 0.0F; \
00173 }
00174 
00175 // void bl1_csabsval2( scomplex* x, float* a );
00176 #define bl1_csabsval2( x, a ) \
00177 { \
00178     float  s   = bl1_fmaxabs( (x)->real, (x)->imag ); \
00179     float  mag = sqrtf( s ) * \
00180                  sqrtf( ( (x)->real / s ) * (x)->real + \
00181                         ( (x)->imag / s ) * (x)->imag ); \
00182     *(a)       = mag; \
00183 }
00184 
00185 // void bl1_zabsval2( dcomplex* x, dcomplex* a );
00186 #define bl1_zabsval2( x, a ) \
00187 { \
00188     double s   = bl1_fmaxabs( (x)->real, (x)->imag ); \
00189     double mag = sqrt( s ) * \
00190                  sqrt( ( (x)->real / s ) * (x)->real + \
00191                        ( (x)->imag / s ) * (x)->imag ); \
00192     (a)->real   = mag; \
00193     (a)->imag   = 0.0; \
00194 }
00195 
00196 // void bl1_zdabsval2( dcomplex* x, double* a );
00197 #define bl1_zdabsval2( x, a ) \
00198 { \
00199     double s   = bl1_fmaxabs( (x)->real, (x)->imag ); \
00200     double mag = sqrt( s ) * \
00201                  sqrt( ( (x)->real / s ) * (x)->real + \
00202                        ( (x)->imag / s ) * (x)->imag ); \
00203     *(a)       = mag; \
00204 }
00205 
00206 
00207 // --- absqr ---
00208 
00209 // void bl1_sabsqr( float* alpha );
00210 #define bl1_sabsqr( alpha ) \
00211 *(alpha) = *(alpha) * *(alpha);
00212 
00213 // void bl1_dabsqr( double* alpha );
00214 #define bl1_dabsqr( alpha ) \
00215 *(alpha) = *(alpha) * *(alpha);
00216 
00217 // void bl1_cabsqr( scomplex* alpha );
00218 #define bl1_cabsqr( alpha ) \
00219 (alpha)->real = (alpha)->real * (alpha)->real + (alpha)->imag * (alpha)->imag; \
00220 (alpha)->imag = 0.0F;
00221 
00222 // void bl1_zabsqr( dcomplex* alpha );
00223 #define bl1_zabsqr( alpha ) \
00224 (alpha)->real = (alpha)->real * (alpha)->real + (alpha)->imag * (alpha)->imag; \
00225 (alpha)->imag = 0.0;
00226 
00227 // --- invscals ---
00228 
00229 // void bl1_sinvscals( float* a, float* y );
00230 #define bl1_sinvscals( a, y ) \
00231 *(y) = *(y) / *(a);
00232 
00233 // void bl1_dinvscals( double* a, double* y );
00234 #define bl1_dinvscals( a, y ) \
00235 *(y) = *(y) / *(a);
00236 
00237 // void bl1_csinvscals( float* a, scomplex* y );
00238 #define bl1_csinvscals( a, y ) \
00239 { \
00240 (y)->real = (y)->real / *(a); \
00241 (y)->imag = (y)->imag / *(a); \
00242 }
00243 
00244 // void bl1_cinvscals( scomplex* a, scomplex* y );
00245 #define bl1_cinvscals( a, y ) \
00246 { \
00247     float  s     = bl1_fmaxabs( (a)->real, (a)->imag ); \
00248     float  ar_s  = (a)->real / s; \
00249     float  ai_s  = (a)->imag / s; \
00250     float  yrt   = (y)->real; \
00251     float  temp  = ( ar_s * (a)->real + ai_s * (a)->imag ); \
00252     (y)->real    = ( (yrt)     * ar_s + (y)->imag * ai_s ) / temp; \
00253     (y)->imag    = ( (y)->imag * ar_s - (yrt)     * ai_s ) / temp; \
00254 }
00255 
00256 // void bl1_zdinvscals( double* a, dcomplex* y );
00257 #define bl1_zdinvscals( a, y ) \
00258 { \
00259 (y)->real = (y)->real / *(a); \
00260 (y)->imag = (y)->imag / *(a); \
00261 }
00262 
00263 // void bl1_zinvscals( dcomplex* a, dcomplex* y );
00264 #define bl1_zinvscals( a, y ) \
00265 { \
00266     double s     = bl1_fmaxabs( (a)->real, (a)->imag ); \
00267     double ar_s  = (a)->real / s; \
00268     double ai_s  = (a)->imag / s; \
00269     double yrt   = (y)->real; \
00270     double temp  = ( ar_s * (a)->real + ai_s * (a)->imag ); \
00271     (y)->real    = ( (yrt)     * ar_s + (y)->imag * ai_s ) / temp; \
00272     (y)->imag    = ( (y)->imag * ar_s - (yrt)     * ai_s ) / temp; \
00273 }
00274 
00275 // --- div3 ---
00276 
00277 // void bl1_sdiv3( float* x, float* y, float* a );
00278 #define bl1_sdiv3( x, y, a ) \
00279 *(a) = *(x) / *(y);
00280 
00281 // void bl1_ddiv3( double* x, double* y, double* a );
00282 #define bl1_ddiv3( x, y, a ) \
00283 *(a) = *(x) / *(y);
00284 
00285 // void bl1_cdiv3( scomplex* x, scomplex* y, scomplex* a );
00286 // a = x / y;
00287 #define bl1_cdiv3( x, y, a ) \
00288 { \
00289     *a = *x; \
00290     bl1_cinvscals( y, a ); \
00291 }
00292 
00293 // void bl1_zdiv3( dcomplex* x, dcomplex* y, dcomplex* a );
00294 #define bl1_zdiv3( x, y, a ) \
00295 { \
00296     *a = *x; \
00297     bl1_zinvscals( y, a ); \
00298 }
00299 
00300 // --- add3 ---
00301 
00302 // void bl1_sadd3( float* x, float* y, float* a );
00303 #define bl1_sadd3( x, y, a ) \
00304 *(a) = *(x) + *(y);
00305 
00306 // void bl1_dadd3( double* x, double* y, double* a );
00307 #define bl1_dadd3( x, y, a ) \
00308 *(a) = *(x) + *(y);
00309 
00310 // void bl1_cadd3( scomplex* x, scomplex* y, scomplex* a );
00311 #define bl1_cadd3( x, y, a ) \
00312 { \
00313 (a)->real = (x)->real + (y)->real; \
00314 (a)->imag = (x)->imag + (y)->imag; \
00315 }
00316 
00317 // void bl1_zadd3( dcomplex* x, dcomplex* y, dcomplex* a );
00318 #define bl1_zadd3( x, y, a ) \
00319 { \
00320 (a)->real = (x)->real + (y)->real; \
00321 (a)->imag = (x)->imag + (y)->imag; \
00322 }
00323 
00324 // --- copys ---
00325 
00326 // void bl1_scopys( conj1_t conj, float* x, float* y );
00327 #define bl1_scopys( conj, x, y ) \
00328 *(y) = *(x);
00329 
00330 // void bl1_dcopys( conj1_t conj, double* x, double* y );
00331 #define bl1_dcopys( conj, x, y ) \
00332 *(y) = *(x);
00333 
00334 // void bl1_ccopys( conj1_t conj, scomplex* x, scomplex* y );
00335 #define bl1_ccopys( conj, x, y ) \
00336 *(y) = *(x); \
00337 if ( bl1_is_conj( conj ) ) (y)->imag *= -1.0F;
00338 
00339 // void bl1_zcopys( conj1_t conj, dcomplex* x, dcomplex* y );
00340 #define bl1_zcopys( conj, x, y ) \
00341 *(y) = *(x); \
00342 if ( bl1_is_conj( conj ) ) (y)->imag *= -1.0;
00343 
00344 // --- scals ---
00345 
00346 // void bl1_sscals( float* a, float* y );
00347 #define bl1_sscals( a, y ) \
00348 *(y) = *(a) * *(y);
00349 
00350 // void bl1_dscals( double* a, double* y );
00351 #define bl1_dscals( a, y ) \
00352 *(y) = *(a) * *(y);
00353 
00354 // void bl1_csscals( float* a, scomplex* y );
00355 #define bl1_csscals( a, y ) \
00356 { \
00357 (y)->real = *(a) * (y)->real; \
00358 (y)->imag = *(a) * (y)->imag; \
00359 }
00360 
00361 // void bl1_cscals( scomplex* a, scomplex* y );
00362 #define bl1_cscals( a, y ) \
00363 { \
00364 float tempr = (a)->real * (y)->real - (a)->imag * (y)->imag; \
00365 float tempi = (a)->imag * (y)->real + (a)->real * (y)->imag; \
00366 (y)->real = tempr; \
00367 (y)->imag = tempi; \
00368 }
00369 
00370 // void bl1_zdscals( double* a, dcomplex* y );
00371 #define bl1_zdscals( a, y ) \
00372 { \
00373 (y)->real = *(a) * (y)->real; \
00374 (y)->imag = *(a) * (y)->imag; \
00375 }
00376 
00377 // void bl1_zscals( dcomplex* a, dcomplex* y );
00378 #define bl1_zscals( a, y ) \
00379 { \
00380 double tempr = (a)->real * (y)->real - (a)->imag * (y)->imag; \
00381 double tempi = (a)->imag * (y)->real + (a)->real * (y)->imag; \
00382 (y)->real = tempr; \
00383 (y)->imag = tempi; \
00384 }
00385 
00386 // --- mult3 ---
00387 
00388 // void bl1_smult3( float* x, float* y, float* a );
00389 #define bl1_smult3( x, y, a ) \
00390 *(a) = *(x) * *(y);
00391 
00392 // void bl1_dmult3( double* x, double* y, double* a );
00393 #define bl1_dmult3( x, y, a ) \
00394 *(a) = *(x) * *(y);
00395 
00396 // void bl1_cmult3( scomplex* x, scomplex* y, scomplex* a );
00397 #define bl1_cmult3( x, y, a ) \
00398 { \
00399 float tempr = (x)->real * (y)->real - (x)->imag * (y)->imag; \
00400 float tempi = (x)->imag * (y)->real + (x)->real * (y)->imag; \
00401 (a)->real = tempr; \
00402 (a)->imag = tempi; \
00403 }
00404 
00405 // void bl1_zmult3( dcomplex* x, dcomplex* y, dcomplex* a );
00406 #define bl1_zmult3( x, y, a ) \
00407 { \
00408 double tempr = (x)->real * (y)->real - (x)->imag * (y)->imag; \
00409 double tempi = (x)->imag * (y)->real + (x)->real * (y)->imag; \
00410 (a)->real = tempr; \
00411 (a)->imag = tempi; \
00412 }
00413 
00414 // --- mult4 ---
00415 
00416 // void bl1_smult4( float* alpha, float* x, float* y1, float* y2 );
00417 #define bl1_smult4( alpha, x, y1, y2 ) \
00418 *(y2) = *(y1) + *(alpha) * *(x);
00419 
00420 // void bl1_dmult4( double* alpha, double* x, double* y1, double* y2 );
00421 #define bl1_dmult4( alpha, x, y1, y2 ) \
00422 *(y2) = *(y1) + *(alpha) * *(x);
00423 
00424 // void bl1_cmult4( scomplex* alpha, scomplex* x, scomplex* y1, scomplex* y2 );
00425 #define bl1_cmult4( alpha, x, y1, y2 ) \
00426 { \
00427 (y2)->real = (y1)->real + (alpha)->real * (x)->real - (alpha)->imag * (x)->imag; \
00428 (y2)->imag = (y1)->imag + (alpha)->imag * (x)->real + (alpha)->real * (x)->imag; \
00429 }
00430 
00431 // void bl1_zmult4( dcomplex* alpha, dcomplex* x, dcomplex* y1, dcomplex* y2 );
00432 #define bl1_zmult4( alpha, x, y1, y2 ) \
00433 { \
00434 (y2)->real = (y1)->real + (alpha)->real * (x)->real - (alpha)->imag * (x)->imag; \
00435 (y2)->imag = (y1)->imag + (alpha)->imag * (x)->real + (alpha)->real * (x)->imag; \
00436 }
00437 
00438 // --- conjs ---
00439 
00440 // void bl1_sconjs( float* a );
00441 #define bl1_sconjs( a ) \
00442 ;
00443 
00444 // void bl1_dconjs( double* a );
00445 #define bl1_dconjs( a ) \
00446 ;
00447 
00448 // void bl1_cconjs( scomplex* a );
00449 #define bl1_cconjs( a ) \
00450 (a)->imag *= -1.0F;
00451 
00452 // void bl1_zconjs( dcomplex* a );
00453 #define bl1_zconjs( a ) \
00454 (a)->imag *= -1.0;
00455 
00456 // --- copyconj ---
00457 
00458 // void bl1_scopyconj( float* x, float* y );
00459 #define bl1_scopyconj( x, y ) \
00460 *(y) = *(x);
00461 
00462 // void bl1_dcopyconj( double* x, double* y );
00463 #define bl1_dcopyconj( x, y ) \
00464 *(y) = *(x);
00465 
00466 // void bl1_ccopyconj( scomplex* x, scomplex* y );
00467 #define bl1_ccopyconj( x, y ) \
00468 (y)->real =         (x)->real; \
00469 (y)->imag = -1.0F * (x)->imag;
00470 
00471 // void bl1_zcopyconj( dcomplex* x, dcomplex* y );
00472 #define bl1_zcopyconj( x, y ) \
00473 (y)->real =         (x)->real; \
00474 (y)->imag = -1.0  * (x)->imag;
00475 
00476 // --- eq1 ---
00477 
00478 // void bl1_seq1( float* alpha );
00479 #define bl1_seq1( alpha ) \
00480   ( *alpha == 1.0F )
00481 
00482 // void bl1_deq1( double* alpha );
00483 #define bl1_deq1( alpha ) \
00484   ( *alpha == 1.0 )
00485 
00486 // void bl1_ceq1( scomplex* alpha );
00487 #define bl1_ceq1( alpha ) \
00488   ( (alpha)->real == 1.0F && (alpha)->imag == 0.0F )
00489 
00490 // void bl1_zeq1( dcomplex* alpha );
00491 #define bl1_zeq1( alpha ) \
00492   ( (alpha)->real == 1.0 && (alpha)->imag == 0.0 )
00493 
00494 // --- Swapping/toggle macros --------------------------------------------------
00495 
00496 // --- swap_pointers ---
00497 
00498 #define bl1_sswap_pointers( a, b ) \
00499 { \
00500 float* temp = (a); \
00501 (a) = (b); \
00502 (b) = temp; \
00503 }
00504 
00505 #define bl1_dswap_pointers( a, b ) \
00506 { \
00507 double* temp = (a); \
00508 (a) = (b); \
00509 (b) = temp; \
00510 }
00511 
00512 #define bl1_cswap_pointers( a, b ) \
00513 { \
00514 void* temp = (a); \
00515 (a) = (b); \
00516 (b) = temp; \
00517 }
00518 
00519 #define bl1_zswap_pointers( a, b ) \
00520 { \
00521 void* temp = (a); \
00522 (a) = (b); \
00523 (b) = temp; \
00524 }
00525 
00526 // --- swap_ints ---
00527 
00528 #define bl1_swap_ints( a, b ) \
00529 { \
00530 int temp = (a); \
00531 (a) = (b); \
00532 (b) = temp; \
00533 }
00534 
00535 // --- swap_trans ---
00536 
00537 #define bl1_swap_trans( a, b ) \
00538 { \
00539 trans1_t temp = (a); \
00540 (a) = (b); \
00541 (b) = temp; \
00542 }
00543 
00544 // --- swap_conj ---
00545 
00546 #define bl1_swap_conj( a, b ) \
00547 { \
00548 conj1_t temp = (a); \
00549 (a) = (b); \
00550 (b) = temp; \
00551 }
00552 
00553 // --- toggle_side ---
00554 
00555 #define bl1_toggle_side( side ) \
00556 { \
00557 if ( bl1_is_left( side ) ) side = BLIS1_RIGHT; \
00558 else                       side = BLIS1_LEFT; \
00559 }
00560 
00561 // --- toggle_uplo ---
00562 
00563 #define bl1_toggle_uplo( uplo ) \
00564 { \
00565 if ( bl1_is_lower( uplo ) ) uplo = BLIS1_UPPER_TRIANGULAR; \
00566 else                        uplo = BLIS1_LOWER_TRIANGULAR; \
00567 }
00568 
00569 // --- toggle_trans ---
00570 #define bl1_toggle_trans( trans ) \
00571 { \
00572 if      ( bl1_is_notrans( trans ) )     trans = BLIS1_TRANSPOSE; \
00573 else if ( bl1_is_trans( trans ) )       trans = BLIS1_NO_TRANSPOSE; \
00574 else if ( bl1_is_conjnotrans( trans ) ) trans = BLIS1_CONJ_TRANSPOSE; \
00575 else                                    trans = BLIS1_CONJ_NO_TRANSPOSE; \
00576 }
00577 
00578 // --- toggle_conjtrans ---
00579 #define bl1_toggle_conjtrans( trans ) \
00580 { \
00581 if      ( bl1_is_notrans( trans ) )     trans = BLIS1_CONJ_TRANSPOSE; \
00582 else                                    trans = BLIS1_NO_TRANSPOSE; \
00583 }
00584 
00585 // --- toggle_conj ---
00586 
00587 #define bl1_toggle_conj( conj ) \
00588 { \
00589 if ( bl1_is_conj( conj ) ) conj = BLIS1_NO_CONJUGATE; \
00590 else                       conj = BLIS1_CONJUGATE; \
00591 }
00592 
00593 #endif // #ifndef BLIS1_MACRO_DEFS_H