mirror of
https://github.com/amd/blis.git
synced 2026-05-11 09:39:59 +00:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user