15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX_ISNOTEQUALREGIMPL_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX_ISNOTEQUALREGIMPL_H__ 30 typename RegMaskType<eInstructionSet::eIS_Avx, T>::Type
32 typename boost::enable_if<
33 typename boost::mpl::and_<
34 typename boost::is_integral<T>::type,
35 typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<4> >::type
39 const typename AvxType<T>::Type& in1,
40 const typename AvxType<T>::Type& in2)
42 typename RegMaskType<eInstructionSet::eIS_Avx, T>::Type out;
51 typename boost::enable_if<
52 typename boost::mpl::and_<
53 typename boost::is_integral<T>::type,
54 typename boost::mpl::equal_to<boost::mpl::int_<sizeof(T)>, boost::mpl::int_<4> >::type
58 const typename AvxType<T>::Type& in1,
59 const typename AvxType<T>::Type& in2,
60 typename RegMaskType<eInstructionSet::eIS_Avx, T>::Type& out)
64 COPY_IMM_TO_XMM(in1, in11, in12);
65 COPY_IMM_TO_XMM(in2, in21, in22);
66 typename RegMaskType<eInstructionSet::eIS_Sse2, T>::Type out1 =
67 IsNotEqualReg<eInstructionSet::eIS_Sse2, T>::act(in11, in21);
68 typename RegMaskType<eInstructionSet::eIS_Sse2, T>::Type out2 =
69 IsNotEqualReg<eInstructionSet::eIS_Sse2, T>::act(in12, in22);
70 COPY_XMM_TO_IMM(out1, out2, out);
74 RegMaskType<eInstructionSet::eIS_Avx, ipReal32>::Type
75 IsNotEqualReg<eInstructionSet::eIS_Avx, ipReal32>::act(
76 const AvxType<ipReal32>::Type& in1,
77 const AvxType<ipReal32>::Type& in2)
79 return _mm256_cmp_ps(in1, in2, _CMP_NEQ_UQ);
84 IsNotEqualReg<eInstructionSet::eIS_Avx, ipReal32>::act(
85 const AvxType<ipReal32>::Type& in1,
86 const AvxType<ipReal32>::Type& in2,
87 RegMaskType<eInstructionSet::eIS_Avx, ipReal32>::Type& out)
89 out = _mm256_cmp_ps(in1, in2, _CMP_NEQ_UQ);
93 RegMaskType<eInstructionSet::eIS_Avx, ipReal64>::Type
94 IsNotEqualReg<eInstructionSet::eIS_Avx, ipReal64>::act(
95 const AvxType<ipReal64>::Type& in1,
96 const AvxType<ipReal64>::Type& in2)
98 return _mm256_cmp_pd(in1, in2, _CMP_NEQ_UQ);
103 IsNotEqualReg<eInstructionSet::eIS_Avx, ipReal64>::act(
104 const AvxType<ipReal64>::Type& in1,
105 const AvxType<ipReal64>::Type& in2,
106 RegMaskType<eInstructionSet::eIS_Avx, ipReal64>::Type& out)
108 out = _mm256_cmp_pd(in1, in2, _CMP_NEQ_UQ);
118 #endif // __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX_ISNOTEQUALREGIMPL_H__ Functions to convert from 128 (resp. 256) bits registers to 256 (resp. 128) bits registers.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Advanced Vector Extensions.
Definition: InstructionSetTypes.h:44