target/i386: implement additional AVX comparison operators
[qemu.git] / target / i386 / ops_sse_header.h
blobe7866a8395f8f8e295a7d7c1b63607e46f0425fa
1 /*
2 * MMX/3DNow!/SSE/SSE2/SSE3/SSSE3/SSE4/PNI support
4 * Copyright (c) 2005 Fabrice Bellard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19 #if SHIFT == 0
20 #define Reg MMXReg
21 #define SUFFIX _mmx
22 #else
23 #define Reg ZMMReg
24 #define SUFFIX _xmm
25 #endif
27 #define dh_alias_Reg ptr
28 #define dh_alias_ZMMReg ptr
29 #define dh_alias_MMXReg ptr
30 #define dh_ctype_Reg Reg *
31 #define dh_ctype_ZMMReg ZMMReg *
32 #define dh_ctype_MMXReg MMXReg *
33 #define dh_typecode_Reg dh_typecode_ptr
34 #define dh_typecode_ZMMReg dh_typecode_ptr
35 #define dh_typecode_MMXReg dh_typecode_ptr
37 DEF_HELPER_4(glue(psrlw, SUFFIX), void, env, Reg, Reg, Reg)
38 DEF_HELPER_4(glue(psraw, SUFFIX), void, env, Reg, Reg, Reg)
39 DEF_HELPER_4(glue(psllw, SUFFIX), void, env, Reg, Reg, Reg)
40 DEF_HELPER_4(glue(psrld, SUFFIX), void, env, Reg, Reg, Reg)
41 DEF_HELPER_4(glue(psrad, SUFFIX), void, env, Reg, Reg, Reg)
42 DEF_HELPER_4(glue(pslld, SUFFIX), void, env, Reg, Reg, Reg)
43 DEF_HELPER_4(glue(psrlq, SUFFIX), void, env, Reg, Reg, Reg)
44 DEF_HELPER_4(glue(psllq, SUFFIX), void, env, Reg, Reg, Reg)
46 #if SHIFT >= 1
47 DEF_HELPER_4(glue(psrldq, SUFFIX), void, env, Reg, Reg, Reg)
48 DEF_HELPER_4(glue(pslldq, SUFFIX), void, env, Reg, Reg, Reg)
49 #endif
51 #define SSE_HELPER_B(name, F)\
52 DEF_HELPER_4(glue(name, SUFFIX), void, env, Reg, Reg, Reg)
54 #define SSE_HELPER_W(name, F)\
55 DEF_HELPER_4(glue(name, SUFFIX), void, env, Reg, Reg, Reg)
57 #define SSE_HELPER_L(name, F)\
58 DEF_HELPER_4(glue(name, SUFFIX), void, env, Reg, Reg, Reg)
60 #define SSE_HELPER_Q(name, F)\
61 DEF_HELPER_4(glue(name, SUFFIX), void, env, Reg, Reg, Reg)
63 SSE_HELPER_B(paddb, FADD)
64 SSE_HELPER_W(paddw, FADD)
65 SSE_HELPER_L(paddl, FADD)
66 SSE_HELPER_Q(paddq, FADD)
68 SSE_HELPER_B(psubb, FSUB)
69 SSE_HELPER_W(psubw, FSUB)
70 SSE_HELPER_L(psubl, FSUB)
71 SSE_HELPER_Q(psubq, FSUB)
73 SSE_HELPER_B(paddusb, FADDUB)
74 SSE_HELPER_B(paddsb, FADDSB)
75 SSE_HELPER_B(psubusb, FSUBUB)
76 SSE_HELPER_B(psubsb, FSUBSB)
78 SSE_HELPER_W(paddusw, FADDUW)
79 SSE_HELPER_W(paddsw, FADDSW)
80 SSE_HELPER_W(psubusw, FSUBUW)
81 SSE_HELPER_W(psubsw, FSUBSW)
83 SSE_HELPER_B(pminub, FMINUB)
84 SSE_HELPER_B(pmaxub, FMAXUB)
86 SSE_HELPER_W(pminsw, FMINSW)
87 SSE_HELPER_W(pmaxsw, FMAXSW)
89 SSE_HELPER_Q(pand, FAND)
90 SSE_HELPER_Q(pandn, FANDN)
91 SSE_HELPER_Q(por, FOR)
92 SSE_HELPER_Q(pxor, FXOR)
94 SSE_HELPER_B(pcmpgtb, FCMPGTB)
95 SSE_HELPER_W(pcmpgtw, FCMPGTW)
96 SSE_HELPER_L(pcmpgtl, FCMPGTL)
98 SSE_HELPER_B(pcmpeqb, FCMPEQ)
99 SSE_HELPER_W(pcmpeqw, FCMPEQ)
100 SSE_HELPER_L(pcmpeql, FCMPEQ)
102 SSE_HELPER_W(pmullw, FMULLW)
103 #if SHIFT == 0
104 DEF_HELPER_3(glue(pmulhrw, SUFFIX), void, env, Reg, Reg)
105 #endif
106 SSE_HELPER_W(pmulhuw, FMULHUW)
107 SSE_HELPER_W(pmulhw, FMULHW)
109 SSE_HELPER_B(pavgb, FAVG)
110 SSE_HELPER_W(pavgw, FAVG)
112 DEF_HELPER_4(glue(pmuludq, SUFFIX), void, env, Reg, Reg, Reg)
113 DEF_HELPER_4(glue(pmaddwd, SUFFIX), void, env, Reg, Reg, Reg)
115 DEF_HELPER_4(glue(psadbw, SUFFIX), void, env, Reg, Reg, Reg)
116 #if SHIFT < 2
117 DEF_HELPER_4(glue(maskmov, SUFFIX), void, env, Reg, Reg, tl)
118 #endif
119 DEF_HELPER_2(glue(movl_mm_T0, SUFFIX), void, Reg, i32)
120 #ifdef TARGET_X86_64
121 DEF_HELPER_2(glue(movq_mm_T0, SUFFIX), void, Reg, i64)
122 #endif
124 #if SHIFT == 0
125 DEF_HELPER_3(glue(pshufw, SUFFIX), void, Reg, Reg, int)
126 #else
127 DEF_HELPER_3(glue(pshufd, SUFFIX), void, Reg, Reg, int)
128 DEF_HELPER_3(glue(pshuflw, SUFFIX), void, Reg, Reg, int)
129 DEF_HELPER_3(glue(pshufhw, SUFFIX), void, Reg, Reg, int)
130 #endif
132 #if SHIFT >= 1
133 /* FPU ops */
134 /* XXX: not accurate */
136 #define SSE_HELPER_P4(name) \
137 DEF_HELPER_4(glue(name ## ps, SUFFIX), void, env, Reg, Reg, Reg) \
138 DEF_HELPER_4(glue(name ## pd, SUFFIX), void, env, Reg, Reg, Reg)
140 #define SSE_HELPER_P3(name, ...) \
141 DEF_HELPER_3(glue(name ## ps, SUFFIX), void, env, Reg, Reg) \
142 DEF_HELPER_3(glue(name ## pd, SUFFIX), void, env, Reg, Reg)
144 #if SHIFT == 1
145 #define SSE_HELPER_S4(name) \
146 SSE_HELPER_P4(name) \
147 DEF_HELPER_4(name ## ss, void, env, Reg, Reg, Reg) \
148 DEF_HELPER_4(name ## sd, void, env, Reg, Reg, Reg)
149 #define SSE_HELPER_S3(name) \
150 SSE_HELPER_P3(name) \
151 DEF_HELPER_4(name ## ss, void, env, Reg, Reg, Reg) \
152 DEF_HELPER_4(name ## sd, void, env, Reg, Reg, Reg)
153 #else
154 #define SSE_HELPER_S4(name, ...) SSE_HELPER_P4(name)
155 #define SSE_HELPER_S3(name, ...) SSE_HELPER_P3(name)
156 #endif
158 DEF_HELPER_4(glue(shufps, SUFFIX), void, Reg, Reg, Reg, int)
159 DEF_HELPER_4(glue(shufpd, SUFFIX), void, Reg, Reg, Reg, int)
161 SSE_HELPER_S4(add)
162 SSE_HELPER_S4(sub)
163 SSE_HELPER_S4(mul)
164 SSE_HELPER_S4(div)
165 SSE_HELPER_S4(min)
166 SSE_HELPER_S4(max)
168 SSE_HELPER_S3(sqrt)
170 DEF_HELPER_3(glue(cvtps2pd, SUFFIX), void, env, Reg, Reg)
171 DEF_HELPER_3(glue(cvtpd2ps, SUFFIX), void, env, Reg, Reg)
172 DEF_HELPER_3(glue(cvtdq2ps, SUFFIX), void, env, Reg, Reg)
173 DEF_HELPER_3(glue(cvtdq2pd, SUFFIX), void, env, Reg, Reg)
175 DEF_HELPER_3(glue(cvtps2dq, SUFFIX), void, env, ZMMReg, ZMMReg)
176 DEF_HELPER_3(glue(cvtpd2dq, SUFFIX), void, env, ZMMReg, ZMMReg)
178 DEF_HELPER_3(glue(cvttps2dq, SUFFIX), void, env, ZMMReg, ZMMReg)
179 DEF_HELPER_3(glue(cvttpd2dq, SUFFIX), void, env, ZMMReg, ZMMReg)
181 #if SHIFT == 1
182 DEF_HELPER_4(cvtss2sd, void, env, Reg, Reg, Reg)
183 DEF_HELPER_4(cvtsd2ss, void, env, Reg, Reg, Reg)
184 DEF_HELPER_3(cvtpi2ps, void, env, ZMMReg, MMXReg)
185 DEF_HELPER_3(cvtpi2pd, void, env, ZMMReg, MMXReg)
186 DEF_HELPER_3(cvtsi2ss, void, env, ZMMReg, i32)
187 DEF_HELPER_3(cvtsi2sd, void, env, ZMMReg, i32)
189 #ifdef TARGET_X86_64
190 DEF_HELPER_3(cvtsq2ss, void, env, ZMMReg, i64)
191 DEF_HELPER_3(cvtsq2sd, void, env, ZMMReg, i64)
192 #endif
194 DEF_HELPER_3(cvtps2pi, void, env, MMXReg, ZMMReg)
195 DEF_HELPER_3(cvtpd2pi, void, env, MMXReg, ZMMReg)
196 DEF_HELPER_2(cvtss2si, s32, env, ZMMReg)
197 DEF_HELPER_2(cvtsd2si, s32, env, ZMMReg)
198 #ifdef TARGET_X86_64
199 DEF_HELPER_2(cvtss2sq, s64, env, ZMMReg)
200 DEF_HELPER_2(cvtsd2sq, s64, env, ZMMReg)
201 #endif
203 DEF_HELPER_3(cvttps2pi, void, env, MMXReg, ZMMReg)
204 DEF_HELPER_3(cvttpd2pi, void, env, MMXReg, ZMMReg)
205 DEF_HELPER_2(cvttss2si, s32, env, ZMMReg)
206 DEF_HELPER_2(cvttsd2si, s32, env, ZMMReg)
207 #ifdef TARGET_X86_64
208 DEF_HELPER_2(cvttss2sq, s64, env, ZMMReg)
209 DEF_HELPER_2(cvttsd2sq, s64, env, ZMMReg)
210 #endif
211 #endif
213 DEF_HELPER_3(glue(rsqrtps, SUFFIX), void, env, ZMMReg, ZMMReg)
214 DEF_HELPER_3(glue(rcpps, SUFFIX), void, env, ZMMReg, ZMMReg)
216 #if SHIFT == 1
217 DEF_HELPER_4(rsqrtss, void, env, ZMMReg, ZMMReg, ZMMReg)
218 DEF_HELPER_4(rcpss, void, env, ZMMReg, ZMMReg, ZMMReg)
219 DEF_HELPER_3(extrq_r, void, env, ZMMReg, ZMMReg)
220 DEF_HELPER_4(extrq_i, void, env, ZMMReg, int, int)
221 DEF_HELPER_3(insertq_r, void, env, ZMMReg, ZMMReg)
222 DEF_HELPER_5(insertq_i, void, env, ZMMReg, ZMMReg, int, int)
223 #endif
225 SSE_HELPER_P4(hadd)
226 SSE_HELPER_P4(hsub)
227 SSE_HELPER_P4(addsub)
229 #define SSE_HELPER_CMP(name, F, C) SSE_HELPER_S4(name)
231 SSE_HELPER_CMP(cmpeq, FPU_CMPQ, FPU_EQ)
232 SSE_HELPER_CMP(cmplt, FPU_CMPS, FPU_LT)
233 SSE_HELPER_CMP(cmple, FPU_CMPS, FPU_LE)
234 SSE_HELPER_CMP(cmpunord, FPU_CMPQ, FPU_UNORD)
235 SSE_HELPER_CMP(cmpneq, FPU_CMPQ, !FPU_EQ)
236 SSE_HELPER_CMP(cmpnlt, FPU_CMPS, !FPU_LT)
237 SSE_HELPER_CMP(cmpnle, FPU_CMPS, !FPU_LE)
238 SSE_HELPER_CMP(cmpord, FPU_CMPQ, !FPU_UNORD)
240 SSE_HELPER_CMP(cmpequ, FPU_CMPQ, FPU_EQU)
241 SSE_HELPER_CMP(cmpnge, FPU_CMPS, !FPU_GE)
242 SSE_HELPER_CMP(cmpngt, FPU_CMPS, !FPU_GT)
243 SSE_HELPER_CMP(cmpfalse, FPU_CMPQ, FPU_FALSE)
244 SSE_HELPER_CMP(cmpnequ, FPU_CMPQ, !FPU_EQU)
245 SSE_HELPER_CMP(cmpge, FPU_CMPS, FPU_GE)
246 SSE_HELPER_CMP(cmpgt, FPU_CMPS, FPU_GT)
247 SSE_HELPER_CMP(cmptrue, FPU_CMPQ, !FPU_FALSE)
249 SSE_HELPER_CMP(cmpeqs, FPU_CMPS, FPU_EQ)
250 SSE_HELPER_CMP(cmpltq, FPU_CMPQ, FPU_LT)
251 SSE_HELPER_CMP(cmpleq, FPU_CMPQ, FPU_LE)
252 SSE_HELPER_CMP(cmpunords, FPU_CMPS, FPU_UNORD)
253 SSE_HELPER_CMP(cmpneqq, FPU_CMPS, !FPU_EQ)
254 SSE_HELPER_CMP(cmpnltq, FPU_CMPQ, !FPU_LT)
255 SSE_HELPER_CMP(cmpnleq, FPU_CMPQ, !FPU_LE)
256 SSE_HELPER_CMP(cmpords, FPU_CMPS, !FPU_UNORD)
258 SSE_HELPER_CMP(cmpequs, FPU_CMPS, FPU_EQU)
259 SSE_HELPER_CMP(cmpngeq, FPU_CMPQ, !FPU_GE)
260 SSE_HELPER_CMP(cmpngtq, FPU_CMPQ, !FPU_GT)
261 SSE_HELPER_CMP(cmpfalses, FPU_CMPS, FPU_FALSE)
262 SSE_HELPER_CMP(cmpnequs, FPU_CMPS, !FPU_EQU)
263 SSE_HELPER_CMP(cmpgeq, FPU_CMPQ, FPU_GE)
264 SSE_HELPER_CMP(cmpgtq, FPU_CMPQ, FPU_GT)
265 SSE_HELPER_CMP(cmptrues, FPU_CMPS, !FPU_FALSE)
267 #if SHIFT == 1
268 DEF_HELPER_3(ucomiss, void, env, Reg, Reg)
269 DEF_HELPER_3(comiss, void, env, Reg, Reg)
270 DEF_HELPER_3(ucomisd, void, env, Reg, Reg)
271 DEF_HELPER_3(comisd, void, env, Reg, Reg)
272 #endif
274 DEF_HELPER_2(glue(movmskps, SUFFIX), i32, env, Reg)
275 DEF_HELPER_2(glue(movmskpd, SUFFIX), i32, env, Reg)
276 #endif
278 DEF_HELPER_2(glue(pmovmskb, SUFFIX), i32, env, Reg)
279 DEF_HELPER_4(glue(packsswb, SUFFIX), void, env, Reg, Reg, Reg)
280 DEF_HELPER_4(glue(packuswb, SUFFIX), void, env, Reg, Reg, Reg)
281 DEF_HELPER_4(glue(packssdw, SUFFIX), void, env, Reg, Reg, Reg)
282 #define UNPCK_OP(name, base) \
283 DEF_HELPER_4(glue(punpck ## name ## bw, SUFFIX), void, env, Reg, Reg, Reg) \
284 DEF_HELPER_4(glue(punpck ## name ## wd, SUFFIX), void, env, Reg, Reg, Reg) \
285 DEF_HELPER_4(glue(punpck ## name ## dq, SUFFIX), void, env, Reg, Reg, Reg)
287 UNPCK_OP(l, 0)
288 UNPCK_OP(h, 1)
290 #if SHIFT >= 1
291 DEF_HELPER_4(glue(punpcklqdq, SUFFIX), void, env, Reg, Reg, Reg)
292 DEF_HELPER_4(glue(punpckhqdq, SUFFIX), void, env, Reg, Reg, Reg)
293 #endif
295 /* 3DNow! float ops */
296 #if SHIFT == 0
297 DEF_HELPER_3(pi2fd, void, env, MMXReg, MMXReg)
298 DEF_HELPER_3(pi2fw, void, env, MMXReg, MMXReg)
299 DEF_HELPER_3(pf2id, void, env, MMXReg, MMXReg)
300 DEF_HELPER_3(pf2iw, void, env, MMXReg, MMXReg)
301 DEF_HELPER_3(pfacc, void, env, MMXReg, MMXReg)
302 DEF_HELPER_3(pfadd, void, env, MMXReg, MMXReg)
303 DEF_HELPER_3(pfcmpeq, void, env, MMXReg, MMXReg)
304 DEF_HELPER_3(pfcmpge, void, env, MMXReg, MMXReg)
305 DEF_HELPER_3(pfcmpgt, void, env, MMXReg, MMXReg)
306 DEF_HELPER_3(pfmax, void, env, MMXReg, MMXReg)
307 DEF_HELPER_3(pfmin, void, env, MMXReg, MMXReg)
308 DEF_HELPER_3(pfmul, void, env, MMXReg, MMXReg)
309 DEF_HELPER_3(pfnacc, void, env, MMXReg, MMXReg)
310 DEF_HELPER_3(pfpnacc, void, env, MMXReg, MMXReg)
311 DEF_HELPER_3(pfrcp, void, env, MMXReg, MMXReg)
312 DEF_HELPER_3(pfrsqrt, void, env, MMXReg, MMXReg)
313 DEF_HELPER_3(pfsub, void, env, MMXReg, MMXReg)
314 DEF_HELPER_3(pfsubr, void, env, MMXReg, MMXReg)
315 DEF_HELPER_3(pswapd, void, env, MMXReg, MMXReg)
316 #endif
318 /* SSSE3 op helpers */
319 DEF_HELPER_4(glue(phaddw, SUFFIX), void, env, Reg, Reg, Reg)
320 DEF_HELPER_4(glue(phaddd, SUFFIX), void, env, Reg, Reg, Reg)
321 DEF_HELPER_4(glue(phaddsw, SUFFIX), void, env, Reg, Reg, Reg)
322 DEF_HELPER_4(glue(phsubw, SUFFIX), void, env, Reg, Reg, Reg)
323 DEF_HELPER_4(glue(phsubd, SUFFIX), void, env, Reg, Reg, Reg)
324 DEF_HELPER_4(glue(phsubsw, SUFFIX), void, env, Reg, Reg, Reg)
325 DEF_HELPER_3(glue(pabsb, SUFFIX), void, env, Reg, Reg)
326 DEF_HELPER_3(glue(pabsw, SUFFIX), void, env, Reg, Reg)
327 DEF_HELPER_3(glue(pabsd, SUFFIX), void, env, Reg, Reg)
328 DEF_HELPER_4(glue(pmaddubsw, SUFFIX), void, env, Reg, Reg, Reg)
329 DEF_HELPER_4(glue(pmulhrsw, SUFFIX), void, env, Reg, Reg, Reg)
330 DEF_HELPER_4(glue(pshufb, SUFFIX), void, env, Reg, Reg, Reg)
331 DEF_HELPER_4(glue(psignb, SUFFIX), void, env, Reg, Reg, Reg)
332 DEF_HELPER_4(glue(psignw, SUFFIX), void, env, Reg, Reg, Reg)
333 DEF_HELPER_4(glue(psignd, SUFFIX), void, env, Reg, Reg, Reg)
334 DEF_HELPER_5(glue(palignr, SUFFIX), void, env, Reg, Reg, Reg, s32)
336 /* SSE4.1 op helpers */
337 #if SHIFT >= 1
338 DEF_HELPER_5(glue(pblendvb, SUFFIX), void, env, Reg, Reg, Reg, Reg)
339 DEF_HELPER_5(glue(blendvps, SUFFIX), void, env, Reg, Reg, Reg, Reg)
340 DEF_HELPER_5(glue(blendvpd, SUFFIX), void, env, Reg, Reg, Reg, Reg)
341 DEF_HELPER_3(glue(ptest, SUFFIX), void, env, Reg, Reg)
342 DEF_HELPER_3(glue(pmovsxbw, SUFFIX), void, env, Reg, Reg)
343 DEF_HELPER_3(glue(pmovsxbd, SUFFIX), void, env, Reg, Reg)
344 DEF_HELPER_3(glue(pmovsxbq, SUFFIX), void, env, Reg, Reg)
345 DEF_HELPER_3(glue(pmovsxwd, SUFFIX), void, env, Reg, Reg)
346 DEF_HELPER_3(glue(pmovsxwq, SUFFIX), void, env, Reg, Reg)
347 DEF_HELPER_3(glue(pmovsxdq, SUFFIX), void, env, Reg, Reg)
348 DEF_HELPER_3(glue(pmovzxbw, SUFFIX), void, env, Reg, Reg)
349 DEF_HELPER_3(glue(pmovzxbd, SUFFIX), void, env, Reg, Reg)
350 DEF_HELPER_3(glue(pmovzxbq, SUFFIX), void, env, Reg, Reg)
351 DEF_HELPER_3(glue(pmovzxwd, SUFFIX), void, env, Reg, Reg)
352 DEF_HELPER_3(glue(pmovzxwq, SUFFIX), void, env, Reg, Reg)
353 DEF_HELPER_3(glue(pmovzxdq, SUFFIX), void, env, Reg, Reg)
354 DEF_HELPER_4(glue(pmuldq, SUFFIX), void, env, Reg, Reg, Reg)
355 DEF_HELPER_4(glue(pcmpeqq, SUFFIX), void, env, Reg, Reg, Reg)
356 DEF_HELPER_4(glue(packusdw, SUFFIX), void, env, Reg, Reg, Reg)
357 DEF_HELPER_4(glue(pminsb, SUFFIX), void, env, Reg, Reg, Reg)
358 DEF_HELPER_4(glue(pminsd, SUFFIX), void, env, Reg, Reg, Reg)
359 DEF_HELPER_4(glue(pminuw, SUFFIX), void, env, Reg, Reg, Reg)
360 DEF_HELPER_4(glue(pminud, SUFFIX), void, env, Reg, Reg, Reg)
361 DEF_HELPER_4(glue(pmaxsb, SUFFIX), void, env, Reg, Reg, Reg)
362 DEF_HELPER_4(glue(pmaxsd, SUFFIX), void, env, Reg, Reg, Reg)
363 DEF_HELPER_4(glue(pmaxuw, SUFFIX), void, env, Reg, Reg, Reg)
364 DEF_HELPER_4(glue(pmaxud, SUFFIX), void, env, Reg, Reg, Reg)
365 DEF_HELPER_4(glue(pmulld, SUFFIX), void, env, Reg, Reg, Reg)
366 #if SHIFT == 1
367 DEF_HELPER_3(glue(phminposuw, SUFFIX), void, env, Reg, Reg)
368 #endif
369 DEF_HELPER_4(glue(roundps, SUFFIX), void, env, Reg, Reg, i32)
370 DEF_HELPER_4(glue(roundpd, SUFFIX), void, env, Reg, Reg, i32)
371 #if SHIFT == 1
372 DEF_HELPER_5(roundss_xmm, void, env, Reg, Reg, Reg, i32)
373 DEF_HELPER_5(roundsd_xmm, void, env, Reg, Reg, Reg, i32)
374 #endif
375 DEF_HELPER_5(glue(blendps, SUFFIX), void, env, Reg, Reg, Reg, i32)
376 DEF_HELPER_5(glue(blendpd, SUFFIX), void, env, Reg, Reg, Reg, i32)
377 DEF_HELPER_5(glue(pblendw, SUFFIX), void, env, Reg, Reg, Reg, i32)
378 DEF_HELPER_5(glue(dpps, SUFFIX), void, env, Reg, Reg, Reg, i32)
379 #if SHIFT == 1
380 DEF_HELPER_5(glue(dppd, SUFFIX), void, env, Reg, Reg, Reg, i32)
381 #endif
382 DEF_HELPER_5(glue(mpsadbw, SUFFIX), void, env, Reg, Reg, Reg, i32)
383 #endif
385 /* SSE4.2 op helpers */
386 #if SHIFT >= 1
387 DEF_HELPER_4(glue(pcmpgtq, SUFFIX), void, env, Reg, Reg, Reg)
388 #endif
389 #if SHIFT == 1
390 DEF_HELPER_4(glue(pcmpestri, SUFFIX), void, env, Reg, Reg, i32)
391 DEF_HELPER_4(glue(pcmpestrm, SUFFIX), void, env, Reg, Reg, i32)
392 DEF_HELPER_4(glue(pcmpistri, SUFFIX), void, env, Reg, Reg, i32)
393 DEF_HELPER_4(glue(pcmpistrm, SUFFIX), void, env, Reg, Reg, i32)
394 DEF_HELPER_3(crc32, tl, i32, tl, i32)
395 #endif
397 /* AES-NI op helpers */
398 #if SHIFT >= 1
399 DEF_HELPER_4(glue(aesdec, SUFFIX), void, env, Reg, Reg, Reg)
400 DEF_HELPER_4(glue(aesdeclast, SUFFIX), void, env, Reg, Reg, Reg)
401 DEF_HELPER_4(glue(aesenc, SUFFIX), void, env, Reg, Reg, Reg)
402 DEF_HELPER_4(glue(aesenclast, SUFFIX), void, env, Reg, Reg, Reg)
403 #if SHIFT == 1
404 DEF_HELPER_3(glue(aesimc, SUFFIX), void, env, Reg, Reg)
405 DEF_HELPER_4(glue(aeskeygenassist, SUFFIX), void, env, Reg, Reg, i32)
406 #endif
407 DEF_HELPER_5(glue(pclmulqdq, SUFFIX), void, env, Reg, Reg, Reg, i32)
408 #endif
410 #undef SHIFT
411 #undef Reg
412 #undef SUFFIX
414 #undef SSE_HELPER_B
415 #undef SSE_HELPER_W
416 #undef SSE_HELPER_L
417 #undef SSE_HELPER_Q
418 #undef SSE_HELPER_S3
419 #undef SSE_HELPER_S4
420 #undef SSE_HELPER_P3
421 #undef SSE_HELPER_P4
422 #undef SSE_HELPER_CMP
423 #undef UNPCK_OP