16 #ifndef __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_SATURATEDCASTPACK_H__ 17 #define __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_SATURATEDCASTPACK_H__ 33 template <
typename TIn,
typename TOut>
35 typename boost::enable_if_c<
36 sizeof(TIn) <= sizeof(TOut)
40 static IPSDK_FORCEINLINE BasePack<ePackType::ePT_Avx, TOut>
41 act(
const BasePack<ePackType::ePT_Avx, TIn>& in)
43 return CastPack<eInstructionSet::eIS_Avx, TIn, TOut>::act(in);
46 static IPSDK_FORCEINLINE
48 act(
const BasePack<ePackType::ePT_Avx, TIn>& in,
49 BasePack<ePackType::ePT_Avx, TOut> & out)
51 CastPack<eInstructionSet::eIS_Avx, TIn, TOut>::act(in, out);
58 static IPSDK_FORCEINLINE BasePack<ePackType::ePT_Avx, ipReal32>
59 act(
const BasePack<ePackType::ePT_Avx, ipReal64>& in)
61 BasePack<ePackType::ePT_Avx, ipReal64> clampedIn, packMin, packMax;
62 simd::assign<eInstructionSet::eIS_Avx>(packMin, NumericLimits<ipReal32>::min());
63 simd::assign<eInstructionSet::eIS_Avx>(packMax, NumericLimits<ipReal32>::max());
64 simd::min<eInstructionSet::eIS_Avx>(packMax, in, clampedIn);
65 simd::max<eInstructionSet::eIS_Avx>(packMin, clampedIn, clampedIn);
67 return CastPack<eInstructionSet::eIS_Avx, ipReal64, ipReal32>::act(clampedIn);
70 static IPSDK_FORCEINLINE
72 act(
const BasePack<ePackType::ePT_Avx, ipReal64>& in,
73 BasePack<ePackType::ePT_Avx, ipReal32> & out)
75 BasePack<ePackType::ePT_Avx, ipReal64> clampedIn, packMin, packMax;
76 simd::assign<eInstructionSet::eIS_Avx>(packMin, NumericLimits<ipReal32>::min());
77 simd::assign<eInstructionSet::eIS_Avx>(packMax, NumericLimits<ipReal32>::max());
78 simd::min<eInstructionSet::eIS_Avx>(packMax, in, clampedIn);
79 simd::max<eInstructionSet::eIS_Avx>(packMin, clampedIn, clampedIn);
81 CastPack<eInstructionSet::eIS_Avx, ipReal64, ipReal32>::act(clampedIn, out);
92 #endif // __IPSDKUTIL_INSTRUCTIONSET_DETAIL_AVX_SATURATEDCASTPACK_H__ Defines the IPSDK_FORCEINLINE.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
BasePack class; defines a set of scalars (for instruction set "standard") or registers (for all other...
eInstructionSet
Enumerate for processor instruction set description.
Definition: InstructionSetTypes.h:31
Advanced Vector Extensions.
Definition: InstructionSetTypes.h:44
Definition of import/export macro for library.
float ipReal32
Base types definition.
Definition: BaseTypes.h:56