15 #ifndef __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX2_ISGREATERREGIMPL_H__ 16 #define __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX2_ISGREATERREGIMPL_H__ 32 RegMaskType<eInstructionSet::eIS_Avx2, ipInt8>::Type
33 IsGreaterReg<eInstructionSet::eIS_Avx2, ipInt8>::act(
34 const AvxType<ipInt8>::Type& in1,
35 const AvxType<ipInt8>::Type& in2)
37 return _mm256_cmpgt_epi8(in1, in2);
43 IsGreaterReg<eInstructionSet::eIS_Avx2, ipInt8>::act(
44 const AvxType<ipInt8>::Type& in1,
45 const AvxType<ipInt8>::Type& in2,
46 RegMaskType<eInstructionSet::eIS_Avx2, ipInt8>::Type& out)
48 out = _mm256_cmpgt_epi8(in1, in2);
53 RegMaskType<eInstructionSet::eIS_Avx2, ipUInt8>::Type
54 IsGreaterReg<eInstructionSet::eIS_Avx2, ipUInt8>::act(
55 const AvxType<ipUInt8>::Type& in1,
56 const AvxType<ipUInt8>::Type& in2)
58 const AvxType<ipUInt8>::Type& c =
59 AssignReg<eInstructionSet::eIS_Avx2, ipUInt8>::act(0x80);
60 const AvxType<ipUInt8>::Type& in1Cvt =
61 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt8>::act(in1, c);
62 const AvxType<ipUInt8>::Type& in2Cvt =
63 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt8>::act(in2, c);
65 return _mm256_cmpgt_epi8(in1Cvt, in2Cvt);
71 IsGreaterReg<eInstructionSet::eIS_Avx2, ipUInt8>::act(
72 const AvxType<ipUInt8>::Type& in1,
73 const AvxType<ipUInt8>::Type& in2,
74 RegMaskType<eInstructionSet::eIS_Avx2, ipUInt8>::Type& out)
76 AvxType<ipUInt8>::Type c;
77 AssignReg<eInstructionSet::eIS_Avx2, ipUInt8>::act(c, 0x80);
78 AvxType<ipUInt8>::Type in1Cvt;
79 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt8>::act(in1, c, in1Cvt);
80 AvxType<ipUInt8>::Type in2Cvt;
81 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt8>::act(in2, c, in2Cvt);
83 out = _mm256_cmpgt_epi8(in1Cvt, in2Cvt);
88 RegMaskType<eInstructionSet::eIS_Avx2, ipInt16>::Type
89 IsGreaterReg<eInstructionSet::eIS_Avx2, ipInt16>::act(
90 const AvxType<ipInt16>::Type& in1,
91 const AvxType<ipInt16>::Type& in2)
93 return _mm256_cmpgt_epi16(in1, in2);
99 IsGreaterReg<eInstructionSet::eIS_Avx2, ipInt16>::act(
100 const AvxType<ipInt16>::Type& in1,
101 const AvxType<ipInt16>::Type& in2,
102 RegMaskType<eInstructionSet::eIS_Avx2, ipInt16>::Type& out)
104 out = _mm256_cmpgt_epi16(in1, in2);
109 RegMaskType<eInstructionSet::eIS_Avx2, ipUInt16>::Type
110 IsGreaterReg<eInstructionSet::eIS_Avx2, ipUInt16>::act(
111 const AvxType<ipUInt16>::Type& in1,
112 const AvxType<ipUInt16>::Type& in2)
114 const AvxType<ipUInt16>::Type& c =
115 AssignReg<eInstructionSet::eIS_Avx2, ipUInt16>::act(0x8000);
116 const AvxType<ipUInt16>::Type& in1Cvt =
117 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt16>::act(in1, c);
118 const AvxType<ipUInt16>::Type& in2Cvt =
119 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt16>::act(in2, c);
121 return _mm256_cmpgt_epi16(in1Cvt, in2Cvt);
127 IsGreaterReg<eInstructionSet::eIS_Avx2, ipUInt16>::act(
128 const AvxType<ipUInt16>::Type& in1,
129 const AvxType<ipUInt16>::Type& in2,
130 RegMaskType<eInstructionSet::eIS_Avx2, ipUInt16>::Type& out)
132 AvxType<ipUInt16>::Type c;
133 AssignReg<eInstructionSet::eIS_Avx2, ipUInt16>::act(c, 0x8000);
134 AvxType<ipUInt16>::Type in1Cvt;
135 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt16>::act(in1, c, in1Cvt);
136 AvxType<ipUInt16>::Type in2Cvt;
137 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt16>::act(in2, c, in2Cvt);
138 out = _mm256_cmpgt_epi16(in1Cvt, in2Cvt);
143 RegMaskType<eInstructionSet::eIS_Avx2, ipInt32>::Type
144 IsGreaterReg<eInstructionSet::eIS_Avx2, ipInt32>::act(
145 const AvxType<ipInt32>::Type& in1,
146 const AvxType<ipInt32>::Type& in2)
148 return _mm256_cmpgt_epi32(in1, in2);
154 IsGreaterReg<eInstructionSet::eIS_Avx2, ipInt32>::act(
155 const AvxType<ipInt32>::Type& in1,
156 const AvxType<ipInt32>::Type& in2,
157 RegMaskType<eInstructionSet::eIS_Avx2, ipInt32>::Type& out)
159 out = _mm256_cmpgt_epi32(in1, in2);
164 RegMaskType<eInstructionSet::eIS_Avx2, ipUInt32>::Type
165 IsGreaterReg<eInstructionSet::eIS_Avx2, ipUInt32>::act(
166 const AvxType<ipUInt32>::Type& in1,
167 const AvxType<ipUInt32>::Type& in2)
169 const AvxType<ipUInt32>::Type& c =
170 AssignReg<eInstructionSet::eIS_Avx2, ipUInt32>::act(0x80000000);
171 const AvxType<ipUInt32>::Type& in1Cvt =
172 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt32>::act(in1, c);
173 const AvxType<ipUInt32>::Type& in2Cvt =
174 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt32>::act(in2, c);
176 return _mm256_cmpgt_epi32(in1Cvt, in2Cvt);
182 IsGreaterReg<eInstructionSet::eIS_Avx2, ipUInt32>::act(
183 const AvxType<ipUInt32>::Type& in1,
184 const AvxType<ipUInt32>::Type& in2,
185 RegMaskType<eInstructionSet::eIS_Avx2, ipUInt32>::Type& out)
187 AvxType<ipUInt32>::Type c;
188 AssignReg<eInstructionSet::eIS_Avx2, ipUInt32>::act(c, 0x80000000);
189 AvxType<ipUInt32>::Type in1Cvt;
190 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt32>::act(in1, c, in1Cvt);
191 AvxType<ipUInt32>::Type in2Cvt;
192 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt32>::act(in2, c, in2Cvt);
194 out = _mm256_cmpgt_epi32(in1Cvt, in2Cvt);
199 RegMaskType<eInstructionSet::eIS_Avx2, ipInt64>::Type
200 IsGreaterReg<eInstructionSet::eIS_Avx2, ipInt64>::act(
201 const AvxType<ipInt64>::Type& in1,
202 const AvxType<ipInt64>::Type& in2)
204 return _mm256_cmpgt_epi64(in1, in2);
211 IsGreaterReg<eInstructionSet::eIS_Avx2, ipInt64>::act(
212 const AvxType<ipInt64>::Type& in1,
213 const AvxType<ipInt64>::Type& in2,
214 RegMaskType<eInstructionSet::eIS_Avx2, ipInt64>::Type& out)
216 out = _mm256_cmpgt_epi64(in1, in2);
221 RegMaskType<eInstructionSet::eIS_Avx2, ipUInt64>::Type
222 IsGreaterReg<eInstructionSet::eIS_Avx2, ipUInt64>::act(
223 const AvxType<ipUInt64>::Type& in1,
224 const AvxType<ipUInt64>::Type& in2)
226 const AvxType<ipUInt64>::Type& c =
227 AssignReg<eInstructionSet::eIS_Avx2, ipUInt64>::act(0x8000000000000000);
228 const AvxType<ipUInt64>::Type& in1Cvt =
229 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt64>::act(in1, c);
230 const AvxType<ipUInt64>::Type& in2Cvt =
231 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt64>::act(in2, c);
233 return _mm256_cmpgt_epi64(in1Cvt, in2Cvt);
239 IsGreaterReg<eInstructionSet::eIS_Avx2, ipUInt64>::act(
240 const AvxType<ipUInt64>::Type& in1,
241 const AvxType<ipUInt64>::Type& in2,
242 RegMaskType<eInstructionSet::eIS_Avx2, ipUInt64>::Type& out)
244 AvxType<ipUInt64>::Type c;
245 AssignReg<eInstructionSet::eIS_Avx2, ipUInt64>::act(c, 0x8000000000000000);
246 AvxType<ipUInt64>::Type in1Cvt;
247 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt64>::act(in1, c, in1Cvt);
248 AvxType<ipUInt64>::Type in2Cvt;
249 BitwiseXOrReg<eInstructionSet::eIS_Avx2, ipUInt64>::act(in2, c, in2Cvt);
251 out = _mm256_cmpgt_epi64(in1Cvt, in2Cvt);
256 RegMaskType<eInstructionSet::eIS_Avx2, ipReal32>::Type
257 IsGreaterReg<eInstructionSet::eIS_Avx2, ipReal32>::act(
258 const AvxType<ipReal32>::Type& in1,
259 const AvxType<ipReal32>::Type& in2)
261 return IsGreaterReg<eInstructionSet::eIS_Avx, ipReal32>::act(in1, in2);
267 IsGreaterReg<eInstructionSet::eIS_Avx2, ipReal32>::act(
268 const AvxType<ipReal32>::Type& in1,
269 const AvxType<ipReal32>::Type& in2,
270 RegMaskType<eInstructionSet::eIS_Avx2, ipReal32>::Type& out)
272 IsGreaterReg<eInstructionSet::eIS_Avx, ipReal32>::act(in1, in2, out);
277 RegMaskType<eInstructionSet::eIS_Avx2, ipReal64>::Type
278 IsGreaterReg<eInstructionSet::eIS_Avx2, ipReal64>::act(
279 const AvxType<ipReal64>::Type& in1,
280 const AvxType<ipReal64>::Type& in2)
282 return IsGreaterReg<eInstructionSet::eIS_Avx, ipReal64>::act(in1, in2);
288 IsGreaterReg<eInstructionSet::eIS_Avx2, ipReal64>::act(
289 const AvxType<ipReal64>::Type& in1,
290 const AvxType<ipReal64>::Type& in2,
291 RegMaskType<eInstructionSet::eIS_Avx2, ipReal64>::Type& out)
293 IsGreaterReg<eInstructionSet::eIS_Avx, ipReal64>::act(in1, in2, out);
306 #endif // __IPSDKUTIL_INSTRUCTIONSET_COMPARISON_DETAIL_AVX2_ISGREATERREGIMPL_H__
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22