BeBOP Optimized Sparse Kernel Interface Library
1.0.1h
|
Some macros to mangle index/value type-specific names. More...
#include <math.h>
Go to the source code of this file.
Defines | |
#define | INC_OSKI_MANGLE_H |
oski/mangle.h has been included. | |
#define | IS_VAL_COMPLEX ((VAL_TAG_CHAR=='c') || (VAL_TAG_CHAR=='z')) |
Returns 1 if the current default value type is complex. | |
#define | IS_VALPREC_SINGLE ((VAL_TAG_CHAR=='s') || (VAL_TAG_CHAR=='c')) |
Returns 1 if the current default value type is single precision. | |
#define | IS_VALPREC_DOUBLE ((VAL_TAG_CHAR=='d') || (VAL_TAG_CHAR=='z')) |
Returns 1 if the current default value type is single precision. | |
#define | VAL_EPS 1e-7 |
Default machine epsilon. | |
#define | VAL_ZERO (0.0) |
Numerical zero. | |
#define | VAL_ONE (1.0) |
Numerical one. | |
#define | VAL_NEG_ONE (-1.0) |
Numerical negative one. | |
#define | IS_REAL_ZERO(x) ((x) == VAL_ZERO) |
Returns 1 <==> x == 0.0. | |
#define | IS_VAL_ZERO(x) ((x) == VAL_ZERO) |
Returns 1 <==> x == 0.0. | |
#define | IS_VAL_ONE(x) ((x) == VAL_ONE) |
Returns 1 <==> x == 1.0. | |
#define | IS_VAL_NEG_ONE(x) ((x) == VAL_NEG_ONE) |
Returns 1 <==> x == -1.0. | |
#define | VAL_ABS(x) fabs(x) |
Returns ![]() | |
#define | VAL_SET_ZERO(x) (x) = 0.0 |
Sets x to 0. | |
#define | VAL_SET_ONE(x) (x) = 1.0 |
Sets x to 1. | |
#define | VAL_CONJ(x) |
Conjugates x, i.e., ![]() | |
#define | VAL_ASSIGN(y, x) (y) = (x) |
Set ![]() ![]() | |
#define | VAL_ASSIGN_CONJ(y, x) VAL_ASSIGN(y, x) |
Set ![]() ![]() | |
#define | VAL_ASSIGN_NEG(y, x) (y) = -(x) |
Set ![]() ![]() | |
#define | VAL_ASSIGN_NEG_CONJ(y, x) VAL_ASSIGN_NEG(y, x) |
Set ![]() ![]() | |
#define | MAKE_VAL_COMPLEX(x, y) (x) |
Make an initializer record (ignores imaginary part) | |
#define | VAL_SCALE(x, alpha) (x) *= (alpha) |
Compute ![]() ![]() | |
#define | VAL_SCALE_CONJ(x, alpha) VAL_SCALE(x, alpha) |
Compute ![]() ![]() | |
#define | VAL_MAC(y, alpha, x) (y) += (alpha) * (x) |
Compute ![]() ![]() | |
#define | VAL_MAC_CONJ(y, alpha, x) VAL_MAC(y, alpha, x) |
Compute ![]() ![]() | |
#define | VAL_MSUB(y, alpha, x) (y) -= (alpha) * (x) |
Compute ![]() ![]() | |
#define | VAL_MSUB_CONJ(y, alpha, x) VAL_MSUB(y, alpha, x) |
Compute ![]() ![]() | |
#define | VAL_DEC(x, a) (x) -= (a) |
Compute ![]() ![]() | |
#define | VAL_DEC_CONJ(x, a) VAL_DEC(x, a) |
Compute ![]() ![]() | |
#define | VAL_INC(x, a) (x) += (a) |
Compute ![]() ![]() | |
#define | VAL_INC_CONJ(x, a) VAL_INC(x, a) |
Compute ![]() ![]() | |
#define | VAL_MUL(z, x, y) (z) = (x) * (y) |
Computes ![]() ![]() | |
#define | VAL_MUL_CONJ(z, x, y) VAL_MUL(z, x, y) |
Computes ![]() ![]() | |
#define | VAL_TRIAD(z, y, alpha, x) (z) = (y) + (alpha) * (x) |
Compute ![]() ![]() | |
#define | VAL_TRIAD_CONJ(z, y, alpha, x) VAL_TRIAD(z, y, alpha, x) |
Compute ![]() ![]() | |
#define | VAL_DIVEQ(x, a) (x) /= (a) |
Compute ![]() ![]() ![]() | |
#define | VAL_DIVEQ_CONJ(x, a) VAL_DIVEQ(x, a) |
Compute ![]() ![]() ![]() | |
#define | VAL_INV(y, x) (y) = 1.0/(x) |
Computes ![]() ![]() | |
#define | MAKE_VAL_REAL(x) MAKE_VAL_COMPLEX((x), VAL_ZERO) |
Make a complex initializer record. | |
#define | MAKE_VAL_GENERAL MAKE_VAL_COMPLEX(-9, -9) |
A dummy value to represent a "general" value. | |
#define | CATEGORIZE_VAL(alpha) |
Returns ![]() ![]() | |
#define | MAKETYPENAME0(base, ind, val) base ## _T ## ind ## val |
Makes a type-mangled name, [BASE]_T[IND][VAL]. | |
#define | MAKETYPENAME1(base, ind, val) MAKETYPENAME0(base, ind, val) |
Name mangling helper macro. | |
#define | MAKEMODNAME0(mod, base, ind, val) mod ## _T ## ind ## val ## _LTX_ ## base |
Makes a type-mangled shared library module routine name, [MOD]_T[IND][VAL]_LTX_[BASE]. | |
#define | MAKEMODNAME1(mod, base, ind, val) MAKEMODNAME0(mod, base, ind, val) |
Name mangling helper macro. | |
#define | MANGLE_(base) MAKETYPENAME1(base, IND_TAG, VAL_TAG) |
Mangle a base type name. | |
#define | MANGLE_MOD_(base) MAKEMODNAME1(MOD_NAME, base, IND_TAG, VAL_TAG) |
Mangle a module routine name. | |
#define | OSKI_MAKENAME_FUNCPT(name) oski_ ## name ## _funcpt |
Make a function pointer type name of the form, oski_[name]_funcpt. | |
#define | oski_index_t IND_T |
#define | oski_value_t VAL_T |
Mangler for type ID numbers for the default scalar types. | |
#define | MANGLE_CONCAT0(a, b) a ## b |
Direct concatenation of input arguments. | |
#define | MANGLE_CONCAT(a, b) MANGLE_CONCAT0(a, b) |
Macro-expanded concatenation of input arguments. | |
#define | OSKI_IND_ID MANGLE_CONCAT(OSKI_SCALIND_, IND_TYPE_ID) |
Type ID for the default scalar integer index type. | |
#define | OSKI_VAL_ID MANGLE_CONCAT(OSKI_SCALVAL_, VAL_TYPE_ID) |
Type ID for the default scalar non-zero value type. | |
Typed value constants. | |
#define | TVAL_ZERO MANGLE_(TVAL_ZERO) |
#define | TVAL_ONE MANGLE_(TVAL_ONE) |
#define | TVAL_NEG_ONE MANGLE_(TVAL_NEG_ONE) |
#define | TVAL_IMAG MANGLE_(TVAL_IMAG) |
#define | TVAL_NEG_IMAG MANGLE_(TVAL_NEG_IMAG) |
const oski_value_t | TVAL_ZERO |
const oski_value_t | TVAL_ONE |
const oski_value_t | TVAL_NEG_ONE |
const oski_value_t | TVAL_IMAG |
const oski_value_t | TVAL_NEG_IMAG |
Some macros to mangle index/value type-specific names.
To allow users to build a library in multiple precisions, we use the preprocessor macros defined in this file to mangle type and routine names. This header essentially helps simulate a hack-ish C++ template facility.
In order for name mangling to work, the following compile-time macros need to be defined:
At a minimum, the user must define IND_TAG_CHAR and VAL_TAG_CHAR, from which this header will select default expansions for the other macros.
#define CATEGORIZE_VAL | ( | alpha | ) |
( \ (IS_VAL_ONE(alpha) || IS_VAL_ZERO(alpha) || IS_VAL_NEG_ONE(alpha)) \ ? (alpha) : MAKE_VAL_GENERAL \ )
Returns if
, or a constant value (see MAKE_VAL_GENERAL) otherwise.
#define INC_OSKI_MANGLE_H |
oski/mangle.h has been included.
#define IS_VAL_COMPLEX ((VAL_TAG_CHAR=='c') || (VAL_TAG_CHAR=='z')) |
Returns 1 if the current default value type is complex.
This implementation simply checks the currently defined VAL_TAG macro to see if it is 'c' or 'z'.
#define MAKE_VAL_GENERAL MAKE_VAL_COMPLEX(-9, -9) |
A dummy value to represent a "general" value.
This is used in trace representation.
#define MAKEMODNAME0 | ( | mod, | |
base, | |||
ind, | |||
val | |||
) | mod ## _T ## ind ## val ## _LTX_ ## base |
Makes a type-mangled shared library module routine name, [MOD]_T[IND][VAL]_LTX_[BASE].
This macro immediately concatenates its arguments to make a static-compatible module routine name of the form
[mod]_T[ind][val]_LTX_[base]
This naming convention allows the LTDL-based module loader to find methods dynamically.
#define MAKEMODNAME1 | ( | mod, | |
base, | |||
ind, | |||
val | |||
) | MAKEMODNAME0(mod, base, ind, val) |
Name mangling helper macro.
This macro immediately calls MAKEMODNAME0 with the same arguments. Since mod, base, ind, and/or val will often be macros themselves, this intermediate macro provides a way to force the C preprocessor to expand the macro arguments before concatenation.
#define MAKETYPENAME0 | ( | base, | |
ind, | |||
val | |||
) | base ## _T ## ind ## val |
Makes a type-mangled name, [BASE]_T[IND][VAL].
[in] | base | Base type name. |
[in] | ind | Type abbreviation for the integer index type. |
[in] | val | Type abbreviation for the non-zero value type. |
This routine directly concatenates its arguments into the form indicated. If the caller wishes to use macro arguments for any of base, ind, and val, and have those arguments expanded before concatenation, then she should call MAKETYPENAME1 instead.
#define MAKETYPENAME1 | ( | base, | |
ind, | |||
val | |||
) | MAKETYPENAME0(base, ind, val) |
Name mangling helper macro.
This macro immediately calls MAKETYPENAME0 with the same arguments. Since base, ind, and/or val will often be macros themselves, this intermediate macro provides a way to force the C preprocessor to expand the macro arguments before concatenation.
#define MANGLE_ | ( | base | ) | MAKETYPENAME1(base, IND_TAG, VAL_TAG) |
Mangle a base type name.
[in] | base | Base type name. |
This macro mangles the type name, base, using the currently instantiated (defined) scalar types, through the compile-time macros IND_TAG and VAL_TAG.
#define MANGLE_CONCAT | ( | a, | |
b | |||
) | MANGLE_CONCAT0(a, b) |
Macro-expanded concatenation of input arguments.
This macro serves as an intermediate step to ensure that the input arguments, a and b, will be expanded if they are themselves macros.
#define MANGLE_MOD_ | ( | base | ) | MAKEMODNAME1(MOD_NAME, base, IND_TAG, VAL_TAG) |
Mangle a module routine name.
[in] | base | Base routine name. |
This macro mangles the routine name, base, using the currently instantiated module name macro, MOD_NAME.
#define VAL_ASSIGN | ( | y, | |
x | |||
) | (y) = (x) |
Set , where
are real variables.
Referenced by Check(), check_row_write(), compare_row(), compare_row_transimage(), ConvertFullBlocksFromCSR(), CSR_HermMatMult_v1_a1_b1_xs1_ys1(), CSR_HermMatMult_v1_a1_b1_xs1_ysX(), CSR_HermMatMult_v1_a1_b1_xsX_ys1(), CSR_HermMatMult_v1_a1_b1_xsX_ysX(), CSR_HermMatTransMult_v1_a1_b1_xs1_ys1(), CSR_HermMatTransMult_v1_a1_b1_xs1_ysX(), CSR_HermMatTransMult_v1_a1_b1_xsX_ys1(), CSR_HermMatTransMult_v1_a1_b1_xsX_ysX(), CSR_MatConjTransTrisolveLower_Diag_Sorted_xs1(), CSR_MatConjTransTrisolveLower_Diag_Sorted_xsX(), CSR_MatConjTransTrisolveLower_Diag_Unsorted_xs1(), CSR_MatConjTransTrisolveLower_Diag_Unsorted_xsX(), CSR_MatConjTransTrisolveLower_Unitdiag_xs1(), CSR_MatConjTransTrisolveLower_Unitdiag_xsX(), CSR_MatConjTransTrisolveUpper_Diag_Sorted_xs1(), CSR_MatConjTransTrisolveUpper_Diag_Sorted_xsX(), CSR_MatConjTransTrisolveUpper_Diag_Unsorted_xs1(), CSR_MatConjTransTrisolveUpper_Diag_Unsorted_xsX(), CSR_MatConjTransTrisolveUpper_Unitdiag_xs1(), CSR_MatConjTransTrisolveUpper_Unitdiag_xsX(), CSR_MatConjTrisolveLower_Diag_Sorted_xs1(), CSR_MatConjTrisolveLower_Diag_Sorted_xsX(), CSR_MatConjTrisolveLower_Diag_Unsorted_xs1(), CSR_MatConjTrisolveLower_Diag_Unsorted_xsX(), CSR_MatConjTrisolveLower_Unitdiag_xs1(), CSR_MatConjTrisolveLower_Unitdiag_xsX(), CSR_MatConjTrisolveUpper_Diag_Sorted_xs1(), CSR_MatConjTrisolveUpper_Diag_Sorted_xsX(), CSR_MatConjTrisolveUpper_Diag_Unsorted_xs1(), CSR_MatConjTrisolveUpper_Diag_Unsorted_xsX(), CSR_MatConjTrisolveUpper_Unitdiag_xs1(), CSR_MatConjTrisolveUpper_Unitdiag_xsX(), CSR_MatTransTrisolveLower_Diag_Sorted_xs1(), CSR_MatTransTrisolveLower_Diag_Sorted_xsX(), CSR_MatTransTrisolveLower_Diag_Unsorted_xs1(), CSR_MatTransTrisolveLower_Diag_Unsorted_xsX(), CSR_MatTransTrisolveLower_Unitdiag_xs1(), CSR_MatTransTrisolveLower_Unitdiag_xsX(), CSR_MatTransTrisolveUpper_Diag_Sorted_xs1(), CSR_MatTransTrisolveUpper_Diag_Sorted_xsX(), CSR_MatTransTrisolveUpper_Diag_Unsorted_xs1(), CSR_MatTransTrisolveUpper_Diag_Unsorted_xsX(), CSR_MatTransTrisolveUpper_Unitdiag_xs1(), CSR_MatTransTrisolveUpper_Unitdiag_xsX(), CSR_MatTrisolveLower_Diag_Sorted_xs1(), CSR_MatTrisolveLower_Diag_Sorted_xsX(), CSR_MatTrisolveLower_Diag_Unsorted_xs1(), CSR_MatTrisolveLower_Diag_Unsorted_xsX(), CSR_MatTrisolveLower_Unitdiag_xs1(), CSR_MatTrisolveLower_Unitdiag_xsX(), CSR_MatTrisolveUpper_Diag_Sorted_xs1(), CSR_MatTrisolveUpper_Diag_Sorted_xsX(), CSR_MatTrisolveUpper_Diag_Unsorted_xs1(), CSR_MatTrisolveUpper_Diag_Unsorted_xsX(), CSR_MatTrisolveUpper_Unitdiag_xs1(), CSR_MatTrisolveUpper_Unitdiag_xsX(), CSR_SymmMatHermMult_v1_a1_b1_xs1_ys1(), CSR_SymmMatHermMult_v1_a1_b1_xs1_ysX(), CSR_SymmMatHermMult_v1_a1_b1_xsX_ys1(), CSR_SymmMatHermMult_v1_a1_b1_xsX_ysX(), CSR_SymmMatMult_v1_a1_b1_xs1_ys1(), CSR_SymmMatMult_v1_a1_b1_xs1_ysX(), CSR_SymmMatMult_v1_a1_b1_xsX_ys1(), CSR_SymmMatMult_v1_a1_b1_xsX_ysX(), expand_rawmat_csr(), GCSR_MatMult_v1_aX_b1_xs1_ysX(), GCSR_MatMult_v1_aX_b1_xsX_ysX(), GetCliqueDefault(), GetDiagValuesDefault(), GetEntryRaw(), MBCSR_MatHermMatMult_v1_aX_b1_xs1_ys1(), MBCSR_MatHermMatMult_v1_aX_b1_xsX_ysX(), MBCSR_MatMult_v1_aX_b1_xs1_ysX(), MBCSR_MatMult_v1_aX_b1_xsX_ysX(), MBCSR_MatMultAndMatMult_v1_aX_b1_xs1_ysX_oX_z1_ws1_zsX(), MBCSR_MatMultAndMatMult_v1_aX_b1_xsX_ysX_oX_z1_wsX_zsX(), MBCSR_MatMultAndMatTransMult_v1_aX_b1_xs1_ysX_oX_z1_wsX_zs1(), MBCSR_MatMultAndMatTransMult_v1_aX_b1_xsX_ysX_oX_z1_wsX_zsX(), MBCSR_MatTransMatMult_v1_aX_b1_xs1_ys1(), MBCSR_MatTransMatMult_v1_aX_b1_xsX_ysX(), MBCSR_MatTransTrisolve_Lower_v1_aX_xs1(), MBCSR_MatTransTrisolve_Lower_v1_aX_xsX(), MBCSR_MatTransTrisolve_Upper_v1_aX_xs1(), MBCSR_MatTransTrisolve_Upper_v1_aX_xsX(), MBCSR_MatTrisolve_Lower_v1_aX_xs1(), MBCSR_MatTrisolve_Lower_v1_aX_xsX(), MBCSR_MatTrisolve_Upper_v1_aX_xs1(), MBCSR_MatTrisolve_Upper_v1_aX_xsX(), MirrorDiagBlocks(), oski_CalcMatRepr1Norm(), oski_CalcVecViewInfNorm(), oski_CalcVecViewInfNormDiff(), oski_ConvertMatReprToCSR(), oski_ExpandCSRToFull(), oski_MakeArglistMatMultAndMatTransMult(), oski_MakeArglistMatPowMult(), oski_MakeArglistMatTransMatMult(), ResetDiagImag(), SetCliqueDefault(), SetDiagValuesDefault(), SetEntry(), SetEntryRaw(), spot_check_row_read(), testmat_ChangeSizeDenseTriCSR(), testmat_GenTriCSR(), TransposeFullCSR(), and xTRSV().
#define VAL_ASSIGN_CONJ | ( | y, | |
x | |||
) | VAL_ASSIGN(y, x) |
Set , where
are real variables.
Referenced by compare_row_transimage(), expand_rawmat_csr(), MirrorDiagBlocks(), oski_ExpandCSRToFull(), and SetEntryRaw().
#define VAL_ASSIGN_NEG | ( | y, | |
x | |||
) | (y) = -(x) |
Set , where
are real variables.
Referenced by CSR_HermMatMult_v1_aN1_b1_xs1_ys1(), CSR_HermMatMult_v1_aN1_b1_xs1_ysX(), CSR_HermMatMult_v1_aN1_b1_xsX_ys1(), CSR_HermMatMult_v1_aN1_b1_xsX_ysX(), CSR_HermMatTransMult_v1_aN1_b1_xs1_ys1(), CSR_HermMatTransMult_v1_aN1_b1_xs1_ysX(), CSR_HermMatTransMult_v1_aN1_b1_xsX_ys1(), CSR_HermMatTransMult_v1_aN1_b1_xsX_ysX(), CSR_SymmMatHermMult_v1_aN1_b1_xs1_ys1(), CSR_SymmMatHermMult_v1_aN1_b1_xs1_ysX(), CSR_SymmMatHermMult_v1_aN1_b1_xsX_ys1(), CSR_SymmMatHermMult_v1_aN1_b1_xsX_ysX(), CSR_SymmMatMult_v1_aN1_b1_xs1_ys1(), CSR_SymmMatMult_v1_aN1_b1_xs1_ysX(), CSR_SymmMatMult_v1_aN1_b1_xsX_ys1(), and CSR_SymmMatMult_v1_aN1_b1_xsX_ysX().
#define VAL_ASSIGN_NEG_CONJ | ( | y, | |
x | |||
) | VAL_ASSIGN_NEG(y, x) |
Set , where
are real variables.
#define VAL_CONJ | ( | x | ) |
Conjugates x, i.e., .
Referenced by ConjOffDiagElems(), and oski_SetMatReprEntry().