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/>.
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
)
47 DEF_HELPER_4(glue(psrldq
, SUFFIX
), void, env
, Reg
, Reg
, Reg
)
48 DEF_HELPER_4(glue(pslldq
, SUFFIX
), void, env
, Reg
, Reg
, Reg
)
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
)
104 DEF_HELPER_3(glue(pmulhrw
, SUFFIX
), void, env
, Reg
, Reg
)
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
)
117 DEF_HELPER_4(glue(maskmov
, SUFFIX
), void, env
, Reg
, Reg
, tl
)
119 DEF_HELPER_2(glue(movl_mm_T0
, SUFFIX
), void, Reg
, i32
)
121 DEF_HELPER_2(glue(movq_mm_T0
, SUFFIX
), void, Reg
, i64
)
125 DEF_HELPER_3(glue(pshufw
, SUFFIX
), void, Reg
, Reg
, int)
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)
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)
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)
154 #define SSE_HELPER_S4(name, ...) SSE_HELPER_P4(name)
155 #define SSE_HELPER_S3(name, ...) SSE_HELPER_P3(name)
158 DEF_HELPER_4(glue(shufps
, SUFFIX
), void, Reg
, Reg
, Reg
, int)
159 DEF_HELPER_4(glue(shufpd
, SUFFIX
), void, Reg
, Reg
, Reg
, int)
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
)
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
)
190 DEF_HELPER_3(cvtsq2ss
, void, env
, ZMMReg
, i64
)
191 DEF_HELPER_3(cvtsq2sd
, void, env
, ZMMReg
, i64
)
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
)
199 DEF_HELPER_2(cvtss2sq
, s64
, env
, ZMMReg
)
200 DEF_HELPER_2(cvtsd2sq
, s64
, env
, ZMMReg
)
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
)
208 DEF_HELPER_2(cvttss2sq
, s64
, env
, ZMMReg
)
209 DEF_HELPER_2(cvttsd2sq
, s64
, env
, ZMMReg
)
213 DEF_HELPER_3(glue(rsqrtps
, SUFFIX
), void, env
, ZMMReg
, ZMMReg
)
214 DEF_HELPER_3(glue(rcpps
, SUFFIX
), void, env
, ZMMReg
, ZMMReg
)
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)
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
)
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
)
274 DEF_HELPER_2(glue(movmskps
, SUFFIX
), i32
, env
, Reg
)
275 DEF_HELPER_2(glue(movmskpd
, SUFFIX
), i32
, env
, Reg
)
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)
291 DEF_HELPER_4(glue(punpcklqdq
, SUFFIX
), void, env
, Reg
, Reg
, Reg
)
292 DEF_HELPER_4(glue(punpckhqdq
, SUFFIX
), void, env
, Reg
, Reg
, Reg
)
295 /* 3DNow! float ops */
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
)
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 */
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
)
367 DEF_HELPER_3(glue(phminposuw
, SUFFIX
), void, env
, Reg
, Reg
)
369 DEF_HELPER_4(glue(roundps
, SUFFIX
), void, env
, Reg
, Reg
, i32
)
370 DEF_HELPER_4(glue(roundpd
, SUFFIX
), void, env
, Reg
, Reg
, i32
)
372 DEF_HELPER_5(roundss_xmm
, void, env
, Reg
, Reg
, Reg
, i32
)
373 DEF_HELPER_5(roundsd_xmm
, void, env
, Reg
, Reg
, Reg
, i32
)
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
)
380 DEF_HELPER_5(glue(dppd
, SUFFIX
), void, env
, Reg
, Reg
, Reg
, i32
)
382 DEF_HELPER_5(glue(mpsadbw
, SUFFIX
), void, env
, Reg
, Reg
, Reg
, i32
)
385 /* SSE4.2 op helpers */
387 DEF_HELPER_4(glue(pcmpgtq
, SUFFIX
), void, env
, Reg
, Reg
, Reg
)
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
)
397 /* AES-NI op helpers */
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
)
404 DEF_HELPER_3(glue(aesimc
, SUFFIX
), void, env
, Reg
, Reg
)
405 DEF_HELPER_4(glue(aeskeygenassist
, SUFFIX
), void, env
, Reg
, Reg
, i32
)
407 DEF_HELPER_5(glue(pclmulqdq
, SUFFIX
), void, env
, Reg
, Reg
, Reg
, i32
)
422 #undef SSE_HELPER_CMP