qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

ops_sse_header.h (15815B)


      1 /*
      2  *  MMX/3DNow!/SSE/SSE2/SSE3/SSSE3/SSE4/PNI support
      3  *
      4  *  Copyright (c) 2005 Fabrice Bellard
      5  *
      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.
     10  *
     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.
     15  *
     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/>.
     18  */
     19 #if SHIFT == 0
     20 #define Reg MMXReg
     21 #define SUFFIX _mmx
     22 #else
     23 #define Reg ZMMReg
     24 #if SHIFT == 1
     25 #define SUFFIX _xmm
     26 #else
     27 #define SUFFIX _ymm
     28 #endif
     29 #endif
     30 
     31 #define dh_alias_Reg ptr
     32 #define dh_alias_ZMMReg ptr
     33 #define dh_alias_MMXReg ptr
     34 #define dh_ctype_Reg Reg *
     35 #define dh_ctype_ZMMReg ZMMReg *
     36 #define dh_ctype_MMXReg MMXReg *
     37 #define dh_typecode_Reg dh_typecode_ptr
     38 #define dh_typecode_ZMMReg dh_typecode_ptr
     39 #define dh_typecode_MMXReg dh_typecode_ptr
     40 
     41 DEF_HELPER_4(glue(psrlw, SUFFIX), void, env, Reg, Reg, Reg)
     42 DEF_HELPER_4(glue(psraw, SUFFIX), void, env, Reg, Reg, Reg)
     43 DEF_HELPER_4(glue(psllw, SUFFIX), void, env, Reg, Reg, Reg)
     44 DEF_HELPER_4(glue(psrld, SUFFIX), void, env, Reg, Reg, Reg)
     45 DEF_HELPER_4(glue(psrad, SUFFIX), void, env, Reg, Reg, Reg)
     46 DEF_HELPER_4(glue(pslld, SUFFIX), void, env, Reg, Reg, Reg)
     47 DEF_HELPER_4(glue(psrlq, SUFFIX), void, env, Reg, Reg, Reg)
     48 DEF_HELPER_4(glue(psllq, SUFFIX), void, env, Reg, Reg, Reg)
     49 
     50 #if SHIFT >= 1
     51 DEF_HELPER_4(glue(psrldq, SUFFIX), void, env, Reg, Reg, Reg)
     52 DEF_HELPER_4(glue(pslldq, SUFFIX), void, env, Reg, Reg, Reg)
     53 #endif
     54 
     55 #define SSE_HELPER_B(name, F)\
     56     DEF_HELPER_4(glue(name, SUFFIX), void, env, Reg, Reg, Reg)
     57 
     58 #define SSE_HELPER_W(name, F)\
     59     DEF_HELPER_4(glue(name, SUFFIX), void, env, Reg, Reg, Reg)
     60 
     61 #define SSE_HELPER_L(name, F)\
     62     DEF_HELPER_4(glue(name, SUFFIX), void, env, Reg, Reg, Reg)
     63 
     64 #define SSE_HELPER_Q(name, F)\
     65     DEF_HELPER_4(glue(name, SUFFIX), void, env, Reg, Reg, Reg)
     66 
     67 #if SHIFT == 0
     68 DEF_HELPER_3(glue(pmulhrw, SUFFIX), void, env, Reg, Reg)
     69 #endif
     70 SSE_HELPER_W(pmulhuw, FMULHUW)
     71 SSE_HELPER_W(pmulhw, FMULHW)
     72 
     73 SSE_HELPER_B(pavgb, FAVG)
     74 SSE_HELPER_W(pavgw, FAVG)
     75 
     76 DEF_HELPER_4(glue(pmuludq, SUFFIX), void, env, Reg, Reg, Reg)
     77 DEF_HELPER_4(glue(pmaddwd, SUFFIX), void, env, Reg, Reg, Reg)
     78 
     79 DEF_HELPER_4(glue(psadbw, SUFFIX), void, env, Reg, Reg, Reg)
     80 #if SHIFT < 2
     81 DEF_HELPER_4(glue(maskmov, SUFFIX), void, env, Reg, Reg, tl)
     82 #endif
     83 
     84 #if SHIFT == 0
     85 DEF_HELPER_3(glue(pshufw, SUFFIX), void, Reg, Reg, int)
     86 #else
     87 DEF_HELPER_3(glue(pshufd, SUFFIX), void, Reg, Reg, int)
     88 DEF_HELPER_3(glue(pshuflw, SUFFIX), void, Reg, Reg, int)
     89 DEF_HELPER_3(glue(pshufhw, SUFFIX), void, Reg, Reg, int)
     90 #endif
     91 
     92 #if SHIFT >= 1
     93 /* FPU ops */
     94 /* XXX: not accurate */
     95 
     96 #define SSE_HELPER_P4(name)                                             \
     97     DEF_HELPER_4(glue(name ## ps, SUFFIX), void, env, Reg, Reg, Reg)    \
     98     DEF_HELPER_4(glue(name ## pd, SUFFIX), void, env, Reg, Reg, Reg)
     99 
    100 #define SSE_HELPER_P3(name, ...)                                        \
    101     DEF_HELPER_3(glue(name ## ps, SUFFIX), void, env, Reg, Reg)         \
    102     DEF_HELPER_3(glue(name ## pd, SUFFIX), void, env, Reg, Reg)
    103 
    104 #if SHIFT == 1
    105 #define SSE_HELPER_S4(name)                                             \
    106     SSE_HELPER_P4(name)                                                 \
    107     DEF_HELPER_4(name ## ss, void, env, Reg, Reg, Reg)                  \
    108     DEF_HELPER_4(name ## sd, void, env, Reg, Reg, Reg)
    109 #define SSE_HELPER_S3(name)                                             \
    110     SSE_HELPER_P3(name)                                                 \
    111     DEF_HELPER_4(name ## ss, void, env, Reg, Reg, Reg)                  \
    112     DEF_HELPER_4(name ## sd, void, env, Reg, Reg, Reg)
    113 #else
    114 #define SSE_HELPER_S4(name, ...) SSE_HELPER_P4(name)
    115 #define SSE_HELPER_S3(name, ...) SSE_HELPER_P3(name)
    116 #endif
    117 
    118 DEF_HELPER_4(glue(shufps, SUFFIX), void, Reg, Reg, Reg, int)
    119 DEF_HELPER_4(glue(shufpd, SUFFIX), void, Reg, Reg, Reg, int)
    120 
    121 SSE_HELPER_S4(add)
    122 SSE_HELPER_S4(sub)
    123 SSE_HELPER_S4(mul)
    124 SSE_HELPER_S4(div)
    125 SSE_HELPER_S4(min)
    126 SSE_HELPER_S4(max)
    127 
    128 SSE_HELPER_S3(sqrt)
    129 
    130 DEF_HELPER_3(glue(cvtps2pd, SUFFIX), void, env, Reg, Reg)
    131 DEF_HELPER_3(glue(cvtpd2ps, SUFFIX), void, env, Reg, Reg)
    132 DEF_HELPER_3(glue(cvtdq2ps, SUFFIX), void, env, Reg, Reg)
    133 DEF_HELPER_3(glue(cvtdq2pd, SUFFIX), void, env, Reg, Reg)
    134 
    135 DEF_HELPER_3(glue(cvtps2dq, SUFFIX), void, env, ZMMReg, ZMMReg)
    136 DEF_HELPER_3(glue(cvtpd2dq, SUFFIX), void, env, ZMMReg, ZMMReg)
    137 
    138 DEF_HELPER_3(glue(cvttps2dq, SUFFIX), void, env, ZMMReg, ZMMReg)
    139 DEF_HELPER_3(glue(cvttpd2dq, SUFFIX), void, env, ZMMReg, ZMMReg)
    140 
    141 #if SHIFT == 1
    142 DEF_HELPER_4(cvtss2sd, void, env, Reg, Reg, Reg)
    143 DEF_HELPER_4(cvtsd2ss, void, env, Reg, Reg, Reg)
    144 DEF_HELPER_3(cvtpi2ps, void, env, ZMMReg, MMXReg)
    145 DEF_HELPER_3(cvtpi2pd, void, env, ZMMReg, MMXReg)
    146 DEF_HELPER_3(cvtsi2ss, void, env, ZMMReg, i32)
    147 DEF_HELPER_3(cvtsi2sd, void, env, ZMMReg, i32)
    148 
    149 #ifdef TARGET_X86_64
    150 DEF_HELPER_3(cvtsq2ss, void, env, ZMMReg, i64)
    151 DEF_HELPER_3(cvtsq2sd, void, env, ZMMReg, i64)
    152 #endif
    153 
    154 DEF_HELPER_3(cvtps2pi, void, env, MMXReg, ZMMReg)
    155 DEF_HELPER_3(cvtpd2pi, void, env, MMXReg, ZMMReg)
    156 DEF_HELPER_2(cvtss2si, s32, env, ZMMReg)
    157 DEF_HELPER_2(cvtsd2si, s32, env, ZMMReg)
    158 #ifdef TARGET_X86_64
    159 DEF_HELPER_2(cvtss2sq, s64, env, ZMMReg)
    160 DEF_HELPER_2(cvtsd2sq, s64, env, ZMMReg)
    161 #endif
    162 
    163 DEF_HELPER_3(cvttps2pi, void, env, MMXReg, ZMMReg)
    164 DEF_HELPER_3(cvttpd2pi, void, env, MMXReg, ZMMReg)
    165 DEF_HELPER_2(cvttss2si, s32, env, ZMMReg)
    166 DEF_HELPER_2(cvttsd2si, s32, env, ZMMReg)
    167 #ifdef TARGET_X86_64
    168 DEF_HELPER_2(cvttss2sq, s64, env, ZMMReg)
    169 DEF_HELPER_2(cvttsd2sq, s64, env, ZMMReg)
    170 #endif
    171 #endif
    172 
    173 DEF_HELPER_3(glue(rsqrtps, SUFFIX), void, env, ZMMReg, ZMMReg)
    174 DEF_HELPER_3(glue(rcpps, SUFFIX), void, env, ZMMReg, ZMMReg)
    175 
    176 #if SHIFT == 1
    177 DEF_HELPER_4(rsqrtss, void, env, ZMMReg, ZMMReg, ZMMReg)
    178 DEF_HELPER_4(rcpss, void, env, ZMMReg, ZMMReg, ZMMReg)
    179 DEF_HELPER_3(extrq_r, void, env, ZMMReg, ZMMReg)
    180 DEF_HELPER_4(extrq_i, void, env, ZMMReg, int, int)
    181 DEF_HELPER_3(insertq_r, void, env, ZMMReg, ZMMReg)
    182 DEF_HELPER_5(insertq_i, void, env, ZMMReg, ZMMReg, int, int)
    183 #endif
    184 
    185 SSE_HELPER_P4(hadd)
    186 SSE_HELPER_P4(hsub)
    187 SSE_HELPER_P4(addsub)
    188 
    189 #define SSE_HELPER_CMP(name, F, C) SSE_HELPER_S4(name)
    190 
    191 SSE_HELPER_CMP(cmpeq, FPU_CMPQ, FPU_EQ)
    192 SSE_HELPER_CMP(cmplt, FPU_CMPS, FPU_LT)
    193 SSE_HELPER_CMP(cmple, FPU_CMPS, FPU_LE)
    194 SSE_HELPER_CMP(cmpunord, FPU_CMPQ,  FPU_UNORD)
    195 SSE_HELPER_CMP(cmpneq, FPU_CMPQ, !FPU_EQ)
    196 SSE_HELPER_CMP(cmpnlt, FPU_CMPS, !FPU_LT)
    197 SSE_HELPER_CMP(cmpnle, FPU_CMPS, !FPU_LE)
    198 SSE_HELPER_CMP(cmpord, FPU_CMPQ, !FPU_UNORD)
    199 
    200 SSE_HELPER_CMP(cmpequ, FPU_CMPQ, FPU_EQU)
    201 SSE_HELPER_CMP(cmpnge, FPU_CMPS, !FPU_GE)
    202 SSE_HELPER_CMP(cmpngt, FPU_CMPS, !FPU_GT)
    203 SSE_HELPER_CMP(cmpfalse, FPU_CMPQ,  FPU_FALSE)
    204 SSE_HELPER_CMP(cmpnequ, FPU_CMPQ, !FPU_EQU)
    205 SSE_HELPER_CMP(cmpge, FPU_CMPS, FPU_GE)
    206 SSE_HELPER_CMP(cmpgt, FPU_CMPS, FPU_GT)
    207 SSE_HELPER_CMP(cmptrue, FPU_CMPQ,  !FPU_FALSE)
    208 
    209 SSE_HELPER_CMP(cmpeqs, FPU_CMPS, FPU_EQ)
    210 SSE_HELPER_CMP(cmpltq, FPU_CMPQ, FPU_LT)
    211 SSE_HELPER_CMP(cmpleq, FPU_CMPQ, FPU_LE)
    212 SSE_HELPER_CMP(cmpunords, FPU_CMPS,  FPU_UNORD)
    213 SSE_HELPER_CMP(cmpneqq, FPU_CMPS, !FPU_EQ)
    214 SSE_HELPER_CMP(cmpnltq, FPU_CMPQ, !FPU_LT)
    215 SSE_HELPER_CMP(cmpnleq, FPU_CMPQ, !FPU_LE)
    216 SSE_HELPER_CMP(cmpords, FPU_CMPS, !FPU_UNORD)
    217 
    218 SSE_HELPER_CMP(cmpequs, FPU_CMPS, FPU_EQU)
    219 SSE_HELPER_CMP(cmpngeq, FPU_CMPQ, !FPU_GE)
    220 SSE_HELPER_CMP(cmpngtq, FPU_CMPQ, !FPU_GT)
    221 SSE_HELPER_CMP(cmpfalses, FPU_CMPS,  FPU_FALSE)
    222 SSE_HELPER_CMP(cmpnequs, FPU_CMPS, !FPU_EQU)
    223 SSE_HELPER_CMP(cmpgeq, FPU_CMPQ, FPU_GE)
    224 SSE_HELPER_CMP(cmpgtq, FPU_CMPQ, FPU_GT)
    225 SSE_HELPER_CMP(cmptrues, FPU_CMPS,  !FPU_FALSE)
    226 
    227 #if SHIFT == 1
    228 DEF_HELPER_3(ucomiss, void, env, Reg, Reg)
    229 DEF_HELPER_3(comiss, void, env, Reg, Reg)
    230 DEF_HELPER_3(ucomisd, void, env, Reg, Reg)
    231 DEF_HELPER_3(comisd, void, env, Reg, Reg)
    232 #endif
    233 
    234 DEF_HELPER_2(glue(movmskps, SUFFIX), i32, env, Reg)
    235 DEF_HELPER_2(glue(movmskpd, SUFFIX), i32, env, Reg)
    236 #endif
    237 
    238 DEF_HELPER_4(glue(packsswb, SUFFIX), void, env, Reg, Reg, Reg)
    239 DEF_HELPER_4(glue(packuswb, SUFFIX), void, env, Reg, Reg, Reg)
    240 DEF_HELPER_4(glue(packssdw, SUFFIX), void, env, Reg, Reg, Reg)
    241 #define UNPCK_OP(name, base)                                       \
    242     DEF_HELPER_4(glue(punpck ## name ## bw, SUFFIX), void, env, Reg, Reg, Reg) \
    243     DEF_HELPER_4(glue(punpck ## name ## wd, SUFFIX), void, env, Reg, Reg, Reg) \
    244     DEF_HELPER_4(glue(punpck ## name ## dq, SUFFIX), void, env, Reg, Reg, Reg)
    245 
    246 UNPCK_OP(l, 0)
    247 UNPCK_OP(h, 1)
    248 
    249 #if SHIFT >= 1
    250 DEF_HELPER_4(glue(punpcklqdq, SUFFIX), void, env, Reg, Reg, Reg)
    251 DEF_HELPER_4(glue(punpckhqdq, SUFFIX), void, env, Reg, Reg, Reg)
    252 #endif
    253 
    254 /* 3DNow! float ops */
    255 #if SHIFT == 0
    256 DEF_HELPER_3(pi2fd, void, env, MMXReg, MMXReg)
    257 DEF_HELPER_3(pi2fw, void, env, MMXReg, MMXReg)
    258 DEF_HELPER_3(pf2id, void, env, MMXReg, MMXReg)
    259 DEF_HELPER_3(pf2iw, void, env, MMXReg, MMXReg)
    260 DEF_HELPER_3(pfacc, void, env, MMXReg, MMXReg)
    261 DEF_HELPER_3(pfadd, void, env, MMXReg, MMXReg)
    262 DEF_HELPER_3(pfcmpeq, void, env, MMXReg, MMXReg)
    263 DEF_HELPER_3(pfcmpge, void, env, MMXReg, MMXReg)
    264 DEF_HELPER_3(pfcmpgt, void, env, MMXReg, MMXReg)
    265 DEF_HELPER_3(pfmax, void, env, MMXReg, MMXReg)
    266 DEF_HELPER_3(pfmin, void, env, MMXReg, MMXReg)
    267 DEF_HELPER_3(pfmul, void, env, MMXReg, MMXReg)
    268 DEF_HELPER_3(pfnacc, void, env, MMXReg, MMXReg)
    269 DEF_HELPER_3(pfpnacc, void, env, MMXReg, MMXReg)
    270 DEF_HELPER_3(pfrcp, void, env, MMXReg, MMXReg)
    271 DEF_HELPER_3(pfrsqrt, void, env, MMXReg, MMXReg)
    272 DEF_HELPER_3(pfsub, void, env, MMXReg, MMXReg)
    273 DEF_HELPER_3(pfsubr, void, env, MMXReg, MMXReg)
    274 DEF_HELPER_3(pswapd, void, env, MMXReg, MMXReg)
    275 #endif
    276 
    277 /* SSSE3 op helpers */
    278 DEF_HELPER_4(glue(phaddw, SUFFIX), void, env, Reg, Reg, Reg)
    279 DEF_HELPER_4(glue(phaddd, SUFFIX), void, env, Reg, Reg, Reg)
    280 DEF_HELPER_4(glue(phaddsw, SUFFIX), void, env, Reg, Reg, Reg)
    281 DEF_HELPER_4(glue(phsubw, SUFFIX), void, env, Reg, Reg, Reg)
    282 DEF_HELPER_4(glue(phsubd, SUFFIX), void, env, Reg, Reg, Reg)
    283 DEF_HELPER_4(glue(phsubsw, SUFFIX), void, env, Reg, Reg, Reg)
    284 DEF_HELPER_4(glue(pmaddubsw, SUFFIX), void, env, Reg, Reg, Reg)
    285 DEF_HELPER_4(glue(pmulhrsw, SUFFIX), void, env, Reg, Reg, Reg)
    286 DEF_HELPER_4(glue(pshufb, SUFFIX), void, env, Reg, Reg, Reg)
    287 DEF_HELPER_4(glue(psignb, SUFFIX), void, env, Reg, Reg, Reg)
    288 DEF_HELPER_4(glue(psignw, SUFFIX), void, env, Reg, Reg, Reg)
    289 DEF_HELPER_4(glue(psignd, SUFFIX), void, env, Reg, Reg, Reg)
    290 DEF_HELPER_5(glue(palignr, SUFFIX), void, env, Reg, Reg, Reg, i32)
    291 
    292 /* SSE4.1 op helpers */
    293 #if SHIFT >= 1
    294 DEF_HELPER_5(glue(pblendvb, SUFFIX), void, env, Reg, Reg, Reg, Reg)
    295 DEF_HELPER_5(glue(blendvps, SUFFIX), void, env, Reg, Reg, Reg, Reg)
    296 DEF_HELPER_5(glue(blendvpd, SUFFIX), void, env, Reg, Reg, Reg, Reg)
    297 DEF_HELPER_3(glue(ptest, SUFFIX), void, env, Reg, Reg)
    298 DEF_HELPER_3(glue(pmovsxbw, SUFFIX), void, env, Reg, Reg)
    299 DEF_HELPER_3(glue(pmovsxbd, SUFFIX), void, env, Reg, Reg)
    300 DEF_HELPER_3(glue(pmovsxbq, SUFFIX), void, env, Reg, Reg)
    301 DEF_HELPER_3(glue(pmovsxwd, SUFFIX), void, env, Reg, Reg)
    302 DEF_HELPER_3(glue(pmovsxwq, SUFFIX), void, env, Reg, Reg)
    303 DEF_HELPER_3(glue(pmovsxdq, SUFFIX), void, env, Reg, Reg)
    304 DEF_HELPER_3(glue(pmovzxbw, SUFFIX), void, env, Reg, Reg)
    305 DEF_HELPER_3(glue(pmovzxbd, SUFFIX), void, env, Reg, Reg)
    306 DEF_HELPER_3(glue(pmovzxbq, SUFFIX), void, env, Reg, Reg)
    307 DEF_HELPER_3(glue(pmovzxwd, SUFFIX), void, env, Reg, Reg)
    308 DEF_HELPER_3(glue(pmovzxwq, SUFFIX), void, env, Reg, Reg)
    309 DEF_HELPER_3(glue(pmovzxdq, SUFFIX), void, env, Reg, Reg)
    310 DEF_HELPER_3(glue(pmovsldup, SUFFIX), void, env, Reg, Reg)
    311 DEF_HELPER_3(glue(pmovshdup, SUFFIX), void, env, Reg, Reg)
    312 DEF_HELPER_3(glue(pmovdldup, SUFFIX), void, env, Reg, Reg)
    313 DEF_HELPER_4(glue(pmuldq, SUFFIX), void, env, Reg, Reg, Reg)
    314 DEF_HELPER_4(glue(packusdw, SUFFIX), void, env, Reg, Reg, Reg)
    315 #if SHIFT == 1
    316 DEF_HELPER_3(glue(phminposuw, SUFFIX), void, env, Reg, Reg)
    317 #endif
    318 DEF_HELPER_4(glue(roundps, SUFFIX), void, env, Reg, Reg, i32)
    319 DEF_HELPER_4(glue(roundpd, SUFFIX), void, env, Reg, Reg, i32)
    320 #if SHIFT == 1
    321 DEF_HELPER_5(roundss_xmm, void, env, Reg, Reg, Reg, i32)
    322 DEF_HELPER_5(roundsd_xmm, void, env, Reg, Reg, Reg, i32)
    323 #endif
    324 DEF_HELPER_5(glue(blendps, SUFFIX), void, env, Reg, Reg, Reg, i32)
    325 DEF_HELPER_5(glue(blendpd, SUFFIX), void, env, Reg, Reg, Reg, i32)
    326 DEF_HELPER_5(glue(pblendw, SUFFIX), void, env, Reg, Reg, Reg, i32)
    327 DEF_HELPER_5(glue(dpps, SUFFIX), void, env, Reg, Reg, Reg, i32)
    328 #if SHIFT == 1
    329 DEF_HELPER_5(glue(dppd, SUFFIX), void, env, Reg, Reg, Reg, i32)
    330 #endif
    331 DEF_HELPER_5(glue(mpsadbw, SUFFIX), void, env, Reg, Reg, Reg, i32)
    332 #endif
    333 
    334 /* SSE4.2 op helpers */
    335 #if SHIFT == 1
    336 DEF_HELPER_4(glue(pcmpestri, SUFFIX), void, env, Reg, Reg, i32)
    337 DEF_HELPER_4(glue(pcmpestrm, SUFFIX), void, env, Reg, Reg, i32)
    338 DEF_HELPER_4(glue(pcmpistri, SUFFIX), void, env, Reg, Reg, i32)
    339 DEF_HELPER_4(glue(pcmpistrm, SUFFIX), void, env, Reg, Reg, i32)
    340 DEF_HELPER_3(crc32, tl, i32, tl, i32)
    341 #endif
    342 
    343 /* AES-NI op helpers */
    344 #if SHIFT >= 1
    345 DEF_HELPER_4(glue(aesdec, SUFFIX), void, env, Reg, Reg, Reg)
    346 DEF_HELPER_4(glue(aesdeclast, SUFFIX), void, env, Reg, Reg, Reg)
    347 DEF_HELPER_4(glue(aesenc, SUFFIX), void, env, Reg, Reg, Reg)
    348 DEF_HELPER_4(glue(aesenclast, SUFFIX), void, env, Reg, Reg, Reg)
    349 #if SHIFT == 1
    350 DEF_HELPER_3(glue(aesimc, SUFFIX), void, env, Reg, Reg)
    351 DEF_HELPER_4(glue(aeskeygenassist, SUFFIX), void, env, Reg, Reg, i32)
    352 #endif
    353 DEF_HELPER_5(glue(pclmulqdq, SUFFIX), void, env, Reg, Reg, Reg, i32)
    354 #endif
    355 
    356 /* F16C helpers */
    357 #if SHIFT >= 1
    358 DEF_HELPER_3(glue(cvtph2ps, SUFFIX), void, env, Reg, Reg)
    359 DEF_HELPER_4(glue(cvtps2ph, SUFFIX), void, env, Reg, Reg, int)
    360 #endif
    361 
    362 /* FMA3 helpers */
    363 #if SHIFT == 1
    364 DEF_HELPER_6(fma4ss, void, env, Reg, Reg, Reg, Reg, int)
    365 DEF_HELPER_6(fma4sd, void, env, Reg, Reg, Reg, Reg, int)
    366 #endif
    367 
    368 #if SHIFT >= 1
    369 DEF_HELPER_7(glue(fma4ps, SUFFIX), void, env, Reg, Reg, Reg, Reg, int, int)
    370 DEF_HELPER_7(glue(fma4pd, SUFFIX), void, env, Reg, Reg, Reg, Reg, int, int)
    371 #endif
    372 
    373 /* AVX helpers */
    374 #if SHIFT >= 1
    375 DEF_HELPER_4(glue(vpermilpd, SUFFIX), void, env, Reg, Reg, Reg)
    376 DEF_HELPER_4(glue(vpermilps, SUFFIX), void, env, Reg, Reg, Reg)
    377 DEF_HELPER_3(glue(vpermilpd_imm, SUFFIX), void, Reg, Reg, i32)
    378 DEF_HELPER_3(glue(vpermilps_imm, SUFFIX), void, Reg, Reg, i32)
    379 DEF_HELPER_4(glue(vpsrlvd, SUFFIX), void, env, Reg, Reg, Reg)
    380 DEF_HELPER_4(glue(vpsravd, SUFFIX), void, env, Reg, Reg, Reg)
    381 DEF_HELPER_4(glue(vpsllvd, SUFFIX), void, env, Reg, Reg, Reg)
    382 DEF_HELPER_4(glue(vpsrlvq, SUFFIX), void, env, Reg, Reg, Reg)
    383 DEF_HELPER_4(glue(vpsravq, SUFFIX), void, env, Reg, Reg, Reg)
    384 DEF_HELPER_4(glue(vpsllvq, SUFFIX), void, env, Reg, Reg, Reg)
    385 DEF_HELPER_3(glue(vtestps, SUFFIX), void, env, Reg, Reg)
    386 DEF_HELPER_3(glue(vtestpd, SUFFIX), void, env, Reg, Reg)
    387 DEF_HELPER_4(glue(vpmaskmovd_st, SUFFIX), void, env, Reg, Reg, tl)
    388 DEF_HELPER_4(glue(vpmaskmovq_st, SUFFIX), void, env, Reg, Reg, tl)
    389 DEF_HELPER_4(glue(vpmaskmovd, SUFFIX), void, env, Reg, Reg, Reg)
    390 DEF_HELPER_4(glue(vpmaskmovq, SUFFIX), void, env, Reg, Reg, Reg)
    391 DEF_HELPER_6(glue(vpgatherdd, SUFFIX), void, env, Reg, Reg, Reg, tl, i32)
    392 DEF_HELPER_6(glue(vpgatherdq, SUFFIX), void, env, Reg, Reg, Reg, tl, i32)
    393 DEF_HELPER_6(glue(vpgatherqd, SUFFIX), void, env, Reg, Reg, Reg, tl, i32)
    394 DEF_HELPER_6(glue(vpgatherqq, SUFFIX), void, env, Reg, Reg, Reg, tl, i32)
    395 #if SHIFT == 2
    396 DEF_HELPER_3(vpermd_ymm, void, Reg, Reg, Reg)
    397 DEF_HELPER_4(vpermdq_ymm, void, Reg, Reg, Reg, i32)
    398 DEF_HELPER_3(vpermq_ymm, void, Reg, Reg, i32)
    399 #endif
    400 #endif
    401 
    402 #undef SHIFT
    403 #undef Reg
    404 #undef SUFFIX
    405 
    406 #undef SSE_HELPER_B
    407 #undef SSE_HELPER_W
    408 #undef SSE_HELPER_L
    409 #undef SSE_HELPER_Q
    410 #undef SSE_HELPER_S3
    411 #undef SSE_HELPER_S4
    412 #undef SSE_HELPER_P3
    413 #undef SSE_HELPER_P4
    414 #undef SSE_HELPER_CMP
    415 #undef UNPCK_OP