Gromacs
5.1.5
|
Reference SIMD implementation, including SIMD documentation.
SIMD implementation load/store operations for single precision floating point | |
#define | gmx_simd_loadu_f gmx_simd_load_f |
Load SIMD float from unaligned memory. More... | |
#define | gmx_simd_storeu_f gmx_simd_store_f |
Store SIMD float to unaligned memory. More... | |
static gmx_simd_float_t | gmx_simd_load_f (const float *m) |
Load GMX_SIMD_FLOAT_WIDTH numbers from aligned memory. More... | |
static gmx_simd_float_t | gmx_simd_load1_f (const float *m) |
Set all SIMD variable elements to float pointed to by m (unaligned). More... | |
static gmx_simd_float_t | gmx_simd_set1_f (float r) |
Set all SIMD float variable elements to the value r. More... | |
static gmx_simd_float_t | gmx_simd_setzero_f () |
Set all SIMD float variable elements to 0.0f. More... | |
static void | gmx_simd_store_f (float *m, gmx_simd_float_t a) |
Store the contents of the SIMD float variable pr to aligned memory m. More... | |
SIMD implementation load/store operations for double precision floating point | |
#define | gmx_simd_loadu_d gmx_simd_load_d |
Load SIMD double from unaligned memory. More... | |
#define | gmx_simd_storeu_d gmx_simd_store_d |
Store SIMD double to unaligned memory. More... | |
static gmx_simd_double_t | gmx_simd_load_d (const double *m) |
Load GMX_SIMD_DOUBLE_WIDTH numbers from aligned memory. More... | |
static gmx_simd_double_t | gmx_simd_load1_d (const double *m) |
Set all SIMD variable elements to double pointed to by m (unaligned). More... | |
static gmx_simd_double_t | gmx_simd_set1_d (double r) |
Set all SIMD double variable elements to the value r. More... | |
static gmx_simd_double_t | gmx_simd_setzero_d () |
Set all SIMD double variable elements to 0.0. More... | |
static void | gmx_simd_store_d (double *m, gmx_simd_double_t a) |
Store the contents of the SIMD double variable pr to aligned memory m. More... | |
SIMD implementation load/store operations for integers (corresponding to float) | |
#define | gmx_simd_loadu_fi gmx_simd_load_fi |
Load unaligned integer SIMD data, width corresponds to gmx_simd_float_t. More... | |
#define | gmx_simd_storeu_fi gmx_simd_store_fi |
Store unaligned SIMD integer data, width corresponds to gmx_simd_float_t. More... | |
static gmx_simd_fint32_t | gmx_simd_load_fi (const gmx_int32_t *m) |
Load aligned SIMD integer data, width corresponds to gmx_simd_float_t. More... | |
static gmx_simd_fint32_t | gmx_simd_set1_fi (gmx_int32_t b) |
Set SIMD from integer, width corresponds to gmx_simd_float_t. More... | |
static gmx_simd_fint32_t | gmx_simd_setzero_fi () |
Set all SIMD variable elements to 0, width corresponds to gmx_simd_float_t. More... | |
static gmx_simd_fint32_t | gmx_simd_store_fi (int *m, gmx_simd_fint32_t a) |
Store aligned SIMD integer data, width corresponds to gmx_simd_float_t. More... | |
static gmx_int32_t | gmx_simd_extract_fi (gmx_simd_fint32_t a, int index) |
Extract element with index i from gmx_simd_fint32_t. More... | |
SIMD implementation load/store operations for integers (corresponding to double) | |
#define | gmx_simd_loadu_di gmx_simd_load_di |
Load unaligned integer SIMD data, width corresponds to gmx_simd_double_t. More... | |
#define | gmx_simd_storeu_di gmx_simd_store_di |
Store unaligned SIMD integer data, width corresponds to gmx_simd_double_t. More... | |
static gmx_simd_dint32_t | gmx_simd_load_di (const gmx_int32_t *m) |
Load aligned SIMD integer data, width corresponds to gmx_simd_double_t. More... | |
static gmx_simd_dint32_t | gmx_simd_set1_di (gmx_int32_t b) |
Set SIMD from integer, width corresponds to gmx_simd_double_t. More... | |
static gmx_simd_dint32_t | gmx_simd_setzero_di () |
Set all SIMD variable elements to 0, width corresponds to gmx_simd_double_t. More... | |
static gmx_simd_dint32_t | gmx_simd_store_di (gmx_int32_t *m, gmx_simd_dint32_t a) |
Store aligned SIMD integer data, width corresponds to gmx_simd_double_t. More... | |
static gmx_int32_t | gmx_simd_extract_di (gmx_simd_dint32_t a, int index) |
Extract element with index i from gmx_simd_dint32_t. More... | |
SIMD implementation single precision floating-point arithmetics | |
#define | gmx_simd_fmadd_f(a, b, c) gmx_simd_add_f(gmx_simd_mul_f(a, b), c) |
Fused-multiply-add. Result is a*b+c. More... | |
#define | gmx_simd_fmsub_f(a, b, c) gmx_simd_sub_f(gmx_simd_mul_f(a, b), c) |
Fused-multiply-subtract. Result is a*b-c. More... | |
#define | gmx_simd_fnmadd_f(a, b, c) gmx_simd_sub_f(c, gmx_simd_mul_f(a, b)) |
Fused-negated-multiply-add. Result is -a*b+c. More... | |
#define | gmx_simd_fnmsub_f(a, b, c) gmx_simd_sub_f(gmx_simd_setzero_f(), gmx_simd_fmadd_f(a, b, c)) |
Fused-negated-multiply-sub. Result is -a*b-c. More... | |
static gmx_simd_float_t | gmx_simd_add_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Add two float SIMD variables. More... | |
static gmx_simd_float_t | gmx_simd_sub_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Subtract two SIMD variables. More... | |
static gmx_simd_float_t | gmx_simd_mul_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Multiply two SIMD variables. More... | |
static gmx_simd_float_t | gmx_simd_rsqrt_f (gmx_simd_float_t x) |
SIMD 1.0/sqrt(x) lookup. More... | |
static gmx_simd_float_t | gmx_simd_rcp_f (gmx_simd_float_t x) |
SIMD 1.0/x lookup. More... | |
static gmx_simd_float_t | gmx_simd_fabs_f (gmx_simd_float_t a) |
SIMD Floating-point fabs(). More... | |
static gmx_simd_float_t | gmx_simd_fneg_f (gmx_simd_float_t a) |
SIMD floating-point negate. More... | |
static gmx_simd_float_t | gmx_simd_max_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Set each SIMD element to the largest from two variables. More... | |
static gmx_simd_float_t | gmx_simd_min_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Set each SIMD element to the smallest from two variables. More... | |
static gmx_simd_float_t | gmx_simd_round_f (gmx_simd_float_t a) |
Round to nearest integer value (in floating-point format). More... | |
static gmx_simd_float_t | gmx_simd_trunc_f (gmx_simd_float_t a) |
Truncate SIMD, i.e. round towards zero - common hardware instruction. More... | |
static gmx_simd_float_t | gmx_simd_fraction_f (gmx_simd_float_t a) |
Fraction of the SIMD floating point number. More... | |
static gmx_simd_float_t | gmx_simd_get_exponent_f (gmx_simd_float_t a) |
Extract (integer) exponent from single precision SIMD. More... | |
static gmx_simd_float_t | gmx_simd_get_mantissa_f (gmx_simd_float_t a) |
Get SIMD mantissa. More... | |
static gmx_simd_float_t | gmx_simd_set_exponent_f (gmx_simd_float_t a) |
Set (integer) exponent from single precision floating-point SIMD. More... | |
SIMD implementation double precision floating-point arithmetics | |
#define | gmx_simd_fmadd_d(a, b, c) gmx_simd_add_d(gmx_simd_mul_d(a, b), c) |
Fused-multiply-add. Result is a*b+c. More... | |
#define | gmx_simd_fmsub_d(a, b, c) gmx_simd_sub_d(gmx_simd_mul_d(a, b), c) |
Fused-multiply-subtract. Result is a*b-c. More... | |
#define | gmx_simd_fnmadd_d(a, b, c) gmx_simd_sub_d(c, gmx_simd_mul_d(a, b)) |
Fused-negated-multiply-add. Result is -a*b+c. More... | |
#define | gmx_simd_fnmsub_d(a, b, c) gmx_simd_sub_d(gmx_simd_setzero_d(), gmx_simd_fmadd_d(a, b, c)) |
Fused-negated-multiply-add. Result is -a*b-c. More... | |
static gmx_simd_double_t | gmx_simd_add_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Add two double SIMD variables. More... | |
static gmx_simd_double_t | gmx_simd_sub_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Add two float SIMD variables. More... | |
static gmx_simd_double_t | gmx_simd_mul_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Multiply two SIMD variables. More... | |
static gmx_simd_double_t | gmx_simd_rsqrt_d (gmx_simd_double_t x) |
SIMD 1.0/sqrt(x) lookup. More... | |
static gmx_simd_double_t | gmx_simd_rcp_d (gmx_simd_double_t x) |
1.0/x lookup. More... | |
static gmx_simd_double_t | gmx_simd_fabs_d (gmx_simd_double_t a) |
SIMD Floating-point fabs(). More... | |
static gmx_simd_double_t | gmx_simd_fneg_d (gmx_simd_double_t a) |
SIMD floating-point negate. More... | |
static gmx_simd_double_t | gmx_simd_max_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Set each SIMD element to the largest from two variables. More... | |
static gmx_simd_double_t | gmx_simd_min_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Set each SIMD element to the smallest from two variables. More... | |
static gmx_simd_double_t | gmx_simd_round_d (gmx_simd_double_t a) |
Round to nearest integer value (in double floating-point format). More... | |
static gmx_simd_double_t | gmx_simd_trunc_d (gmx_simd_double_t a) |
Truncate SIMD, i.e. round towards zero - common hardware instruction. More... | |
static gmx_simd_double_t | gmx_simd_fraction_d (gmx_simd_double_t a) |
Fraction of the SIMD floating point number. More... | |
static gmx_simd_double_t | gmx_simd_get_exponent_d (gmx_simd_double_t a) |
Extract (integer) exponent from double precision SIMD. More... | |
static gmx_simd_double_t | gmx_simd_get_mantissa_d (gmx_simd_double_t a) |
Get SIMD doublemantissa. More... | |
static gmx_simd_double_t | gmx_simd_set_exponent_d (gmx_simd_double_t a) |
Set (integer) exponent from single precision floating-point SIMD. More... | |
SIMD4. Constant width-4 SIMD types and instructions | |
#define | gmx_simd4_float_t gmx_simd_float_t |
SIMD4 float type. Available with GMX_SIMD4_HAVE_FLOAT. More... | |
#define | gmx_simd4_load_f gmx_simd_load_f |
Load SIMD4 float from aligned memory. More... | |
#define | gmx_simd4_load1_f gmx_simd_load1_f |
Set all elements of SIMD4 float from single pointer. More... | |
#define | gmx_simd4_set1_f gmx_simd_set1_f |
Set all SIMD4 float elements to the value r. More... | |
#define | gmx_simd4_store_f gmx_simd_store_f |
Store the contents of SIMD4 float pr to aligned memory m. More... | |
#define | gmx_simd4_loadu_f gmx_simd_loadu_f |
Load SIMD4 float from unaligned memory. More... | |
#define | gmx_simd4_storeu_f gmx_simd_storeu_f |
Store SIMD4 float to unaligned memory. More... | |
#define | gmx_simd4_setzero_f gmx_simd_setzero_f |
Set all SIMD4 float elements to 0. More... | |
#define | gmx_simd4_and_f gmx_simd_and_f |
Bitwise and for two SIMD4 float variables. More... | |
#define | gmx_simd4_andnot_f gmx_simd_andnot_f |
Bitwise andnot for two SIMD4 float variables. c=(~a) & b. More... | |
#define | gmx_simd4_or_f gmx_simd_or_f |
Bitwise or for two SIMD4 float variables. More... | |
#define | gmx_simd4_xor_f gmx_simd_xor_f |
Bitwise xor for two SIMD4 float variables. More... | |
#define | gmx_simd4_add_f gmx_simd_add_f |
Add two SIMD4 float variables. More... | |
#define | gmx_simd4_sub_f gmx_simd_sub_f |
Subtract two SIMD4 float variables. More... | |
#define | gmx_simd4_mul_f gmx_simd_mul_f |
Multiply two SIMD4 float variables. More... | |
#define | gmx_simd4_fmadd_f gmx_simd_fmadd_f |
Fused-multiply-add for SIMD4 float. Result is a*b+c. More... | |
#define | gmx_simd4_fmsub_f gmx_simd_fmsub_f |
Fused-multiply-subtract for SIMD4 float. Result is a*b-c. More... | |
#define | gmx_simd4_fnmadd_f gmx_simd_fnmadd_f |
Fused-negated-multiply-add for SIMD4 float. Result is -a*b+c. More... | |
#define | gmx_simd4_fnmsub_f gmx_simd_fnmsub_f |
Fused-negated-multiply-add for SIMD4 float. Result is -a*b-c. More... | |
#define | gmx_simd4_rsqrt_f gmx_simd_rsqrt_f |
Lookup of approximate 1/sqrt(x) for SIMD4 float. More... | |
#define | gmx_simd4_fabs_f gmx_simd_fabs_f |
Floating-point absolute value for SIMD4 float. More... | |
#define | gmx_simd4_fneg_f gmx_simd_fneg_f |
Floating-point negate for SIMD4 float. More... | |
#define | gmx_simd4_max_f gmx_simd_max_f |
Set each SIMD4 float element to the largest from two variables. More... | |
#define | gmx_simd4_min_f gmx_simd_min_f |
Set each SIMD4 float element to the smallest from two variables. More... | |
#define | gmx_simd4_round_f gmx_simd_round_f |
Round to nearest integer value for SIMD4 float. More... | |
#define | gmx_simd4_trunc_f gmx_simd_trunc_f |
Round to largest integral value for SIMD4 float. More... | |
#define | gmx_simd4_fbool_t gmx_simd_fbool_t |
SIMD4 variable type to use for logical comparisons on floats. More... | |
#define | gmx_simd4_cmpeq_f gmx_simd_cmpeq_f |
Equality comparison of two single precision SIMD4. More... | |
#define | gmx_simd4_cmplt_f gmx_simd_cmplt_f |
Less-than comparison of two single precision SIMD4. More... | |
#define | gmx_simd4_cmple_f gmx_simd_cmple_f |
Less-than comparison of two single precision SIMD4. More... | |
#define | gmx_simd4_and_fb gmx_simd_and_fb |
Logical AND on float SIMD4 booleans. More... | |
#define | gmx_simd4_or_fb gmx_simd_or_fb |
Logical OR on float SIMD4 booleans. More... | |
#define | gmx_simd4_anytrue_fb gmx_simd_anytrue_fb |
Returns non-zero if any of the SIMD4 boolean in x is True. More... | |
#define | gmx_simd4_blendzero_f gmx_simd_blendzero_f |
Select from single precision SIMD4 variable where boolean is true. More... | |
#define | gmx_simd4_blendnotzero_f gmx_simd_blendnotzero_f |
Select from single precision SIMD4 variable where boolean is false. More... | |
#define | gmx_simd4_blendv_f gmx_simd_blendv_f |
Vector-blend instruction form SIMD4 float. More... | |
#define | gmx_simd4_reduce_f gmx_simd_reduce_f |
Return sum of all elements in SIMD4 float. More... | |
#define | gmx_simd4_double_t gmx_simd_double_t |
SIMD4 double type. Available with GMX_SIMD4_HAVE_DOUBLE. More... | |
#define | gmx_simd4_load_d gmx_simd_load_d |
Double precision SIMD4 load aligned. More... | |
#define | gmx_simd4_load1_d gmx_simd_load1_d |
Double precision SIMD4 load single value to all elements. More... | |
#define | gmx_simd4_set1_d gmx_simd_set1_d |
Double precision SIMD4 set all elements from value. More... | |
#define | gmx_simd4_store_d gmx_simd_store_d |
Double precision SIMD4 store to aligned memory. More... | |
#define | gmx_simd4_loadu_d gmx_simd_loadu_d |
Load unaligned SIMD4 double. More... | |
#define | gmx_simd4_storeu_d gmx_simd_storeu_d |
Store unaligned SIMD4 double. More... | |
#define | gmx_simd4_setzero_d gmx_simd_setzero_d |
Set all elements in SIMD4 double to 0.0. More... | |
#define | gmx_simd4_and_d gmx_simd_and_d |
Bitwise and for two SIMD4 double variables. More... | |
#define | gmx_simd4_andnot_d gmx_simd_andnot_d |
Bitwise andnot for SIMD4 double. c=(~a) & b. More... | |
#define | gmx_simd4_or_d gmx_simd_or_d |
Bitwise or for SIMD4 double. More... | |
#define | gmx_simd4_xor_d gmx_simd_xor_d |
Bitwise xor for SIMD4 double. More... | |
#define | gmx_simd4_add_d gmx_simd_add_d |
Add two SIMD4 double values. More... | |
#define | gmx_simd4_sub_d gmx_simd_sub_d |
Subtract two SIMD4 double values. More... | |
#define | gmx_simd4_mul_d gmx_simd_mul_d |
Multiply two SIMD4 double values. More... | |
#define | gmx_simd4_fmadd_d gmx_simd_fmadd_d |
Fused-multiply-add for SIMD4 double. Result is a*b+c. More... | |
#define | gmx_simd4_fmsub_d gmx_simd_fmsub_d |
Fused-multiply-subtract for SIMD4 double. Result is a*b-c. More... | |
#define | gmx_simd4_fnmadd_d gmx_simd_fnmadd_d |
Fused-negated-multiply-add for SIMD4 double. Result is -a*b+c. More... | |
#define | gmx_simd4_fnmsub_d gmx_simd_fnmsub_d |
Fused-negated-multiply-sub for SIMD4 double. Result is -a*b-c. More... | |
#define | gmx_simd4_rsqrt_d gmx_simd_rsqrt_d |
SIMD4 double 1.0/sqrt(x) lookup. More... | |
#define | gmx_simd4_fabs_d gmx_simd_fabs_d |
SIMD4 double Floating-point fabs(). More... | |
#define | gmx_simd4_fneg_d gmx_simd_fneg_d |
SIMD4 double floating-point negate. More... | |
#define | gmx_simd4_max_d gmx_simd_max_d |
Set each SIMD4 element to the largest from two variables. More... | |
#define | gmx_simd4_min_d gmx_simd_min_d |
Set each SIMD4 element to the smallest from two variables. More... | |
#define | gmx_simd4_round_d gmx_simd_round_d |
Round SIMD4 double to nearest integer value (in floating-point format). More... | |
#define | gmx_simd4_trunc_d gmx_simd_trunc_d |
Truncate SIMD4 double, i.e. round towards zero. More... | |
#define | gmx_simd4_dbool_t gmx_simd_dbool_t |
SIMD4 variable type to use for logical comparisons on doubles. More... | |
#define | gmx_simd4_cmpeq_d gmx_simd_cmpeq_d |
Equality comparison of two double precision SIMD4 values. More... | |
#define | gmx_simd4_cmplt_d gmx_simd_cmplt_d |
Less-than comparison of two double precision SIMD4 values. More... | |
#define | gmx_simd4_cmple_d gmx_simd_cmple_d |
Less-than comparison of two double precision SIMD4 values. More... | |
#define | gmx_simd4_and_db gmx_simd_and_db |
Logical AND on double SIMD4 booleans. More... | |
#define | gmx_simd4_or_db gmx_simd_or_db |
Logical OR on double SIMD4 booleans. More... | |
#define | gmx_simd4_anytrue_db gmx_simd_anytrue_db |
Returns non-zero if any of the SIMD4 booleans in x is True. More... | |
#define | gmx_simd4_blendzero_d gmx_simd_blendzero_d |
Select from double precision SIMD4 variable where boolean is true. More... | |
#define | gmx_simd4_blendnotzero_d gmx_simd_blendnotzero_d |
Select from double precision SIMD4 variable where boolean is false. More... | |
#define | gmx_simd4_blendv_d gmx_simd_blendv_d |
Vector-blend instruction for SIMD4 double. More... | |
#define | gmx_simd4_reduce_d gmx_simd_reduce_d |
Return sum of all elements in SIMD4 double. More... | |
static float | gmx_simd4_dotproduct3_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Return dot product of two single precision SIMD4 variables. More... | |
static double | gmx_simd4_dotproduct3_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Return dot product of two double precision SIMD4 variables. More... | |
Classes | |
struct | gmx_simd_float_t |
Float SIMD variable. Supported with GMX_SIMD_HAVE_FLOAT. More... | |
struct | gmx_simd_double_t |
Floating-point SIMD variable type in double precision. More... | |
struct | gmx_simd_fint32_t |
Integer SIMD variable type to use for conversions to/from float. More... | |
struct | gmx_simd_dint32_t |
Integer SIMD variable type to use for conversions to/from double. More... | |
struct | gmx_simd_fbool_t |
Boolean type for float SIMD data. More... | |
struct | gmx_simd_dbool_t |
Boolean type for double precision SIMD data. More... | |
struct | gmx_simd_fibool_t |
Boolean type for integer datatypes corresponding to float SIMD. More... | |
struct | gmx_simd_dibool_t |
Boolean type for integer datatypes corresponding to double SIMD. More... | |
Macros | |
SIMD implementation capability definitions | |
#define | GMX_SIMD_HAVE_FLOAT |
Defined when SIMD float support is present. More... | |
#define | GMX_SIMD_HAVE_DOUBLE |
Defined if SIMD double support is present. | |
#define | GMX_SIMD_HAVE_HARDWARE /* For Doxygen */ |
Defined if SIMD is implemented with real hardware instructions. | |
#define | GMX_SIMD_HAVE_LOADU |
Defined if the SIMD implementation supports unaligned loads. | |
#define | GMX_SIMD_HAVE_STOREU |
Defined if the SIMD implementation supports unaligned stores. | |
#define | GMX_SIMD_HAVE_LOGICAL |
Defined if SIMD implementation has logical operations on floating-point data. | |
#define | GMX_SIMD_HAVE_FMA /* For Doxygen */ |
Defined if SIMD fused multiply-add uses hardware instructions. | |
#define | GMX_SIMD_HAVE_FRACTION /* For Doxygen */ |
Defined if the SIMD fraction has a direct hardware instruction. | |
#define | GMX_SIMD_HAVE_FINT32 |
Defined if the SIMD implementation has gmx_simd_fint32_t. | |
#define | GMX_SIMD_HAVE_FINT32_EXTRACT |
Support for extracting integers from gmx_simd_fint32_t. | |
#define | GMX_SIMD_HAVE_FINT32_LOGICAL |
Defined if SIMD logical operations are supported for gmx_simd_fint32_t. | |
#define | GMX_SIMD_HAVE_FINT32_ARITHMETICS |
Defined if SIMD arithmetic operations are supported for gmx_simd_fint32_t. | |
#define | GMX_SIMD_HAVE_DINT32 |
Defined if the SIMD implementation has gmx_simd_dint32_t. More... | |
#define | GMX_SIMD_HAVE_DINT32_EXTRACT |
Support for extracting integer from gmx_simd_dint32_t. | |
#define | GMX_SIMD_HAVE_DINT32_LOGICAL |
Defined if logical operations are supported for gmx_simd_dint32_t. | |
#define | GMX_SIMD_HAVE_DINT32_ARITHMETICS |
Defined if SIMD arithmetic operations are supported for gmx_simd_dint32_t. | |
#define | GMX_SIMD4_HAVE_FLOAT |
Defined if the implementation provides gmx_simd4_float_t. | |
#define | GMX_SIMD4_HAVE_DOUBLE |
Defined if the implementation provides gmx_simd4_double_t. | |
#define | GMX_SIMD_FLOAT_WIDTH 4 |
Width of the gmx_simd_float_t datatype. | |
#define | GMX_SIMD_DOUBLE_WIDTH 4 |
Width of the gmx_simd_double_t datatype. | |
#define | GMX_SIMD_FINT32_WIDTH GMX_SIMD_FLOAT_WIDTH |
Width of the gmx_simd_fint32_t datatype. | |
#define | GMX_SIMD_DINT32_WIDTH GMX_SIMD_DOUBLE_WIDTH |
Width of the gmx_simd_dint32_t datatype. | |
#define | GMX_SIMD_RSQRT_BITS 23 |
Accuracy of SIMD 1/sqrt(x) lookup. Used to determine number of iterations. | |
#define | GMX_SIMD_RCP_BITS 23 |
Accuracy of SIMD 1/x lookup. Used to determine number of iterations. | |
Functions | |
SIMD implementation single precision floating-point bitwise logical operations | |
static gmx_simd_float_t | gmx_simd_and_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Bitwise and for two SIMD float variables. Supported with GMX_SIMD_HAVE_LOGICAL. More... | |
static gmx_simd_float_t | gmx_simd_andnot_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Bitwise andnot for SIMD float. c=(~a) & b. Supported with GMX_SIMD_HAVE_LOGICAL. More... | |
static gmx_simd_float_t | gmx_simd_or_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Bitwise or for SIMD float. Supported with GMX_SIMD_HAVE_LOGICAL. More... | |
static gmx_simd_float_t | gmx_simd_xor_f (gmx_simd_float_t a, gmx_simd_float_t b) |
Bitwise xor for SIMD float. Supported with GMX_SIMD_HAVE_LOGICAL. More... | |
SIMD implementation single precision floating-point comparisons, boolean, selection. | |
static gmx_simd_fbool_t | gmx_simd_cmpeq_f (gmx_simd_float_t a, gmx_simd_float_t b) |
SIMD a==b for single SIMD. More... | |
static gmx_simd_fbool_t | gmx_simd_cmplt_f (gmx_simd_float_t a, gmx_simd_float_t b) |
SIMD a<b for single SIMD. More... | |
static gmx_simd_fbool_t | gmx_simd_cmple_f (gmx_simd_float_t a, gmx_simd_float_t b) |
SIMD a<=b for single SIMD. More... | |
static gmx_simd_fbool_t | gmx_simd_and_fb (gmx_simd_fbool_t a, gmx_simd_fbool_t b) |
Logical and on single precision SIMD booleans. More... | |
static gmx_simd_fbool_t | gmx_simd_or_fb (gmx_simd_fbool_t a, gmx_simd_fbool_t b) |
Logical or on single precision SIMD booleans. More... | |
static int | gmx_simd_anytrue_fb (gmx_simd_fbool_t a) |
Returns non-zero if any of the boolean in x is True, otherwise 0. More... | |
static gmx_simd_float_t | gmx_simd_blendzero_f (gmx_simd_float_t a, gmx_simd_fbool_t sel) |
Select from single precision SIMD variable where boolean is true. More... | |
static gmx_simd_float_t | gmx_simd_blendnotzero_f (gmx_simd_float_t a, gmx_simd_fbool_t sel) |
Select from single precision SIMD variable where boolean is false. More... | |
static gmx_simd_float_t | gmx_simd_blendv_f (gmx_simd_float_t a, gmx_simd_float_t b, gmx_simd_fbool_t sel) |
Vector-blend SIMD selection. More... | |
static float | gmx_simd_reduce_f (gmx_simd_float_t a) |
Return sum of all elements in SIMD float variable. More... | |
SIMD implementation double precision floating-point bitwise logical operations | |
static gmx_simd_double_t | gmx_simd_and_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Bitwise and for two SIMD double variables. Supported with GMX_SIMD_HAVE_LOGICAL. More... | |
static gmx_simd_double_t | gmx_simd_andnot_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Bitwise andnot for SIMD double. c=(~a) & b. Supported with GMX_SIMD_HAVE_LOGICAL. More... | |
static gmx_simd_double_t | gmx_simd_or_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Bitwise or for SIMD double. Supported with GMX_SIMD_HAVE_LOGICAL. More... | |
static gmx_simd_double_t | gmx_simd_xor_d (gmx_simd_double_t a, gmx_simd_double_t b) |
Bitwise xor for SIMD double. Supported with GMX_SIMD_HAVE_LOGICAL. More... | |
SIMD implementation double precision floating-point comparison, boolean, selection. | |
static gmx_simd_dbool_t | gmx_simd_cmpeq_d (gmx_simd_double_t a, gmx_simd_double_t b) |
SIMD a==b for double SIMD. More... | |
static gmx_simd_dbool_t | gmx_simd_cmplt_d (gmx_simd_double_t a, gmx_simd_double_t b) |
SIMD a<b for double SIMD. More... | |
static gmx_simd_dbool_t | gmx_simd_cmple_d (gmx_simd_double_t a, gmx_simd_double_t b) |
SIMD a<=b for double SIMD. More... | |
static gmx_simd_dbool_t | gmx_simd_and_db (gmx_simd_dbool_t a, gmx_simd_dbool_t b) |
Logical and on double precision SIMD booleans. More... | |
static gmx_simd_dbool_t | gmx_simd_or_db (gmx_simd_dbool_t a, gmx_simd_dbool_t b) |
Logical or on double precision SIMD booleans. More... | |
static int | gmx_simd_anytrue_db (gmx_simd_dbool_t a) |
Returns non-zero if any of the boolean in x is True, otherwise 0. More... | |
static gmx_simd_double_t | gmx_simd_blendzero_d (gmx_simd_double_t a, gmx_simd_dbool_t sel) |
Select from double SIMD variable where boolean is true. More... | |
static gmx_simd_double_t | gmx_simd_blendnotzero_d (gmx_simd_double_t a, gmx_simd_dbool_t sel) |
Select from double SIMD variable where boolean is false. More... | |
static gmx_simd_double_t | gmx_simd_blendv_d (gmx_simd_double_t a, gmx_simd_double_t b, gmx_simd_dbool_t sel) |
Vector-blend double SIMD selection. More... | |
static double | gmx_simd_reduce_d (gmx_simd_double_t a) |
Return sum of all elements in SIMD double variable. More... | |
SIMD implementation integer (corresponding to float) bitwise logical operations | |
static gmx_simd_fint32_t | gmx_simd_slli_fi (gmx_simd_fint32_t a, int n) |
SIMD integer shift left logical, based on immediate value. More... | |
static gmx_simd_fint32_t | gmx_simd_srli_fi (gmx_simd_fint32_t a, int n) |
SIMD integer shift right logical, based on immediate value. More... | |
static gmx_simd_fint32_t | gmx_simd_and_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Integer SIMD bitwise and. More... | |
static gmx_simd_fint32_t | gmx_simd_andnot_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Integer SIMD bitwise not-and. More... | |
static gmx_simd_fint32_t | gmx_simd_or_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Integer SIMD bitwise or. More... | |
static gmx_simd_fint32_t | gmx_simd_xor_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Integer SIMD bitwise xor. More... | |
SIMD implementation integer (corresponding to float) arithmetics | |
static gmx_simd_fint32_t | gmx_simd_add_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Add SIMD integers. More... | |
static gmx_simd_fint32_t | gmx_simd_sub_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Subtract SIMD integers. More... | |
static gmx_simd_fint32_t | gmx_simd_mul_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Multiply SIMD integers. More... | |
SIMD implementation integer (corresponding to float) comparisons, boolean, selection | |
static gmx_simd_fibool_t | gmx_simd_cmpeq_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Equality comparison of two integers corresponding to float values. More... | |
static gmx_simd_fibool_t | gmx_simd_cmplt_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b) |
Less-than comparison of two SIMD integers corresponding to float values. More... | |
static gmx_simd_fibool_t | gmx_simd_and_fib (gmx_simd_fibool_t a, gmx_simd_fibool_t b) |
Logical AND on gmx_simd_fibool_t. More... | |
static gmx_simd_fibool_t | gmx_simd_or_fib (gmx_simd_fibool_t a, gmx_simd_fibool_t b) |
Logical OR on gmx_simd_fibool_t. More... | |
static int | gmx_simd_anytrue_fib (gmx_simd_fibool_t a) |
Returns non-zero if any of the boolean in x is True, otherwise 0. More... | |
static gmx_simd_fint32_t | gmx_simd_blendzero_fi (gmx_simd_fint32_t a, gmx_simd_fibool_t sel) |
Select from gmx_simd_fint32_t variable where boolean is true. More... | |
static gmx_simd_fint32_t | gmx_simd_blendnotzero_fi (gmx_simd_fint32_t a, gmx_simd_fibool_t sel) |
Select from gmx_simd_fint32_t variable where boolean is false. More... | |
static gmx_simd_fint32_t | gmx_simd_blendv_fi (gmx_simd_fint32_t a, gmx_simd_fint32_t b, gmx_simd_fibool_t sel) |
Vector-blend SIMD selection. More... | |
SIMD implementation integer (corresponding to double) bitwise logical operations | |
static gmx_simd_dint32_t | gmx_simd_slli_di (gmx_simd_dint32_t a, int n) |
SIMD integer shift left, based on immediate value. More... | |
static gmx_simd_dint32_t | gmx_simd_srli_di (gmx_simd_dint32_t a, int n) |
SIMD integer shift right, based on immediate value. More... | |
static gmx_simd_dint32_t | gmx_simd_and_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Integer bitwise and for SIMD variables. More... | |
static gmx_simd_dint32_t | gmx_simd_andnot_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Integer bitwise not-and for SIMD variables. More... | |
static gmx_simd_dint32_t | gmx_simd_or_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Integer bitwise or for SIMD variables. More... | |
static gmx_simd_dint32_t | gmx_simd_xor_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Integer bitwise xor for SIMD variables. More... | |
SIMD implementation integer (corresponding to double) arithmetics | |
static gmx_simd_dint32_t | gmx_simd_add_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Add SIMD integers, corresponding to double precision. More... | |
static gmx_simd_dint32_t | gmx_simd_sub_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Subtract SIMD integers, corresponding to double precision. More... | |
static gmx_simd_dint32_t | gmx_simd_mul_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Multiply SIMD integers, corresponding to double precision. More... | |
SIMD implementation integer (corresponding to double) comparisons, boolean selection | |
static gmx_simd_dibool_t | gmx_simd_cmpeq_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Equality comparison of two ints corresponding to double SIMD data. More... | |
static gmx_simd_dibool_t | gmx_simd_cmplt_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b) |
Less-than comparison of two ints corresponding to double SIMD data. More... | |
static gmx_simd_dibool_t | gmx_simd_and_dib (gmx_simd_dibool_t a, gmx_simd_dibool_t b) |
Logical AND on gmx_simd_dibool_t. More... | |
static gmx_simd_dibool_t | gmx_simd_or_dib (gmx_simd_dibool_t a, gmx_simd_dibool_t b) |
Logical OR on gmx_simd_dibool_t. More... | |
static int | gmx_simd_anytrue_dib (gmx_simd_dibool_t a) |
Returns non-zero if any of the double-int SIMD booleans in x is True, otherwise 0. More... | |
static gmx_simd_dint32_t | gmx_simd_blendzero_di (gmx_simd_dint32_t a, gmx_simd_dibool_t sel) |
Select from SIMD ints (corresponding to double) where boolean is true. More... | |
static gmx_simd_dint32_t | gmx_simd_blendnotzero_di (gmx_simd_dint32_t a, gmx_simd_dibool_t sel) |
Select from SIMD ints (corresponding to double) where boolean is false. More... | |
static gmx_simd_dint32_t | gmx_simd_blendv_di (gmx_simd_dint32_t a, gmx_simd_dint32_t b, gmx_simd_dibool_t sel) |
Vector-blend SIMD selection for double-int SIMD. More... | |
SIMD implementation conversion operations | |
static gmx_simd_fint32_t | gmx_simd_cvt_f2i (gmx_simd_float_t a) |
Round single precision floating point to integer. More... | |
static gmx_simd_fint32_t | gmx_simd_cvtt_f2i (gmx_simd_float_t a) |
Truncate single precision floating point to integer. More... | |
static gmx_simd_float_t | gmx_simd_cvt_i2f (gmx_simd_fint32_t a) |
Convert integer to single precision floating-point. More... | |
static gmx_simd_dint32_t | gmx_simd_cvt_d2i (gmx_simd_double_t a) |
Round double precision floating point to integer. More... | |
static gmx_simd_dint32_t | gmx_simd_cvtt_d2i (gmx_simd_double_t a) |
Truncate double precision floating point to integer. More... | |
static gmx_simd_double_t | gmx_simd_cvt_i2d (gmx_simd_dint32_t a) |
Convert integer to single precision floating-point. More... | |
static gmx_simd_fibool_t | gmx_simd_cvt_fb2fib (gmx_simd_fbool_t a) |
Convert from float boolean to corresponding integer boolean. More... | |
static gmx_simd_fbool_t | gmx_simd_cvt_fib2fb (gmx_simd_fibool_t a) |
Convert from integer boolean (corresponding to float) to float boolean. More... | |
static gmx_simd_dibool_t | gmx_simd_cvt_db2dib (gmx_simd_dbool_t a) |
Convert from double boolean to corresponding integer boolean. More... | |
static gmx_simd_dbool_t | gmx_simd_cvt_dib2db (gmx_simd_dibool_t a) |
Convert from integer boolean (corresponding to double) to double boolean. More... | |
static gmx_simd_double_t | gmx_simd_cvt_f2d (gmx_simd_float_t f) |
Convert SIMD float to double. More... | |
static gmx_simd_float_t | gmx_simd_cvt_d2f (gmx_simd_double_t d) |
Convert SIMD double to float. More... | |
static void | gmx_simd_cvt_f2dd (gmx_simd_float_t f, gmx_simd_double_t *d0, gmx_simd_double_t *d1) |
Convert SIMD float to double. More... | |
static gmx_simd_float_t | gmx_simd_cvt_dd2f (gmx_simd_double_t d0, gmx_simd_double_t d1) |
Convert SIMD double to float. More... | |