15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_SSE2_ISLESSEQUALREGIMPL_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_SSE2_ISLESSEQUALREGIMPL_H__ 23 #include <boost/type_traits/is_integral.hpp> 24 #include <boost/utility/enable_if.hpp> 35 typename RegMaskType<eInstructionSet::eIS_Sse2, T>::Type
37 typename boost::enable_if_c<
38 boost::is_integral<T>::value
41 const typename Sse2Type<T>::Type& in1,
42 const typename Sse2Type<T>::Type& in2)
44 return BitwiseNotReg<eInstructionSet::eIS_Sse2, T>::act(
45 IsGreaterReg<eInstructionSet::eIS_Sse2, T>::act(in1, in2));
50 typename RegMaskType<eInstructionSet::eIS_Sse2, T>::Type
52 typename boost::enable_if_c<
53 boost::is_integral<T>::value
56 const typename Sse2Type<T>::Type& in1,
59 const typename Sse2Type<T>::Type regIn2 =
60 AssignReg<eInstructionSet::eIS_Sse2, T>::act(in2);
61 return BitwiseNotReg<eInstructionSet::eIS_Sse2, T>::act(
62 IsGreaterReg<eInstructionSet::eIS_Sse2, T>::act(in1, regIn2));
70 typename boost::enable_if_c<
71 boost::is_integral<T>::value
74 const typename Sse2Type<T>::Type& in1,
75 const typename Sse2Type<T>::Type& in2,
76 typename RegMaskType<eInstructionSet::eIS_Sse2, T>::Type& out)
78 IsGreaterReg<eInstructionSet::eIS_Sse2, T>::act(in1, in2, out);
79 BitwiseNotReg<eInstructionSet::eIS_Sse2, T>::act(out, out);
86 typename boost::enable_if_c<
87 boost::is_integral<T>::value
90 const typename Sse2Type<T>::Type& in1,
92 typename RegMaskType<eInstructionSet::eIS_Sse2, T>::Type& out)
94 const typename Sse2Type<T>::Type regIn2 =
95 AssignReg<eInstructionSet::eIS_Sse2, T>::act(in2);
96 IsGreaterReg<eInstructionSet::eIS_Sse2, T>::act(in1, regIn2, out);
97 BitwiseNotReg<eInstructionSet::eIS_Sse2, T>::act(out, out);
101 RegMaskType<eInstructionSet::eIS_Sse2, ipReal32>::Type
102 IsLessEqualReg<eInstructionSet::eIS_Sse2, ipReal32>::act(
103 const Sse2Type<ipReal32>::Type& in1,
104 const Sse2Type<ipReal32>::Type& in2)
106 return _mm_cmple_ps(in1, in2);
110 RegMaskType<eInstructionSet::eIS_Sse2, ipReal32>::Type
111 IsLessEqualReg<eInstructionSet::eIS_Sse2, ipReal32>::act(
112 const Sse2Type<ipReal32>::Type& in1,
115 const Sse2Type<ipReal32>::Type regIn2 =
116 AssignReg<eInstructionSet::eIS_Sse2, ipReal32>::act(in2);
117 return _mm_cmple_ps(in1, regIn2);
122 IsLessEqualReg<eInstructionSet::eIS_Sse2, ipReal32>::act(
123 const Sse2Type<ipReal32>::Type& in1,
124 const Sse2Type<ipReal32>::Type& in2,
125 RegMaskType<eInstructionSet::eIS_Sse2, ipReal32>::Type& out)
127 out = _mm_cmple_ps(in1, in2);
132 IsLessEqualReg<eInstructionSet::eIS_Sse2, ipReal32>::act(
133 const Sse2Type<ipReal32>::Type& in1,
135 RegMaskType<eInstructionSet::eIS_Sse2, ipReal32>::Type& out)
137 const Sse2Type<ipReal32>::Type regIn2 =
138 AssignReg<eInstructionSet::eIS_Sse2, ipReal32>::act(in2);
139 out = _mm_cmple_ps(in1, regIn2);
143 RegMaskType<eInstructionSet::eIS_Sse2, ipReal64>::Type
144 IsLessEqualReg<eInstructionSet::eIS_Sse2, ipReal64>::act(
145 const Sse2Type<ipReal64>::Type& in1,
146 const Sse2Type<ipReal64>::Type& in2)
148 return _mm_cmple_pd(in1, in2);
152 RegMaskType<eInstructionSet::eIS_Sse2, ipReal64>::Type
153 IsLessEqualReg<eInstructionSet::eIS_Sse2, ipReal64>::act(
154 const Sse2Type<ipReal64>::Type& in1,
157 const Sse2Type<ipReal64>::Type regIn2 =
158 AssignReg<eInstructionSet::eIS_Sse2, ipReal64>::act(in2);
159 return _mm_cmple_pd(in1, regIn2);
164 IsLessEqualReg<eInstructionSet::eIS_Sse2, ipReal64>::act(
165 const Sse2Type<ipReal64>::Type& in1,
166 const Sse2Type<ipReal64>::Type& in2,
167 RegMaskType<eInstructionSet::eIS_Sse2, ipReal64>::Type& out)
169 out = _mm_cmple_pd(in1, in2);
174 IsLessEqualReg<eInstructionSet::eIS_Sse2, ipReal64>::act(
175 const Sse2Type<ipReal64>::Type& in1,
177 RegMaskType<eInstructionSet::eIS_Sse2, ipReal64>::Type& out)
179 const Sse2Type<ipReal64>::Type regIn2 =
180 AssignReg<eInstructionSet::eIS_Sse2, ipReal64>::act(in2);
181 out = _mm_cmple_pd(in1, regIn2);
193 #endif // __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_SSE2_ISLESSEQUALREGIMPL_H__ declaration of specialized BitwiseAndReg structure for SSE2 instruction set
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
Streaming SIMD Extensions 2.
Definition: InstructionSetTypes.h:36
float ipReal32
Base types definition.
Definition: BaseTypes.h:56