Added support for C99 complex types/arithmetic.

Details:
- Added support for C99 complex types to bli_type_defs.h and overloaded
  complex arithmetic to the scalar-level macros in include/level0. This
  includes a somewhat substantial reorganization and re-layering of much
  of the existing machinery present in the level0 macros.
- Added new #define for BLIS_ENABLE_C99_COMPLEX to bli_config.h files,
  commented-out by default, which optionally enables the use of built-in
  C99 complex types and arithmetic.
- Minor changes to clarksville and reference configs' make_defs.mk files.
- Removed macro definitions from bli_param_macro_defs.h which was not being
  used (bli_proj_dt_to_real_if_imag_eq0).
This commit is contained in:
Field G. Van Zee
2013-07-18 17:53:31 -05:00
parent 6072d7c848
commit 4e80ad28c9
52 changed files with 4440 additions and 3521 deletions

View File

@@ -41,107 +41,120 @@
// - The first char encodes the type of a.
// - The second char encodes the type of x.
#define bli_ssscals( a, x ) \
{ \
(x) *= ( float ) (a); \
(x) = bli_ssimulnn_r( (a), (x) ); \
}
#define bli_dsscals( a, x ) \
{ \
(x) *= ( float ) (a); \
(x) = bli_dsimulnn_r( (a), (x) ); \
}
#define bli_csscals( a, x ) \
{ \
(x) *= ( float ) (a).real; \
(x) = bli_csimulnn_r( (a), (x) ); \
}
#define bli_zsscals( a, x ) \
{ \
(x) *= ( float ) (a).real; \
(x) = bli_zsimulnn_r( (a), (x) ); \
}
#define bli_sdscals( a, x ) \
{ \
(x) *= ( double ) (a); \
(x) = bli_sdimulnn_r( (a), (x) ); \
}
#define bli_ddscals( a, x ) \
{ \
(x) *= ( double ) (a); \
(x) = bli_ddimulnn_r( (a), (x) ); \
}
#define bli_cdscals( a, x ) \
{ \
(x) *= ( double ) (a).real; \
(x) = bli_cdimulnn_r( (a), (x) ); \
}
#define bli_zdscals( a, x ) \
{ \
(x) *= ( double ) (a).real; \
(x) = bli_zdimulnn_r( (a), (x) ); \
}
#ifndef BLIS_ENABLE_C99_COMPLEX
#define bli_scscals( a, x ) \
{ \
(x).real *= ( float ) (a); \
(x).imag *= ( float ) (a); \
bli_creal(x) = bli_scimulnn_r( (a), (x) ); \
bli_cimag(x) = bli_scimulnn_i( (a), (x) ); \
}
#define bli_dcscals( a, x ) \
{ \
(x).real *= ( float ) (a); \
(x).imag *= ( float ) (a); \
bli_creal(x) = bli_dcimulnn_r( (a), (x) ); \
bli_cimag(x) = bli_dcimulnn_i( (a), (x) ); \
}
#define bli_ccscals( a, x ) \
{ \
float tempr = ( float ) (a).real * (x).real - ( float ) (a).imag * (x).imag; \
float tempi = ( float ) (a).real * (x).imag + ( float ) (a).imag * (x).real; \
(x).real = tempr; \
(x).imag = tempi; \
float tempr = bli_ccimulnn_r( (a), (x) ); \
float tempi = bli_ccimulnn_i( (a), (x) ); \
bli_creal(x) = tempr; \
bli_cimag(x) = tempi; \
}
#define bli_zcscals( a, x ) \
{ \
float tempr = ( float ) (a).real * (x).real - ( float ) (a).imag * (x).imag; \
float tempi = ( float ) (a).real * (x).imag + ( float ) (a).imag * (x).real; \
(x).real = tempr; \
(x).imag = tempi; \
float tempr = bli_zcimulnn_r( (a), (x) ); \
float tempi = bli_zcimulnn_i( (a), (x) ); \
bli_creal(x) = tempr; \
bli_cimag(x) = tempi; \
}
#define bli_szscals( a, x ) \
{ \
(x).real *= ( double ) (a); \
(x).imag *= ( double ) (a); \
bli_zreal(x) = bli_szimulnn_r( (a), (x) ); \
bli_zimag(x) = bli_szimulnn_i( (a), (x) ); \
}
#define bli_dzscals( a, x ) \
{ \
(x).real *= ( double ) (a); \
(x).imag *= ( double ) (a); \
bli_zreal(x) = bli_dzimulnn_r( (a), (x) ); \
bli_zimag(x) = bli_dzimulnn_i( (a), (x) ); \
}
#define bli_czscals( a, x ) \
{ \
double tempr = ( double ) (a).real * (x).real - ( double ) (a).imag * (x).imag; \
double tempi = ( double ) (a).real * (x).imag + ( double ) (a).imag * (x).real; \
(x).real = tempr; \
(x).imag = tempi; \
double tempr = bli_czimulnn_r( (a), (x) ); \
double tempi = bli_czimulnn_i( (a), (x) ); \
bli_zreal(x) = tempr; \
bli_zimag(x) = tempi; \
}
#define bli_zzscals( a, x ) \
{ \
double tempr = ( double ) (a).real * (x).real - ( double ) (a).imag * (x).imag; \
double tempi = ( double ) (a).real * (x).imag + ( double ) (a).imag * (x).real; \
(x).real = tempr; \
(x).imag = tempi; \
double tempr = bli_zzimulnn_r( (a), (x) ); \
double tempi = bli_zzimulnn_i( (a), (x) ); \
bli_zreal(x) = tempr; \
bli_zimag(x) = tempi; \
}
#define bli_sscals( a, x ) \
{ \
bli_ssscals( a, x ); \
}
#define bli_dscals( a, x ) \
{ \
bli_ddscals( a, x ); \
}
#define bli_cscals( a, x ) \
{ \
bli_ccscals( a, x ); \
}
#define bli_zscals( a, x ) \
{ \
bli_zzscals( a, x ); \
}
#else // ifdef BLIS_ENABLE_C99_COMPLEX
#define bli_scscals( a, x ) { (x) *= (a); }
#define bli_dcscals( a, x ) { (x) *= (a); }
#define bli_ccscals( a, x ) { (x) *= (a); }
#define bli_zcscals( a, x ) { (x) *= (a); }
#define bli_szscals( a, x ) { (x) *= (a); }
#define bli_dzscals( a, x ) { (x) *= (a); }
#define bli_czscals( a, x ) { (x) *= (a); }
#define bli_zzscals( a, x ) { (x) *= (a); }
#endif // BLIS_ENABLE_C99_COMPLEX
#define bli_sscals( a, x ) bli_ssscals( a, x )
#define bli_dscals( a, x ) bli_ddscals( a, x )
#define bli_cscals( a, x ) bli_ccscals( a, x )
#define bli_zscals( a, x ) bli_zzscals( a, x )
#endif