14 #ifndef __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_MODULOCENTERED_H__ 15 #define __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_MODULOCENTERED_H__ 34 template <eInstructionSet::domain IS,
typename T>
36 void moduloCentered(
const simd::Pack<IS, T>& packVal,
37 const simd::Pack<IS, T>& packModuloVal,
38 simd::Pack<IS, T>& packResult)
40 simd::Pack<IS, T> packTmp, packHalfModuloVal, packMHalfModuloVal, packCst0, packCst2;
41 simd::MaskPack<IS, T> maskPack;
43 simd::assign<IS>(packCst0, 0.f);
44 simd::assign<IS>(packCst2, 2.f);
46 simd::div<IS>(packModuloVal, packCst2, packHalfModuloVal);
47 simd::sub<IS>(packCst0, packHalfModuloVal, packMHalfModuloVal);
49 simd::modulo<IS>(packVal, packModuloVal, packResult);
51 simd::sub<IS>(packResult, packModuloVal, packTmp);
52 simd::isGreaterEqual<IS>(packResult, packHalfModuloVal, maskPack);
53 simd::ifElse<IS>(maskPack, packTmp, packResult, packResult);
55 simd::add<IS>(packResult, packModuloVal, packTmp);
56 simd::isLess<IS>(packResult, packMHalfModuloVal, maskPack);
57 simd::ifElse<IS>(maskPack, packTmp, packResult, packResult);
61 template <eInstructionSet::domain IS,
typename T>
63 void moduloCentered(
const simd::Pack<IS, T>& packVal,
64 const simd::Pack<IS, T>& packModuloVal,
65 const simd::Pack<IS, T>& packHalfModuloVal,
66 const simd::Pack<IS, T>& packMHalfModuloVal,
67 simd::Pack<IS, T>& packResult)
69 simd::Pack<IS, T> packTmp;
70 simd::MaskPack<IS, T> maskPack;
72 simd::modulo<IS>(packVal, packModuloVal, packResult);
74 simd::sub<IS>(packResult, packModuloVal, packTmp);
75 simd::isGreaterEqual<IS>(packResult, packHalfModuloVal, maskPack);
76 simd::ifElse<IS>(maskPack, packTmp, packResult, packResult);
78 simd::add<IS>(packResult, packModuloVal, packTmp);
79 simd::isLess<IS>(packResult, packMHalfModuloVal, maskPack);
80 simd::ifElse<IS>(maskPack, packTmp, packResult, packResult);
89 #endif // __IPSDKUTIL_INSTRUCTIONSET_ARITHMETIC_MODULOCENTERED_H__ Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
modulo function; returns the remainder of the integral division of pack A with pack B; result is in r...
function assigning a given value of type T to a given Pack<instructionSet, T>
div function; returns the quotient of 2 input pack operandes
Definition of import/export macro for library.
sub function; returns the result of an arithmetic substraction on all the elements of 2 input pack op...
add function; returns the result of an arithmetic add operation on all the elements of 2 input pack o...