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