Lines Matching refs:pfx
683 static Bool IS_VALID_PFX ( Prefix pfx ) {
684 return toBool((pfx & 0xFFFF0000) == PFX_EMPTY);
687 static Bool haveREX ( Prefix pfx ) {
688 return toBool(pfx & PFX_REX);
691 static Int getRexW ( Prefix pfx ) {
692 return (pfx & PFX_REXW) ? 1 : 0;
695 static Int getRexR ( Prefix pfx ) {
696 return (pfx & PFX_REXR) ? 1 : 0;
699 static Int getRexX ( Prefix pfx ) {
700 return (pfx & PFX_REXX) ? 1 : 0;
702 static Int getRexB ( Prefix pfx ) {
703 return (pfx & PFX_REXB) ? 1 : 0;
708 static Bool haveF2orF3 ( Prefix pfx ) {
709 return toBool((pfx & (PFX_F2|PFX_F3)) > 0);
711 static Bool haveF2 ( Prefix pfx ) {
712 return toBool((pfx & PFX_F2) > 0);
714 static Bool haveF3 ( Prefix pfx ) {
715 return toBool((pfx & PFX_F3) > 0);
718 static Bool have66 ( Prefix pfx ) {
719 return toBool((pfx & PFX_66) > 0);
721 static Bool haveASO ( Prefix pfx ) {
722 return toBool((pfx & PFX_ASO) > 0);
725 /* Return True iff pfx has 66 set and F2 and F3 clear */
726 static Bool have66noF2noF3 ( Prefix pfx )
729 toBool((pfx & (PFX_66|PFX_F2|PFX_F3)) == PFX_66);
732 /* Return True iff pfx has F2 set and 66 and F3 clear */
733 static Bool haveF2no66noF3 ( Prefix pfx )
736 toBool((pfx & (PFX_66|PFX_F2|PFX_F3)) == PFX_F2);
739 /* Return True iff pfx has F3 set and 66 and F2 clear */
740 static Bool haveF3no66noF2 ( Prefix pfx )
743 toBool((pfx & (PFX_66|PFX_F2|PFX_F3)) == PFX_F3);
746 /* Return True iff pfx has F3 set and F2 clear */
747 static Bool haveF3noF2 ( Prefix pfx )
750 toBool((pfx & (PFX_F2|PFX_F3)) == PFX_F3);
753 /* Return True iff pfx has F2 set and F3 clear */
754 static Bool haveF2noF3 ( Prefix pfx )
757 toBool((pfx & (PFX_F2|PFX_F3)) == PFX_F2);
760 /* Return True iff pfx has 66, F2 and F3 clear */
761 static Bool haveNo66noF2noF3 ( Prefix pfx )
764 toBool((pfx & (PFX_66|PFX_F2|PFX_F3)) == 0);
767 /* Return True iff pfx has any of 66, F2 and F3 set */
768 static Bool have66orF2orF3 ( Prefix pfx )
770 return toBool( ! haveNo66noF2noF3(pfx) );
773 /* Return True iff pfx has 66 or F2 set */
774 static Bool have66orF2 ( Prefix pfx )
776 return toBool((pfx & (PFX_66|PFX_F2)) > 0);
1124 static IRExpr* getIReg64rexX ( Prefix pfx, UInt lo3bits )
1127 vassert(IS_VALID_PFX(pfx));
1128 return getIReg64( lo3bits | (getRexX(pfx) << 3) );
1131 static HChar* nameIReg64rexX ( Prefix pfx, UInt lo3bits )
1134 vassert(IS_VALID_PFX(pfx));
1135 return nameIReg( 8, lo3bits | (getRexX(pfx) << 3), False );
1138 static HChar* nameIRegRexB ( Int sz, Prefix pfx, UInt lo3bits )
1141 vassert(IS_VALID_PFX(pfx));
1143 return nameIReg( sz, lo3bits | (getRexB(pfx) << 3),
1144 toBool(sz==1 && !haveREX(pfx)) );
1147 static IRExpr* getIRegRexB ( Int sz, Prefix pfx, UInt lo3bits )
1150 vassert(IS_VALID_PFX(pfx));
1156 offsetIReg( sz, lo3bits | (getRexB(pfx) << 3),
1157 toBool(sz==1 && !haveREX(pfx)) ),
1163 offsetIReg( sz, lo3bits | (getRexB(pfx) << 3),
1164 toBool(sz==1 && !haveREX(pfx)) ),
1170 static void putIRegRexB ( Int sz, Prefix pfx, UInt lo3bits, IRExpr* e )
1173 vassert(IS_VALID_PFX(pfx));
1177 offsetIReg( sz, lo3bits | (getRexB(pfx) << 3),
1178 toBool(sz==1 && !haveREX(pfx)) ),
1192 static UInt gregOfRexRM ( Prefix pfx, UChar mod_reg_rm )
1195 reg += (pfx & PFX_REXR) ? 8 : 0;
1204 static UInt eregOfRexRM ( Prefix pfx, UChar mod_reg_rm )
1209 rm += (pfx & PFX_REXB) ? 8 : 0;
1220 static UInt offsetIRegG ( Int sz, Prefix pfx, UChar mod_reg_rm )
1224 vassert(IS_VALID_PFX(pfx));
1226 reg = gregOfRexRM( pfx, mod_reg_rm );
1227 return offsetIReg( sz, reg, toBool(sz == 1 && !haveREX(pfx)) );
1231 IRExpr* getIRegG ( Int sz, Prefix pfx, UChar mod_reg_rm )
1236 IRExpr_Get( offsetIRegG( sz, pfx, mod_reg_rm ),
1239 return IRExpr_Get( offsetIRegG( sz, pfx, mod_reg_rm ),
1245 void putIRegG ( Int sz, Prefix pfx, UChar mod_reg_rm, IRExpr* e )
1251 stmt( IRStmt_Put( offsetIRegG( sz, pfx, mod_reg_rm ), e ) );
1255 HChar* nameIRegG ( Int sz, Prefix pfx, UChar mod_reg_rm )
1257 return nameIReg( sz, gregOfRexRM(pfx,mod_reg_rm),
1258 toBool(sz==1 && !haveREX(pfx)) );
1267 static UInt offsetIRegE ( Int sz, Prefix pfx, UChar mod_reg_rm )
1271 vassert(IS_VALID_PFX(pfx));
1273 reg = eregOfRexRM( pfx, mod_reg_rm );
1274 return offsetIReg( sz, reg, toBool(sz == 1 && !haveREX(pfx)) );
1278 IRExpr* getIRegE ( Int sz, Prefix pfx, UChar mod_reg_rm )
1283 IRExpr_Get( offsetIRegE( sz, pfx, mod_reg_rm ),
1286 return IRExpr_Get( offsetIRegE( sz, pfx, mod_reg_rm ),
1292 void putIRegE ( Int sz, Prefix pfx, UChar mod_reg_rm, IRExpr* e )
1298 stmt( IRStmt_Put( offsetIRegE( sz, pfx, mod_reg_rm ), e ) );
1302 HChar* nameIRegE ( Int sz, Prefix pfx, UChar mod_reg_rm )
1304 return nameIReg( sz, eregOfRexRM(pfx,mod_reg_rm),
1305 toBool(sz==1 && !haveREX(pfx)) );
2141 HChar* segRegTxt ( Prefix pfx )
2143 if (pfx & PFX_CS) return "%cs:";
2144 if (pfx & PFX_DS) return "%ds:";
2145 if (pfx & PFX_ES) return "%es:";
2146 if (pfx & PFX_FS) return "%fs:";
2147 if (pfx & PFX_GS) return "%gs:";
2148 if (pfx & PFX_SS) return "%ss:";
2159 Prefix pfx, IRExpr* virtual )
2162 if (pfx & PFX_FS) {
2174 if (pfx & PFX_GS) {
2189 if (haveASO(pfx))
2283 VexAbiInfo* vbi, Prefix pfx, Long delta,
2307 DIS(buf, "%s(%s)", segRegTxt(pfx), nameIRegRexB(8,pfx,rm));
2310 handleAddrOverrides(vbi, pfx, getIRegRexB(8,pfx,rm)));
2321 DIS(buf, "%s(%s)", segRegTxt(pfx), nameIRegRexB(8,pfx,rm));
2323 DIS(buf, "%s%lld(%s)", segRegTxt(pfx), d, nameIRegRexB(8,pfx,rm));
2327 handleAddrOverrides(vbi, pfx,
2328 binop(Iop_Add64,getIRegRexB(8,pfx,rm),mkU64(d))));
2338 DIS(buf, "%s%lld(%s)", segRegTxt(pfx), d, nameIRegRexB(8,pfx,rm));
2341 handleAddrOverrides(vbi, pfx,
2342 binop(Iop_Add64,getIRegRexB(8,pfx,rm),mkU64(d))));
2356 DIS(buf, "%s%lld(%%rip)", segRegTxt(pfx), d);
2366 handleAddrOverrides(vbi, pfx,
2394 Bool index_is_SP = toBool(index_r == R_RSP && 0==getRexX(pfx));
2399 DIS(buf, "%s(%s,%s)", segRegTxt(pfx),
2400 nameIRegRexB(8,pfx,base_r),
2401 nameIReg64rexX(pfx,index_r));
2403 DIS(buf, "%s(%s,%s,%d)", segRegTxt(pfx),
2404 nameIRegRexB(8,pfx,base_r),
2405 nameIReg64rexX(pfx,index_r), 1<<scale);
2410 handleAddrOverrides(vbi, pfx,
2412 getIRegRexB(8,pfx,base_r),
2413 binop(Iop_Shl64, getIReg64rexX(pfx,index_r),
2419 DIS(buf, "%s%lld(,%s,%d)", segRegTxt(pfx), d,
2420 nameIReg64rexX(pfx,index_r), 1<<scale);
2424 handleAddrOverrides(vbi, pfx,
2426 binop(Iop_Shl64, getIReg64rexX(pfx,index_r),
2432 DIS(buf, "%s(%s)", segRegTxt(pfx), nameIRegRexB(8,pfx,base_r));
2435 handleAddrOverrides(vbi, pfx, getIRegRexB(8,pfx,base_r)));
2440 DIS(buf, "%s%lld", segRegTxt(pfx), d);
2443 handleAddrOverrides(vbi, pfx, mkU64(d)));
2465 if (index_r == R_RSP && 0==getRexX(pfx)) {
2466 DIS(buf, "%s%lld(%s)", segRegTxt(pfx),
2467 d, nameIRegRexB(8,pfx,base_r));
2470 handleAddrOverrides(vbi, pfx,
2471 binop(Iop_Add64, getIRegRexB(8,pfx,base_r), mkU64(d)) ));
2474 DIS(buf, "%s%lld(%s,%s)", segRegTxt(pfx), d,
2475 nameIRegRexB(8,pfx,base_r),
2476 nameIReg64rexX(pfx,index_r));
2478 DIS(buf, "%s%lld(%s,%s,%d)", segRegTxt(pfx), d,
2479 nameIRegRexB(8,pfx,base_r),
2480 nameIReg64rexX(pfx,index_r), 1<<scale);
2485 handleAddrOverrides(vbi, pfx,
2488 getIRegRexB(8,pfx,base_r),
2490 getIReg64rexX(pfx,index_r), mkU8(scale))),
2512 if (index_r == R_RSP && 0==getRexX(pfx)) {
2513 DIS(buf, "%s%lld(%s)", segRegTxt(pfx),
2514 pfx,base_r));
2517 handleAddrOverrides(vbi, pfx,
2518 binop(Iop_Add64, getIRegRexB(8,pfx,base_r), mkU64(d)) ));
2521 DIS(buf, "%s%lld(%s,%s)", segRegTxt(pfx), d,
2522 nameIRegRexB(8,pfx,base_r),
2523 nameIReg64rexX(pfx,index_r));
2525 DIS(buf, "%s%lld(%s,%s,%d)", segRegTxt(pfx), d,
2526 nameIRegRexB(8,pfx,base_r),
2527 nameIReg64rexX(pfx,index_r), 1<<scale);
2532 handleAddrOverrides(vbi, pfx,
2535 getIRegRexB(8,pfx,base_r),
2537 getIReg64rexX(pfx,index_r), mkU8(scale))),
2554 static UInt lengthAMode ( Prefix pfx, Long delta )
2662 Prefix pfx,
2692 && offsetIRegG(size,pfx,rm) == offsetIRegE(size,pfx,rm)) {
2695 putIRegG(size,pfx,rm, mkU(ty,0));
2698 assign( dst0, getIRegG(size,pfx,rm) );
2699 assign( src, getIRegE(size,pfx,rm) );
2704 putIRegG(size, pfx, rm, mkexpr(dst1));
2709 putIRegG(size, pfx, rm, mkexpr(dst1));
2717 putIRegG(size, pfx, rm, mkexpr(dst1));
2721 nameIRegE(size,pfx,rm),
2722 nameIRegG(size,pfx,rm));
2726 addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
2727 assign( dst0, getIRegG(size,pfx,rm) );
2733 putIRegG(size, pfx, rm, mkexpr(dst1));
2738 putIRegG(size, pfx, rm, mkexpr(dst1));
2746 putIRegG(size, pfx, rm, mkexpr(dst1));
2750 dis_buf, nameIRegG(size, pfx, rm));
2778 Prefix pfx,
2808 && offsetIRegG(size,pfx,rm) == offsetIRegE(size,pfx,rm)) {
2809 putIRegE(size,pfx,rm, mkU(ty,0));
2812 assign(dst0, getIRegE(size,pfx,rm));
2813 assign(src, getIRegG(size,pfx,rm));
2818 putIRegE(size, pfx, rm, mkexpr(dst1));
2823 putIRegE(size, pfx, rm, mkexpr(dst1));
2831 putIRegE(size, pfx, rm, mkexpr(dst1));
2835 nameIRegG(size,pfx,rm),
2836 nameIRegE(size,pfx,rm));
2842 addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
2844 assign(src, getIRegG(size,pfx,rm));
2847 if (pfx & PFX_LOCK) {
2858 if (pfx & PFX_LOCK) {
2870 if (pfx & PFX_LOCK) {
2887 nameIRegG(size,pfx,rm), dis_buf);
2911 Prefix pfx,
2920 putIRegG(size, pfx, rm, getIRegE(size, pfx, rm));
2922 nameIRegE(size,pfx,rm),
2923 nameIRegG(size,pfx,rm));
2929 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
2930 putIRegG(size, pfx, rm, loadLE(szToITy(size), mkexpr(addr)));
2933 nameIRegG(size,pfx,rm));
2957 Prefix pfx,
2966 putIRegE(size, pfx, rm, getIRegG(size, pfx, rm));
2968 nameIRegG(size,pfx,rm),
2969 nameIRegE(size,pfx,rm));
2975 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
2976 storeLE( mkexpr(addr), getIRegG(size, pfx, rm) );
2978 nameIRegG(size,pfx,rm),
3038 Prefix pfx,
3043 putIRegG(szd, pfx, rm,
3046 getIRegE(szs,pfx,rm)));
3050 nameIRegE(szs,pfx,rm),
3051 nameIRegG(szd,pfx,rm));
3059 IRTemp addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
3060 putIRegG(szd, pfx, rm,
3068 nameIRegG(szd,pfx,rm));
3142 Prefix pfx,
3169 assign(dst0, getIRegE(sz,pfx,modrm));
3188 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3193 nameIRegE(sz,pfx,modrm));
3195 addr = disAMode ( &len, vbi, pfx, delta, dis_buf, /*xtra*/d_sz );
3201 if (pfx & PFX_LOCK) {
3212 if (pfx & PFX_LOCK) {
3224 if (pfx & PFX_LOCK) {
3252 Prefix pfx,
3272 assign(dst0, getIRegE(sz, pfx, modrm));
3275 addr = disAMode ( &len, vbi, pfx, delta, dis_buf, /*xtra*/d_sz );
3493 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3501 vex_printf(", %s\n", nameIRegE(sz,pfx,modrm));
3522 Prefix pfx,
3567 assign( t2, widenUto64(getIRegE(sz, pfx, modrm)) );
3571 src_val, nameIRegE(sz,pfx,modrm));
3574 t_addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 1 );
3603 putIRegE(sz, pfx, modrm, narrowTo(ty, mkexpr(t2m)));
3605 if (pfx & PFX_LOCK) {
3713 Prefix pfx, Int sz, Long delta, Bool* decode_OK )
3733 getIRegE(sz,pfx,modrm),
3738 nameIRegE(sz, pfx, modrm));
3746 putIRegE(sz, pfx, modrm,
3748 getIRegE(sz, pfx, modrm)));
3750 nameIRegE(sz, pfx, modrm));
3758 assign(src, getIRegE(sz, pfx, modrm));
3762 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3763 DIP("neg%c %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm));
3768 assign(src, getIRegE(sz,pfx,modrm));
3770 nameIRegE(sz,pfx,modrm) );
3775 assign(src, getIRegE(sz,pfx,modrm));
3777 nameIRegE(sz,pfx,modrm) );
3781 assign( t1, getIRegE(sz, pfx, modrm) );
3784 nameIRegE(sz, pfx, modrm));
3788 assign( t1, getIRegE(sz, pfx, modrm) );
3791 nameIRegE(sz, pfx, modrm));
3798 addr = disAMode ( &len, vbi, pfx, delta, dis_buf,
3826 if (pfx & PFX_LOCK) {
3842 if (pfx & PFX_LOCK) {
3877 Prefix pfx, Long delta, Bool* decode_OK )
3890 assign(t1, getIRegE(1, pfx, modrm));
3894 putIRegE(1, pfx, modrm, mkexpr(t2));
3899 putIRegE(1, pfx, modrm, mkexpr(t2));
3908 nameIRegE(1, pfx, modrm));
3910 IRTemp addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
3915 if (pfx & PFX_LOCK) {
3925 if (pfx & PFX_LOCK) {
3947 Prefix pfx, Int sz, Long delta,
3964 assign(t1, getIRegE(sz,pfx,modrm));
3971 putIRegE(sz,pfx,modrm, mkexpr(t2));
3978 putIRegE(sz,pfx,modrm, mkexpr(t2));
3985 assign(t3, getIRegE(sz,pfx,modrm));
4000 assign(t3, getIRegE(sz,pfx,modrm));
4012 nameIRegE(sz, pfx, modrm));
4014 addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
4024 if (pfx & PFX_LOCK) {
4036 if (pfx & PFX_LOCK) {
4121 void dis_string_op( void (*dis_OP)( Int, IRTemp, Prefix pfx ),
4122 Int sz, HChar* name, Prefix pfx )
4127 vassert(pfx == clearSegBits(pfx));
4129 dis_OP( sz, t_inc, pfx );
4134 void dis_MOVS ( Int sz, IRTemp t_inc, Prefix pfx )
4141 if (haveASO(pfx)) {
4153 if (haveASO(pfx)) {
4162 void dis_LODS ( Int sz, IRTemp t_inc, Prefix pfx )
4168 if (haveASO(pfx))
4176 if (haveASO(pfx))
4182 void dis_STOS ( Int sz, IRTemp t_inc, Prefix pfx )
4191 if (haveASO(pfx))
4199 if (haveASO(pfx))
4205 void dis_CMPS ( Int sz, IRTemp t_inc, Prefix pfx )
4214 if (haveASO(pfx)) {
4230 if (haveASO(pfx)) {
4239 void dis_SCAS ( Int sz, IRTemp t_inc, Prefix pfx )
4249 if (haveASO(pfx))
4259 if (haveASO(pfx))
4272 Prefix pfx )
4280 vassert(pfx == clearSegBits(pfx));
4282 if (haveASO(pfx)) {
4294 if (haveASO(pfx))
4300 dis_OP (sz, t_inc, pfx);
4321 Prefix pfx,
4333 assign( tg, getIRegG(size, pfx, rm) );
4335 assign( te, getIRegE(size, pfx, rm) );
4337 IRTemp addr = disAMode( &alen, vbi, pfx, delta0, dis_buf, 0 );
4345 putIRegG(size, pfx, rm, mkexpr(resLo) );
4349 nameIRegE(size,pfx,rm),
4350 nameIRegG(size,pfx,rm));
4355 nameIRegG(size,pfx,rm));
4364 Prefix pfx,
4381 assign(te, getIRegE(size, pfx, rm));
4384 IRTemp addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
4399 putIRegG(size, pfx, rm, mkexpr(resLo));
4403 ( epartIsReg(rm) ? nameIRegE(size,pfx,rm) : dis_buf ),
4404 nameIRegG(size,pfx,rm) );
4882 VexAbiInfo* vbi, Prefix pfx, Long delta )
4901 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
5038 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
5534 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
5666 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
5882 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
5991 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6209 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6329 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6506 Prefix pfx,
6612 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6656 Prefix pfx, Long delta,
6676 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
6788 VexAbiInfo* vbi, Prefix pfx, Int sz, Long delta )
6811 getIReg32(eregOfRexRM(pfx,modrm)) ) );
6813 nameIReg32(eregOfRexRM(pfx,modrm)),
6816 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6833 getIReg64(eregOfRexRM(pfx,modrm)) );
6835 nameIReg64(eregOfRexRM(pfx,modrm)),
6838 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6856 putIReg32( eregOfRexRM(pfx,modrm),
6860 nameIReg32(eregOfRexRM(pfx,modrm)));
6862 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6875 putIReg64( eregOfRexRM(pfx,modrm),
6879 nameIReg64(eregOfRexRM(pfx,modrm)));
6881 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6895 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
6905 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6916 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
6924 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6937 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "padd", True );
6943 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
6945 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "padds", True );
6952 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "paddus", True );
6960 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "psub", True );
6967 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "psubs", True );
6974 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "psubus", True );
6980 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pmulhw", False );
6986 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pmullw", False );
6991 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pmaddwd", False );
6999 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pcmpeq", True );
7007 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pcmpgt", True );
7013 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "packssdw", False );
7019 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "packsswb", False );
7025 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "packuswb", False );
7032 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
7034 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "punpckh", True );
7041 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
7043 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "punpckl", True );
7049 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pand", False );
7055 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pandn", False );
7061 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "por", False );
7067 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pxor", False );
7071 delta = dis_MMX_shiftG_byE(vbi, pfx, delta, _name, _op); \
7142 assign( addr, handleAddrOverrides( vbi, pfx, getIReg64(R_RDI) ));
7224 Prefix pfx,
7266 assign( gsrc, getIRegG(sz, pfx, modrm) );
7270 assign( esrc, getIRegE(sz, pfx, modrm) );
7274 nameIRegG(sz, pfx, modrm), nameIRegE(sz, pfx, modrm));
7276 addr = disAMode ( &len, vbi, pfx, delta, dis_buf,
7284 nameIRegG(sz, pfx, modrm), dis_buf);
7380 putIRegE(sz, pfx, modrm, mkexpr(resTy));
7409 Prefix pfx, Int sz, Long delta, BtOp op )
7431 assign( t_bitno0, widenSto64(getIRegG(sz, pfx, modrm)) );
7456 storeLE( mkexpr(t_rsp), getIRegE(sz, pfx, modrm) );
7468 t_addr0 = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
7519 if ((pfx & PFX_LOCK) && !epartIsReg(modrm)) {
7551 putIRegE(sz, pfx, modrm, loadLE(szToITy(sz), mkexpr(t_rsp)) );
7556 nameBtOp(op), nameISize(sz), nameIRegG(sz, pfx, modrm),
7557 ( epartIsReg(modrm) ? nameIRegE(sz, pfx, modrm) : dis_buf ) );
7567 Prefix pfx, Int sz, Long delta, Bool fwds )
7586 assign( src, getIRegE(sz, pfx, modrm) );
7589 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
7596 ( isReg ? nameIRegE(sz, pfx, modrm) : dis_buf ),
7597 nameIRegG(sz, pfx, modrm));
7657 widenUto64( getIRegG( sz, pfx, modrm ) ),
7675 putIRegG( sz, pfx, modrm, mkexpr(dst) );
7683 void codegen_xchg_rAX_Reg ( Prefix pfx, Int sz, UInt regLo3 )
7692 assign( t2, getIRegRexB(8, pfx, regLo3) );
7694 putIRegRexB(8, pfx, regLo3, mkexpr(t1) );
7697 assign( t2, getIRegRexB(4, pfx, regLo3) );
7699 putIRegRexB(4, pfx, regLo3, mkexpr(t1) );
7702 assign( t2, getIRegRexB(2, pfx, regLo3) );
7704 putIRegRexB(2, pfx, regLo3, mkexpr(t1) );
7708 nameIRegRexB(sz,pfx, regLo3));
7767 Prefix pfx,
7797 assign( dest, getIRegE(size, pfx, rm) );
7799 assign( src, getIRegG(size, pfx, rm) );
7806 putIRegE(size, pfx, rm, mkexpr(dest2));
7808 nameIRegG(size,pfx,rm),
7809 nameIRegE(size,pfx,rm) );
7811 else if (!epartIsReg(rm) && !(pfx & PFX_LOCK)) {
7813 addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
7816 assign( src, getIRegG(size, pfx, rm) );
7825 nameIRegG(size,pfx,rm), dis_buf);
7827 else if (!epartIsReg(rm) && (pfx & PFX_LOCK)) {
7833 addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
7835 assign( src, getIRegG(size, pfx, rm) );
7846 nameIRegG(size,pfx,rm), dis_buf);
7874 Prefix pfx,
7888 assign( tmps, getIRegE(sz, pfx, rm) );
7889 assign( tmpd, getIRegG(sz, pfx, rm) );
7891 putIRegG( sz, pfx, rm,
7898 nameIRegE(sz,pfx,rm),
7899 nameIRegG(sz,pfx,rm));
7905 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
7907 assign( tmpd, getIRegG(sz, pfx, rm) );
7909 putIRegG( sz, pfx, rm,
7918 nameIRegG(sz,pfx,rm));
7927 Prefix pfx, Int sz, Long delta0 )
7951 assign( tmpd, getIRegE(sz, pfx, rm) );
7952 assign( tmpt0, getIRegG(sz, pfx, rm) );
7956 putIRegG(sz, pfx, rm, mkexpr(tmpd));
7957 putIRegE(sz, pfx, rm, mkexpr(tmpt1));
7959 nameISize(sz), nameIRegG(sz,pfx,rm),
7960 nameIRegE(sz,pfx,rm));
7964 else if (!epartIsReg(rm) && !(pfx & PFX_LOCK)) {
7966 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
7968 assign( tmpt0, getIRegG(sz, pfx, rm) );
7973 putIRegG(sz, pfx, rm, mkexpr(tmpd));
7975 nameISize(sz), nameIRegG(sz,pfx,rm), dis_buf);
7979 else if (!epartIsReg(rm) && (pfx & PFX_LOCK)) {
7981 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
7983 assign( tmpt0, getIRegG(sz, pfx, rm) );
7989 putIRegG(sz, pfx, rm, mkexpr(tmpd));
7991 nameISize(sz), nameIRegG(sz,pfx,rm), dis_buf);
8108 Prefix pfx, Long delta,
8118 = invertG ? unop(Iop_NotV128, getXMMReg(gregOfRexRM(pfx,rm)))
8119 : getXMMReg(gregOfRexRM(pfx,rm));
8121 putXMMReg( gregOfRexRM(pfx,rm),
8123 getXMMReg(eregOfRexRM(pfx,rm))) );
8125 nameXMMReg(eregOfRexRM(pfx,rm)),
8126 nameXMMReg(gregOfRexRM(pfx,rm)) );
8129 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8130 putXMMReg( gregOfRexRM(pfx,rm),
8135 nameXMMReg(gregOfRexRM(pfx,rm)) );
8145 Prefix pfx, Long delta,
8148 return dis_SSE_E_to_G_all_wrk( vbi, pfx, delta, opname, op, False );
8155 Prefix pfx, Long delta,
8158 return dis_SSE_E_to_G_all_wrk( vbi, pfx, delta, opname, op, True );
8165 Prefix pfx, Long delta,
8172 IRExpr* gpart = getXMMReg(gregOfRexRM(pfx,rm));
8174 putXMMReg( gregOfRexRM(pfx,rm),
8176 getXMMReg(eregOfRexRM(pfx,rm))) );
8178 nameXMMReg(eregOfRexRM(pfx,rm)),
8179 nameXMMReg(gregOfRexRM(pfx,rm)) );
8185 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8188 putXMMReg( gregOfRexRM(pfx,rm),
8192 nameXMMReg(gregOfRexRM(pfx,rm)) );
8201 Prefix pfx, Long delta,
8208 IRExpr* gpart = getXMMReg(gregOfRexRM(pfx,rm));
8210 putXMMReg( gregOfRexRM(pfx,rm),
8212 getXMMReg(eregOfRexRM(pfx,rm))) );
8214 nameXMMReg(eregOfRexRM(pfx,rm)),
8215 nameXMMReg(gregOfRexRM(pfx,rm)) );
8221 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8224 putXMMReg( gregOfRexRM(pfx,rm),
8228 nameXMMReg(gregOfRexRM(pfx,rm)) );
8238 Prefix pfx, Long delta,
8247 putXMMReg( gregOfRexRM(pfx,rm),
8248 unop(op, getXMMReg(eregOfRexRM(pfx,rm))) );
8250 nameXMMReg(eregOfRexRM(pfx,rm)),
8251 nameXMMReg(gregOfRexRM(pfx,rm)) );
8254 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8255 putXMMReg( gregOfRexRM(pfx,rm),
8259 nameXMMReg(gregOfRexRM(pfx,rm)) );
8269 Prefix pfx, Long delta,
8282 assign( oldG0, getXMMReg(gregOfRexRM(pfx,rm)) );
8288 getXMMRegLane32(eregOfRexRM(pfx,rm), 0)) );
8289 putXMMReg( gregOfRexRM(pfx,rm), unop(op, mkexpr(oldG1)) );
8291 nameXMMReg(eregOfRexRM(pfx,rm)),
8292 nameXMMReg(gregOfRexRM(pfx,rm)) );
8295 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8300 putXMMReg( gregOfRexRM(pfx,rm), unop(op, mkexpr(oldG1)) );
8303 nameXMMReg(gregOfRexRM(pfx,rm)) );
8313 Prefix pfx, Long delta,
8326 assign( oldG0, getXMMReg(gregOfRexRM(pfx,rm)) );
8332 getXMMRegLane64(eregOfRexRM(pfx,rm), 0)) );
8333 putXMMReg( gregOfRexRM(pfx,rm), unop(op, mkexpr(oldG1)) );
8335 nameXMMReg(eregOfRexRM(pfx,rm)),
8336 nameXMMReg(gregOfRexRM(pfx,rm)) );
8339 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8344 putXMMReg( gregOfRexRM(pfx,rm), unop(op, mkexpr(oldG1)) );
8347 nameXMMReg(gregOfRexRM(pfx,rm)) );
8359 Prefix pfx, Long delta,
8368 IRExpr* gpart = getXMMReg(gregOfRexRM(pfx,rm));
8371 epart = getXMMReg(eregOfRexRM(pfx,rm));
8373 nameXMMReg(eregOfRexRM(pfx,rm)),
8374 nameXMMReg(gregOfRexRM(pfx,rm)) );
8377 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8381 nameXMMReg(gregOfRexRM(pfx,rm)) );
8384 putXMMReg( gregOfRexRM(pfx,rm),
8446 Prefix pfx, Long delta,
8461 assign( plain, binop(op, getXMMReg(gregOfRexRM(pfx,rm)),
8462 getXMMReg(eregOfRexRM(pfx,rm))) );
8466 nameXMMReg(eregOfRexRM(pfx,rm)),
8467 nameXMMReg(gregOfRexRM(pfx,rm)) );
8469 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
8475 getXMMReg(gregOfRexRM(pfx,rm)),
8485 nameXMMReg(gregOfRexRM(pfx,rm)) );
8489 putXMMReg( gregOfRexRM(pfx,rm),
8495 putXMMReg( gregOfRexRM(pfx,rm),
8499 putXMMReg( gregOfRexRM(pfx,rm), mkexpr(plain) );
8510 Prefix pfx, Long delta,
8523 assign( amt, getXMMRegLane32(eregOfRexRM(pfx,rm), 0) );
8525 nameXMMReg(eregOfRexRM(pfx,rm)),
8526 nameXMMReg(gregOfRexRM(pfx,rm)) );
8529 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8533 nameXMMReg(gregOfRexRM(pfx,rm)) );
8536 assign( g0, getXMMReg(gregOfRexRM(pfx,rm)) );
8578 putXMMReg( gregOfRexRM(pfx,rm), mkexpr(g1) );
8586 ULong dis_SSE_shiftE_imm ( Prefix pfx,
8601 nameXMMReg(eregOfRexRM(pfx,rm)) );
8602 assign( e0, getXMMReg(eregOfRexRM(pfx,rm)) );
8633 putXMMReg( eregOfRexRM(pfx,rm), mkexpr(e1) );
9086 /* pfx holds the summary of prefixes. */
9087 Prefix pfx = PFX_EMPTY;
9165 /* Eat prefixes, summarising the result in pfx and sz, and rejecting
9172 case 0x66: pfx |= PFX_66; break;
9173 case 0x67: pfx |= PFX_ASO; break;
9174 case 0xF2: pfx |= PFX_F2; break;
9175 case 0xF3: pfx |= PFX_F3; break;
9176 case 0xF0: pfx |= PFX_LOCK; *expect_CAS = True; break;
9177 case 0x2E: pfx |= PFX_CS; break;
9178 case 0x3E: pfx |= PFX_DS; break;
9179 case 0x26: pfx |= PFX_ES; break;
9180 case 0x64: pfx |= PFX_FS; break;
9181 case 0x65: pfx |= PFX_GS; break;
9182 case 0x36: pfx |= PFX_SS; break;
9184 pfx |= PFX_REX;
9185 if (pre & (1<<3)) pfx |= PFX_REXW;
9186 if (pre & (1<<2)) pfx |= PFX_REXR;
9187 if (pre & (1<<1)) pfx |= PFX_REXX;
9188 if (pre & (1<<0)) pfx |= PFX_REXB;
9201 if (pfx & PFX_F2) n++;
9202 if (pfx & PFX_F3) n++;
9207 if (pfx & PFX_CS) n++;
9208 if (pfx & PFX_DS) n++;
9209 if (pfx & PFX_ES) n++;
9210 if (pfx & PFX_FS) n++;
9211 if (pfx & PFX_GS) n++;
9212 if (pfx & PFX_SS) n++;
9218 if ((pfx & PFX_FS) && !vbi->guest_amd64_assume_fs_is_zero)
9222 if ((pfx & PFX_GS) && !vbi->guest_amd64_assume_gs_is_0x60)
9227 if (pfx & PFX_66) sz = 2;
9228 if ((pfx & PFX_REX) && (pfx & PFX_REXW)) sz = 8;
9234 if (pfx & PFX_LOCK) {
9267 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
9269 && !epartIsReg(insn[2]) && gregOfRexRM(pfx,insn[2]) == 0) {
9274 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9340 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
9342 && !epartIsReg(insn[2]) && gregOfRexRM(pfx,insn[2]) == 1) {
9347 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9416 if (haveNo66noF2noF3(pfx) && sz == 4
9418 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "addps", Iop_Add32Fx4 );
9423 if (haveF3no66noF2(pfx) && sz == 4
9425 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta+2, "addss", Iop_Add32F0x4 );
9430 if (haveNo66noF2noF3(pfx) && sz == 4
9432 delta = dis_SSE_E_to_G_all_invG( vbi, pfx, delta+2, "andnps", Iop_AndV128 );
9437 if (haveNo66noF2noF3(pfx) && sz == 4
9439 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "andps", Iop_AndV128 );
9444 if (haveNo66noF2noF3(pfx) && sz == 4
9446 delta = dis_SSEcmp_E_to_G( vbi, pfx, delta+2, "cmpps", True, 4 );
9451 if (haveF3no66noF2(pfx) && sz == 4
9453 delta = dis_SSEcmp_E_to_G( vbi, pfx, delta+2, "cmpss", False, 4 );
9459 if (haveNo66noF2noF3(pfx) && sz == 4
9465 assign( argR, getXMMRegLane32F( eregOfRexRM(pfx,modrm),
9469 nameXMMReg(eregOfRexRM(pfx,modrm)),
9470 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9472 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9477 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9479 assign( argL, getXMMRegLane32F( gregOfRexRM(pfx,modrm),
9499 if (haveNo66noF2noF3(pfx) && sz == 4
9510 nameXMMReg(gregOfRexRM(pfx,modrm)));
9512 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9516 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9522 gregOfRexRM(pfx,modrm), 0,
9529 gregOfRexRM(pfx,modrm), 1,
9541 if (haveF3no66noF2(pfx) && (sz == 4 || sz == 8)
9551 assign( arg32, getIReg32(eregOfRexRM(pfx,modrm)) );
9553 DIP("cvtsi2ss %s,%s\n", nameIReg32(eregOfRexRM(pfx,modrm)),
9554 nameXMMReg(gregOfRexRM(pfx,modrm)));
9556 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9560 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9563 gregOfRexRM(pfx,modrm), 0,
9571 assign( arg64, getIReg64(eregOfRexRM(pfx,modrm)) );
9573 DIP("cvtsi2ssq %s,%s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
9574 nameXMMReg(gregOfRexRM(pfx,modrm)));
9576 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9580 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9583 gregOfRexRM(pfx,modrm), 0,
9596 if (haveNo66noF2noF3(pfx) && sz == 4
9609 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
9610 assign(f32hi, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 1));
9612 nameXMMReg(eregOfRexRM(pfx,modrm)),
9615 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9660 if (haveF3no66noF2(pfx)
9671 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
9673 nameXMMReg(eregOfRexRM(pfx,modrm)),
9674 nameIReg(sz, gregOfRexRM(pfx,modrm), False));
9676 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9681 nameIReg(sz, gregOfRexRM(pfx,modrm), False));
9691 putIReg32( gregOfRexRM(pfx,modrm),
9696 putIReg64( gregOfRexRM(pfx,modrm),
9706 if (haveNo66noF2noF3(pfx) && sz == 4
9708 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "divps", Iop_Div32Fx4 );
9713 if (haveF3no66noF2(pfx) && sz == 4
9715 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta+2, "divss", Iop_Div32F0x4 );
9721 && haveNo66noF2noF3(pfx)
9728 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9770 if (haveNo66noF2noF3(pfx) && sz == 4
9773 delta = dis_MMX( &ok, vbi, pfx, sz, delta+1 );
9780 if (haveNo66noF2noF3(pfx) && sz == 4
9782 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "maxps", Iop_Max32Fx4 );
9787 if (haveF3no66noF2(pfx) && sz == 4
9789 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta+2, "maxss", Iop_Max32F0x4 );
9794 if (haveNo66noF2noF3(pfx) && sz == 4
9796 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "minps", Iop_Min32Fx4 );
9801 if (haveF3no66noF2(pfx) && sz == 4
9803 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta+2, "minss", Iop_Min32F0x4 );
9809 if (haveNo66noF2noF3(pfx)
9814 putXMMReg( gregOfRexRM(pfx,modrm),
9815 getXMMReg( eregOfRexRM(pfx,modrm) ));
9816 DIP("mov[ua]ps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
9817 nameXMMReg(gregOfRexRM(pfx,modrm)));
9820 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9823 putXMMReg( gregOfRexRM(pfx,modrm),
9826 nameXMMReg(gregOfRexRM(pfx,modrm)));
9834 if (haveNo66noF2noF3(pfx)
9841 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9844 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
9845 DIP("mov[ua]ps %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
9854 if (haveNo66noF2noF3(pfx)
9860 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
9861 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ) );
9862 DIP("movhps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
9863 nameXMMReg(gregOfRexRM(pfx,modrm)));
9865 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9867 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
9870 nameXMMReg( gregOfRexRM(pfx,modrm) ));
9876 if (haveNo66noF2noF3(pfx)
9881 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9884 getXMMRegLane64( gregOfRexRM(pfx,insn[2]),
9886 DIP("movhps %s,%s\n", nameXMMReg( gregOfRexRM(pfx,insn[2]) ),
9895 if (haveNo66noF2noF3(pfx)
9901 putXMMRegLane64( gregOfRexRM(pfx,modrm),
9903 getXMMRegLane64( eregOfRexRM(pfx,modrm), 1 ));
9904 DIP("movhlps %s, %s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
9905 nameXMMReg(gregOfRexRM(pfx,modrm)));
9907 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
9909 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0/*lower lane*/,
9912 dis_buf, nameXMMReg( gregOfRexRM(pfx,modrm) ));
9918 if (haveNo66noF2noF3(pfx)
9923 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9926 getXMMRegLane64( gregOfRexRM(pfx,insn[2]),
9928 DIP("movlps %s, %s\n", nameXMMReg( gregOfRexRM(pfx,insn[2]) ),
9937 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
9965 src = eregOfRexRM(pfx,modrm);
9978 putIReg32( gregOfRexRM(pfx,modrm),
9985 nameIReg32(gregOfRexRM(pfx,modrm)));
9993 if ( ( (haveNo66noF2noF3(pfx) && sz == 4)
9994 || (have66noF2noF3(pfx) && sz == 2)
9999 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10001 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
10004 nameXMMReg(gregOfRexRM(pfx,modrm)));
10017 if (haveNo66noF2noF3(pfx) && sz == 4
10022 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10034 if (haveF3no66noF2(pfx)
10039 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0,
10040 getXMMRegLane32( eregOfRexRM(pfx,modrm), 0 ));
10041 DIP("movss %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10042 nameXMMReg(gregOfRexRM(pfx,modrm)));
10045 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10046 putXMMReg( gregOfRexRM(pfx,modrm), mkV128(0) );
10047 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0,
10050 nameXMMReg(gregOfRexRM(pfx,modrm)));
10058 if (haveF3no66noF2(pfx) && sz == 4
10064 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10066 getXMMRegLane32(gregOfRexRM(pfx,modrm), 0) );
10067 DIP("movss %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
10075 if (haveNo66noF2noF3(pfx) && sz == 4
10077 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "mulps", Iop_Mul32Fx4 );
10082 if (haveF3no66noF2(pfx) && sz == 4
10084 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta+2, "mulss", Iop_Mul32F0x4 );
10089 if (haveNo66noF2noF3(pfx) && sz == 4
10091 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "orps", Iop_OrV128 );
10097 if (haveNo66noF2noF3(pfx) && sz == 4
10101 vbi, pfx, delta+2, insn[1], "pavgb", False );
10107 if (haveNo66noF2noF3(pfx) && sz == 4
10111 vbi, pfx, delta+2, insn[1], "pavgw", False );
10118 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
10135 putIReg64(gregOfRexRM(pfx,modrm), unop(Iop_16Uto64, mkexpr(t5)));
10137 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_16Uto32, mkexpr(t5)));
10140 sz==8 ? nameIReg64(gregOfRexRM(pfx,modrm))
10141 : nameIReg32(gregOfRexRM(pfx,modrm))
10155 if (haveNo66noF2noF3(pfx)
10172 assign(t4, getIReg16(eregOfRexRM(pfx,modrm)));
10176 nameIReg16(eregOfRexRM(pfx,modrm)),
10179 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 1 );
10201 if (haveNo66noF2noF3(pfx) && sz == 4
10205 vbi, pfx, delta+2, insn[1], "pmaxsw", False );
10211 if (haveNo66noF2noF3(pfx) && sz == 4
10215 vbi, pfx
10221 if (haveNo66noF2noF3(pfx) && sz == 4
10225 vbi, pfx, delta+2, insn[1], "pminsw", False );
10231 if (haveNo66noF2noF3(pfx) && sz == 4
10235 vbi, pfx, delta+2, insn[1], "pminub", False );
10243 if (haveNo66noF2noF3(pfx) && sz == 4
10256 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_64to32,mkexpr(t1)));
10258 nameIReg32(gregOfRexRM(pfx,modrm)));
10267 if (haveNo66noF2noF3(pfx) && sz == 4
10271 vbi, pfx, delta+2, insn[1], "pmuluh", False );
10280 && haveNo66noF2noF3(pfx)
10288 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10305 if (haveNo66noF2noF3(pfx) && sz == 4
10309 vbi, pfx, delta+2, insn[1], "psadbw", False );
10315 if (haveNo66noF2noF3(pfx) && sz == 4
10332 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf,
10354 if (haveNo66noF2noF3(pfx) && sz == 4
10356 delta = dis_SSE_E_to_G_unary_all( vbi, pfx, delta+2,
10362 if (haveF3no66noF2(pfx) && sz == 4
10364 delta = dis_SSE_E_to_G_unary_lo32( vbi, pfx, delta+2,
10370 if (haveNo66noF2noF3(pfx) && sz == 4
10372 delta = dis_SSE_E_to_G_unary_all( vbi, pfx, delta+2,
10378 if (haveF3no66noF2(pfx) && sz == 4
10380 delta = dis_SSE_E_to_G_unary_lo32( vbi, pfx, delta+2,
10386 if (haveNo66noF2noF3(pfx)
10399 if (haveNo66noF2noF3(pfx) && sz == 4
10408 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
10411 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10415 nameXMMReg(eregOfRexRM(pfx,modrm)),
10416 nameXMMReg(gregOfRexRM(pfx,modrm)));
10418 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf,
10425 nameXMMReg(gregOfRexRM(pfx,modrm)));
10435 gregOfRexRM(pfx,modrm),
10447 if (haveNo66noF2noF3(pfx) && sz == 4
10449 delta = dis_SSE_E_to_G_unary_all( vbi, pfx, delta+2,
10455 if (haveF3no66noF2(pfx) && sz == 4
10457 delta = dis_SSE_E_to_G_unary_lo32( vbi, pfx, delta+2,
10464 && haveNo66noF2noF3(pfx)
10468 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10490 if (haveNo66noF2noF3(pfx) && sz == 4
10492 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "subps", Iop_Sub32Fx4 );
10497 if (haveF3no66noF2(pfx) && sz == 4
10499 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta+2, "subss", Iop_Sub32F0x4 );
10506 if (haveNo66noF2noF3(pfx) && sz == 4
10515 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
10518 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10521 nameXMMReg(eregOfRexRM(pfx,modrm)),
10522 nameXMMReg(gregOfRexRM(pfx,modrm)));
10524 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10529 nameXMMReg(gregOfRexRM(pfx,modrm)));
10536 putXMMReg( gregOfRexRM(pfx,modrm), mk128from32s( s3, d3, s2, d2 ) );
10538 putXMMReg( gregOfRexRM(pfx,modrm), mk128from32s( s1, d1, s0, d0 ) );
10545 if (haveNo66noF2noF3(pfx) && sz == 4
10547 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "xorps", Iop_XorV128 );
10560 if (have66noF2noF3(pfx)
10563 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "addpd", Iop_Add64Fx2 );
10568 if (haveF2no66noF3(pfx)
10571 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta+2, "addsd", Iop_Add64F0x2 );
10576 if (have66noF2noF3(pfx) && sz == 2
10578 delta = dis_SSE_E_to_G_all_invG( vbi, pfx, delta+2, "andnpd", Iop_AndV128 );
10583 if (have66noF2noF3(pfx) && sz == 2
10585 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "andpd", Iop_AndV128 );
10590 if (have66noF2noF3(pfx) && sz == 2
10592 delta = dis_SSEcmp_E_to_G( vbi, pfx, delta+2, "cmppd", True, 8 );
10597 if (haveF2no66noF3(pfx) && sz == 4
10599 delta = dis_SSEcmp_E_to_G( vbi, pfx, delta+2, "cmpsd", False, 8 );
10605 if (have66noF2noF3(pfx) && sz == 2
10611 assign( argR, getXMMRegLane64F( eregOfRexRM(pfx,modrm),
10615 nameXMMReg(eregOfRexRM(pfx,modrm)),
10616 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10618 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10623 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10625 assign( argL, getXMMRegLane64F( gregOfRexRM(pfx,modrm),
10643 if (haveF3no66noF2(pfx) && insn[0] == 0x0F && insn[1] == 0xE6) {
10649 assign( arg64, getXMMRegLane64(eregOfRexRM(pfx,modrm), 0) );
10651 DIP("cvtdq2pd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10652 nameXMMReg(gregOfRexRM(pfx,modrm)));
10654 pfx, delta+2, dis_buf, 0 );
10658 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10662 gregOfRexRM(pfx,modrm), 0,
10667 gregOfRexRM(pfx,modrm), 1,
10676 if (haveNo66noF2noF3(pfx) && sz == 4
10683 assign( argV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10685 DIP("cvtdq2ps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10686 nameXMMReg(gregOfRexRM(pfx,modrm)));
10688 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10692 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10702 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 3, CVT(t3) );
10703 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 2, CVT(t2) );
10704 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 1, CVT(t1) );
10705 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 0, CVT(t0) );
10717 if ( ( (haveF2no66noF3(pfx) && sz == 4)
10718 || (have66noF2noF3(pfx) && sz == 2)
10727 assign( argV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10730 nameXMMReg(eregOfRexRM(pfx,modrm)),
10731 nameXMMReg(gregOfRexRM(pfx,modrm)));
10733 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10738 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10758 putXMMRegLane32( gregOfRexRM(pfx,modrm), 3, mkU32(0) );
10759 putXMMRegLane32( gregOfRexRM(pfx,modrm), 2, mkU32(0) );
10760 putXMMRegLane32( gregOfRexRM(pfx,modrm), 1, CVT(t1) );
10761 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0, CVT(t0) );
10772 if (have66noF2noF3(pfx) && sz == 2
10785 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
10786 assign(f64hi, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 1));
10788 nameXMMReg(eregOfRexRM(pfx,modrm)),
10791 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10826 if (have66noF2noF3(pfx) && sz == 2
10833 assign( argV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10835 DIP("cvtpd2ps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10836 nameXMMReg(gregOfRexRM(pfx,modrm)));
10838 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10842 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10857 putXMMRegLane32( gregOfRexRM(pfx,modrm), 3, mkU32(0) );
10858 putXMMRegLane32( gregOfRexRM(pfx,modrm), 2, mkU32(0) );
10859 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 1, CVT(t1) );
10860 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 0, CVT(t0) );
10869 if (have66noF2noF3(pfx) && sz == 2
10885 nameXMMReg(gregOfRexRM(pfx,modrm)));
10887 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10891 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10895 gregOfRexRM(pfx,modrm), 0,
10900 gregOfRexRM(pfx,modrm), 1,
10911 if ( ( (have66noF2noF3(pfx) && sz == 2)
10912 || (haveF3no66noF2(pfx) && sz == 4)
10921 assign( argV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10923 DIP("cvtps2dq %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10924 nameXMMReg(gregOfRexRM(pfx,modrm)));
10926 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10930 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10949 putXMMRegLane32( gregOfRexRM(pfx,modrm), 3, CVT(t3) );
10950 putXMMRegLane32( gregOfRexRM(pfx,modrm), 2, CVT(t2) );
10951 putXMMRegLane32( gregOfRexRM(pfx,modrm), 1, CVT(t1) );
10952 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0, CVT(t0) );
10961 if (haveNo66noF2noF3(pfx) && sz == 4
10968 assign( f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0) );
10969 assign( f32hi, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 1) );
10971 DIP("cvtps2pd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10972 nameXMMReg(gregOfRexRM(pfx,modrm)));
10974 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
10980 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10983 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 1,
10985 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 0,
11003 if (haveF2no66noF3(pfx)
11014 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
11016 nameXMMReg(eregOfRexRM(pfx,modrm)),
11017 nameIReg(sz, gregOfRexRM(pfx,modrm), False));
11019 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11024 nameIReg(sz, gregOfRexRM(pfx,modrm), False));
11034 putIReg32( gregOfRexRM(pfx,modrm),
11037 putIReg64( gregOfRexRM(pfx,modrm),
11046 if (haveF2no66noF3(pfx) && sz == 4
11055 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
11056 DIP("cvtsd2ss %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11057 nameXMMReg(gregOfRexRM(pfx,modrm)));
11059 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11063 nameXMMReg(gregOfRexRM(pfx,modrm)));
11068 gregOfRexRM(pfx,modrm), 0,
11079 if (haveF2no66noF3(pfx) && (sz == 4 || sz == 8)
11086 assign( arg32, getIReg32(eregOfRexRM(pfx,modrm)) );
11088 pfx,modrm)),
11089 nameXMMReg(gregOfRexRM(pfx,modrm)));
11091 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11095 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11097 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 0,
11104 assign( arg64, getIReg64(eregOfRexRM(pfx,modrm)) );
11106 DIP("cvtsi2sdq %s,%s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
11107 nameXMMReg(gregOfRexRM(pfx,modrm)));
11109 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11113 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11116 gregOfRexRM(pfx,modrm),
11131 if (haveF3no66noF2(pfx) && sz == 4
11138 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
11139 DIP("cvtss2sd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11140 nameXMMReg(gregOfRexRM(pfx,modrm)));
11142 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11146 nameXMMReg(gregOfRexRM(pfx,modrm)));
11149 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 0,
11156 if (have66noF2noF3(pfx) && sz == 2
11158 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "divpd", Iop_Div64Fx2 );
11163 if (haveF2no66noF3(pfx) && insn[0] == 0x0F && insn[1] == 0x5E) {
11165 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta+2, "divsd", Iop_Div64F0x2 );
11171 if (haveNo66noF2noF3(pfx) && sz == 4
11184 if (have66noF2noF3(pfx) && sz == 2
11186 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "maxpd", Iop_Max64Fx2 );
11191 if (haveF2no66noF3(pfx) && sz == 4
11193 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta+2, "maxsd", Iop_Max64F0x2 );
11198 if (have66noF2noF3(pfx) && sz == 2
11200 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "minpd", Iop_Min64Fx2 );
11205 if (haveF2no66noF3(pfx) && sz == 4
11207 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta+2, "minsd", Iop_Min64F0x2 );
11214 if (have66noF2noF3(pfx)
11222 putXMMReg( gregOfRexRM(pfx,modrm),
11223 getXMMReg( eregOfRexRM(pfx,modrm) ));
11224 DIP("mov%s %s,%s\n", wot, nameXMMReg(eregOfRexRM(pfx,modrm)),
11225 nameXMMReg(gregOfRexRM(pfx,modrm)));
11228 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11231 putXMMReg( gregOfRexRM(pfx,modrm),
11234 nameXMMReg(gregOfRexRM(pfx,modrm)));
11242 if (have66noF2noF3(pfx) && insn[0] == 0x0F
11247 putXMMReg( eregOfRexRM(pfx,modrm),
11248 getXMMReg( gregOfRexRM(pfx,modrm) ) );
11249 DIP("mov%s %s,%s\n", wot, nameXMMReg(gregOfRexRM(pfx,modrm)),
11250 nameXMMReg(eregOfRexRM(pfx,modrm)));
11253 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11256 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11257 DIP("mov%s %s,%s\n", wot, nameXMMReg(gregOfRexRM(pfx,modrm)),
11266 if (have66noF2noF3(pfx) && insn[0] == 0x0F && insn[1] == 0x6E) {
11274 gregOfRexRM(pfx,modrm),
11275 unop( Iop_32UtoV128, getIReg32(eregOfRexRM(pfx,modrm)) )
11277 DIP("movd %s, %s\n", nameIReg32(eregOfRexRM(pfx,modrm)),
11278 nameXMMReg(gregOfRexRM(pfx,modrm)));
11281 gregOfRexRM(pfx,modrm),
11282 unop( Iop_64UtoV128, getIReg64(eregOfRexRM(pfx,modrm)) )
11284 DIP("movq %s, %s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
11285 nameXMMReg(gregOfRexRM(pfx,modrm)));
11288 addr = disAMode( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11291 gregOfRexRM(pfx,modrm),
11297 nameXMMReg(gregOfRexRM(pfx,modrm)));
11304 if (have66noF2noF3(pfx) && insn[0] == 0x0F && insn[1] == 0x7E) {
11311 putIReg32( eregOfRexRM(pfx,modrm),
11312 getXMMRegLane32(gregOfRexRM(pfx,modrm), 0) );
11313 DIP("movd %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11314 nameIReg32(eregOfRexRM(pfx,modrm)));
11316 putIReg64( eregOfRexRM(pfx,modrm),
11317 getXMMRegLane64(gregOfRexRM(pfx,modrm), 0) );
11318 DIP("movq %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11319 nameIReg64(eregOfRexRM(pfx,modrm)));
11322 addr = disAMode( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11326 ? getXMMRegLane32(gregOfRexRM(pfx,modrm),0)
11327 : getXMMRegLane64(gregOfRexRM(pfx,modrm),0) );
11329 nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
11335 if (have66noF2noF3(pfx) && sz == 2
11340 putXMMReg( eregOfRexRM(pfx,modrm),
11341 getXMMReg(gregOfRexRM(pfx,modrm)) );
11342 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11343 nameXMMReg(eregOfRexRM(pfx,modrm)));
11345 addr = disAMode( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11348 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11349 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
11355 if (haveF3no66noF2(pfx) && sz == 4
11359 putXMMReg( gregOfRexRM(pfx,modrm),
11360 getXMMReg( eregOfRexRM(pfx,modrm) ));
11361 DIP("movdqu %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11362 nameXMMReg(gregOfRexRM(pfx,modrm)));
11365 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11366 putXMMReg( gregOfRexRM(pfx,modrm),
11369 nameXMMReg(gregOfRexRM(pfx,modrm)));
11376 if (haveF3no66noF2(pfx) && sz == 4
11382 putXMMReg( eregOfRexRM(pfx,modrm),
11383 getXMMReg(gregOfRexRM(pfx,modrm)) );
11384 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11385 nameXMMReg(eregOfRexRM(pfx,modrm)));
11387 addr = disAMode( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11389 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11390 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
11396 if (haveF2no66noF3(pfx) && sz == 4
11402 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ));
11403 DIP("movdq2q %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11416 if (have66noF2noF3(pfx) && insn[0] == 0x0F && insn[1] == 0x16) {
11421 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11423 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
11426 nameXMMReg( gregOfRexRM(pfx,modrm) ));
11433 if (have66noF2noF3(pfx) && insn[0] == 0x0F && insn[1] == 0x17) {
11436 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11439 getXMMRegLane64( gregOfRexRM(pfx,insn[2]),
11441 DIP("movhpd %s,%s\n", nameXMMReg( gregOfRexRM(pfx,insn[2]) ),
11450 if (have66noF2noF3(pfx) && insn[0] == 0x0F && insn[1] == 0x12) {
11455 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11457 putXMMRegLane64( gregOfRexRM(pfx,modrm),
11461 dis_buf, nameXMMReg( gregOfRexRM(pfx,modrm) ));
11468 if (have66noF2noF3(pfx) && insn[0] == 0x0F && insn[1] == 0x13) {
11471 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11474 getXMMRegLane64( gregOfRexRM(pfx,modrm),
11476 DIP("movlpd %s, %s\n", nameXMMReg( gregOfRexRM(pfx,modrm) ),
11485 if (have66noF2noF3(pfx) && (sz == 2 || sz == 8)
11498 src = eregOfRexRM(pfx,modrm);
11505 putIReg32( gregOfRexRM(pfx,modrm),
11509 nameIReg32(gregOfRexRM(pfx,modrm)));
11517 if (have66noF2noF3(pfx) && sz == 2
11527 assign( addr, handleAddrOverrides( vbi, pfx, getIReg64(R_RDI) ));
11528 assign( regD, getXMMReg( gregOfRexRM(pfx,modrm) ));
11537 getXMMRegLane64( eregOfRexRM(pfx,modrm), 1 ),
11540 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ),
11554 DIP("maskmovdqu %s,%s\n", nameXMMReg( eregOfRexRM(pfx,modrm) ),
11555 nameXMMReg( gregOfRexRM(pfx,modrm) ) );
11562 if (have66noF2noF3(pfx) && sz == 2
11566 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11568 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11570 nameXMMReg(gregOfRexRM(pfx,modrm)));
11579 if (haveNo66noF2noF3(pfx) &&
11584 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11585 storeLE( mkexpr(addr), getIRegG(sz, pfx, modrm) );
11587 nameIRegG(sz, pfx, modrm));
11596 if (have66noF2noF3(pfx)
11604 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11606 getXMMRegLane64( gregOfRexRM(pfx,modrm), 0 ));
11607 DIP("movq %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf );
11615 if (haveF3no66noF2(pfx) && sz == 4
11620 putXMMReg( gregOfRexRM(pfx,modrm),
11623 nameXMMReg(gregOfRexRM(pfx,modrm)));
11637 if ( (haveF2no66noF3(pfx)
11641 (haveF3no66noF2(pfx)
11647 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
11648 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ));
11651 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1, mkU64(0) );
11653 DIP("movsd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11654 nameXMMReg(gregOfRexRM(pfx,modrm)));
11657 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11658 putXMMReg( gregOfRexRM(pfx,modrm), mkV128(0) );
11659 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
11662 nameXMMReg(gregOfRexRM(pfx,modrm)));
11670 if (haveF2no66noF3(pfx)
11675 putXMMRegLane64( eregOfRexRM(pfx,modrm), 0,
11676 getXMMRegLane64( gregOfRexRM(pfx,modrm), 0 ));
11677 DIP("movsd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11678 nameXMMReg(eregOfRexRM(pfx,modrm)));
11681 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11683 getXMMRegLane64(gregOfRexRM(pfx,modrm), 0) );
11684 DIP("movsd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11692 if (have66noF2noF3(pfx)
11695 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "mulpd", Iop_Mul64Fx2 );
11700 if (haveF2no66noF3(pfx)
11703 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta+2, "mulsd", Iop_Mul64F0x2 );
11708 if (have66noF2noF3(pfx) && sz == 2
11710 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "orpd", Iop_OrV128 );
11715 if (have66noF2noF3(pfx) && sz == 2
11726 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
11729 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
11733 nameXMMReg(eregOfRexRM(pfx,modrm)),
11734 nameXMMReg(gregOfRexRM(pfx,modrm)));
11736 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 1 );
11742 nameXMMReg(gregOfRexRM(pfx,modrm)));
11754 gregOfRexRM(pfx,modrm),
11765 if (have66noF2noF3(pfx) && sz == 2
11767 delta = dis_SSE_E_to_G_unary_all( vbi, pfx, delta+2,
11773 if (haveF2no66noF3(pfx) && insn[0] == 0x0F && insn[1] == 0x51) {
11775 delta = dis_SSE_E_to_G_unary_lo64( vbi, pfx, delta+2,
11781 if (have66noF2noF3(pfx) && sz == 2
11783 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "subpd", Iop_Sub64Fx2 );
11788 if (haveF2no66noF3(pfx)
11791 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta+2, "subsd", Iop_Sub64F0x2 );
11798 if (have66noF2noF3(pfx)
11810 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
11813 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
11816 nameXMMReg(eregOfRexRM(pfx,modrm)),
11817 nameXMMReg(gregOfRexRM(pfx,modrm)));
11819 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
11824 nameXMMReg(gregOfRexRM(pfx,modrm)));
11833 putXMMReg( gregOfRexRM(pfx,modrm),
11836 putXMMReg( gregOfRexRM(pfx,modrm),
11844 if (have66noF2noF3(pfx) && sz == 2
11846 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "xorpd", Iop_XorV128 );
11851 if (have66noF2noF3(pfx) && sz == 2
11853 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11860 if (have66noF2noF3(pfx) && sz == 2
11862 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11869 if (have66noF2noF3(pfx) && sz == 2
11871 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11878 if (have66noF2noF3(pfx) && sz == 2
11880 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11886 if (have66noF2noF3(pfx) && sz == 2
11888 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11895 if (haveNo66noF2noF3(pfx) && sz == 4
11899 vbi, pfx, delta+2, insn[1], "paddq", False );
11904 if (have66noF2noF3(pfx) && sz == 2
11906 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11912 if (have66noF2noF3(pfx) && sz == 2
11914 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11920 if (have66noF2noF3(pfx) && sz == 2
11922 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11928 if (have66noF2noF3(pfx) && sz == 2
11930 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11936 if (have66noF2noF3(pfx) && sz == 2
11938 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11944 pfx) && sz == 2
11946 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11952 if (have66noF2noF3(pfx) && sz == 2
11954 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "pand", Iop_AndV128 );
11959 if (have66noF2noF3(pfx) && sz == 2
11961 delta = dis_SSE_E_to_G_all_invG( vbi, pfx, delta+2, "pandn", Iop_AndV128 );
11966 if (have66noF2noF3(pfx) && sz == 2
11968 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11974 if (have66noF2noF3(pfx) && sz == 2
11976 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11982 if (have66noF2noF3(pfx) && sz == 2
11984 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11990 if (have66noF2noF3(pfx) && sz == 2
11992 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
11998 if (have66noF2noF3(pfx) && sz == 2
12000 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12006 if (have66noF2noF3(pfx) && sz == 2
12008 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12014 if (have66noF2noF3(pfx) && sz == 2
12016 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12022 if (have66noF2noF3(pfx) && sz == 2
12024 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12031 if (have66noF2noF3(pfx)
12038 assign(t5, getXMMReg(eregOfRexRM(pfx,modrm)));
12051 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_16Uto32, mkexpr(t4)));
12053 (Int)insn[3], nameXMMReg(eregOfRexRM(pfx,modrm)),
12054 nameIReg32(gregOfRexRM(pfx,modrm)));
12065 if (have66noF2noF3(pfx)
12073 assign(t4, getIReg16(eregOfRexRM(pfx,modrm)));
12077 nameIReg16(eregOfRexRM(pfx,modrm)),
12078 nameXMMReg(gregOfRexRM(pfx,modrm)));
12080 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf,
12087 nameXMMReg(gregOfRexRM(pfx,modrm)));
12090 putXMMRegLane16( gregOfRexRM(pfx,modrm), lane & 7, mkexpr(t4) );
12096 if (have66noF2noF3(pfx) && sz == 2
12109 assign( s1V, getXMMReg(eregOfRexRM(pfx,modrm)) );
12111 DIP("pmaddwd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12112 nameXMMReg(gregOfRexRM(pfx,modrm)));
12114 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
12118 nameXMMReg(gregOfRexRM(pfx,modrm)));
12120 assign( s2V, getXMMReg(gregOfRexRM(pfx,modrm)) );
12138 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12143 if (have66noF2noF3(pfx) && sz == 2
12145 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12151 if (have66noF2noF3(pfx) && sz == 2
12153 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12159 if (have66noF2noF3(pfx) && sz == 2
12161 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12167 if (have66noF2noF3(pfx) && sz == 2
12169 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12179 if (have66noF2noF3(pfx)
12186 assign(t0, getXMMRegLane64(eregOfRexRM(pfx,modrm), 0));
12187 assign(t1, getXMMRegLane64(eregOfRexRM(pfx,modrm), 1));
12194 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_64to32,mkexpr(t5)));
12195 DIP("pmovmskb %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12196 nameIReg32(gregOfRexRM(pfx,modrm)));
12204 if (have66noF2noF3(pfx) && sz == 2
12206 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12212 if (have66noF2noF3(pfx) && sz == 2
12214 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12220 if (have66noF2noF3(pfx) && sz == 2
12222 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12230 if (haveNo66noF2noF3(pfx) && sz == 4
12247 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
12266 if (have66noF2noF3(pfx) && sz == 2
12276 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
12279 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
12281 DIP("pmuludq %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12282 nameXMMReg(gregOfRexRM(pfx,modrm)));
12284 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
12288 nameXMMReg(gregOfRexRM(pfx,modrm)));
12295 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0, mkexpr(t0) );
12297 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1, mkexpr(t1) );
12302 if (have66noF2noF3(pfx) && sz == 2
12304 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "por", Iop_OrV128 );
12310 if (have66noF2noF3(pfx) && sz == 2
12323 assign( s1V, getXMMReg(eregOfRexRM(pfx,modrm)) );
12325 DIP("psadbw %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12326 nameXMMReg(gregOfRexRM(pfx,modrm)));
12328 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
12332 nameXMMReg(gregOfRexRM(pfx,modrm)));
12334 assign( s2V, getXMMReg(gregOfRexRM(pfx,modrm)) );
12352 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12357 if (have66noF2noF3(pfx) && sz == 2
12366 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
12370 nameXMMReg(eregOfRexRM(pfx,modrm)),
12371 nameXMMReg(gregOfRexRM(pfx,modrm)));
12373 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf,
12380 nameXMMReg(gregOfRexRM(pfx,modrm)));
12390 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12397 if (haveF3no66noF2(pfx) && sz == 4
12408 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
12412 nameXMMReg(eregOfRexRM(pfx,modrm)),
12413 nameXMMReg(gregOfRexRM(pfx,modrm)));
12415 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf,
12422 nameXMMReg(gregOfRexRM(pfx,modrm)));
12436 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12443 if (haveF2no66noF3(pfx) && sz == 4
12454 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
12458 nameXMMReg(eregOfRexRM(pfx,modrm)),
12459 nameXMMReg(gregOfRexRM(pfx,modrm)));
12461 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf,
12468 nameXMMReg(gregOfRexRM(pfx,modrm)));
12482 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12488 if (have66noF2noF3(pfx) && sz == 2
12492 delta = dis_SSE_shiftE_imm( pfx, delta+2, "pslld", Iop_ShlN32x4 );
12497 if (have66noF2noF3(pfx) && sz == 2
12499 delta = dis_SSE_shiftG_byE( vbi, pfx, delta+2, "pslld", Iop_ShlN32x4 );
12505 if (have66noF2noF3(pfx) && sz == 2
12511 Int reg = eregOfRexRM(pfx,insn[2]);
12566 if (have66noF2noF3(pfx) && sz == 2
12570 delta = dis_SSE_shiftE_imm( pfx, delta+2, "psllq", Iop_ShlN64x2 );
12575 if (have66noF2noF3(pfx) && sz == 2
12577 delta = dis_SSE_shiftG_byE( vbi, pfx, delta+2, "psllq", Iop_ShlN64x2 );
12582 if (have66noF2noF3(pfx) && sz == 2
12586 delta = dis_SSE_shiftE_imm( pfx, delta+2, "psllw", Iop_ShlN16x8 );
12591 if (have66noF2noF3(pfx) && sz == 2
12593 delta = dis_SSE_shiftG_byE( vbi, pfx, delta+2, "psllw", Iop_ShlN16x8 );
12598 if (have66noF2noF3(pfx) && sz == 2
12602 delta = dis_SSE_shiftE_imm( pfx, delta+2, "psrad", Iop_SarN32x4 );
12607 if (have66noF2noF3(pfx) && sz == 2
12609 delta = dis_SSE_shiftG_byE( vbi, pfx, delta+2, "psrad", Iop_SarN32x4 );
12614 if (have66noF2noF3(pfx) && sz == 2
12618 delta = dis_SSE_shiftE_imm( pfx, delta+2, "psraw", Iop_SarN16x8 );
12623 if (have66noF2noF3(pfx) && sz == 2
12625 delta = dis_SSE_shiftG_byE( vbi, pfx, delta+2, "psraw", Iop_SarN16x8 );
12630 if (have66noF2noF3(pfx) && sz == 2
12634 delta = dis_SSE_shiftE_imm( pfx, delta+2, "psrld", Iop_ShrN32x4 );
12639 if (have66noF2noF3(pfx) && sz == 2
12641 delta = dis_SSE_shiftG_byE( vbi, pfx, delta+2, "psrld", Iop_ShrN32x4 );
12647 if (have66noF2noF3(pfx) && sz == 2
12653 Int reg = eregOfRexRM(pfx,insn[2]);
12709 if (have66noF2noF3(pfx) && sz == 2
12713 delta = dis_SSE_shiftE_imm( pfx, delta+2, "psrlq", Iop_ShrN64x2 );
12718 if (have66noF2noF3(pfx) && sz == 2
12720 delta = dis_SSE_shiftG_byE( vbi, pfx, delta+2, "psrlq", Iop_ShrN64x2 );
12725 if (have66noF2noF3(pfx) && sz == 2
12729 delta = dis_SSE_shiftE_imm( pfx, delta+2, "psrlw", Iop_ShrN16x8 );
12734 if (have66noF2noF3(pfx) && sz == 2
12736 delta = dis_SSE_shiftG_byE( vbi, pfx, delta+2, "psrlw", Iop_ShrN16x8 );
12741 if (have66noF2noF3(pfx) && sz == 2
12743 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12749 if (have66noF2noF3(pfx) && sz == 2
12751 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12758 if (haveNo66noF2noF3(pfx) && sz == 4
12762 vbi, pfx, delta+2, insn[1], "psubq", False );
12767 if (have66noF2noF3(pfx) && sz == 2
12769 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12775 if (have66noF2noF3(pfx) && sz == 2
12777 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12783 if (have66noF2noF3(pfx) && sz == 2
12785 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12791 if (have66noF2noF3(pfx) && sz == 2
12793 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12799 if (have66noF2noF3(pfx) && sz == 2
12801 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12807 if (have66noF2noF3(pfx) && sz == 2
12809 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12815 if (have66noF2noF3(pfx) && sz == 2
12817 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12824 if (have66noF2noF3(pfx) && sz == 2
12826 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12833 if (have66noF2noF3(pfx) && sz == 2
12835 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12842 if (have66noF2noF3(pfx) && sz == 2
12844 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12851 if (have66noF2noF3(pfx) && sz == 2
12853 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12860 if (have66noF2noF3(pfx) && sz == 2
12862 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12869 if (have66noF2noF3(pfx) && sz == 2
12871 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12878 if (have66noF2noF3(pfx) && sz == 2
12880 delta = dis_SSEint_E_to_G( vbi, pfx, delta+2,
12887 if (have66noF2noF3(pfx) && sz == 2
12889 delta = dis_SSE_E_to_G_all( vbi, pfx, delta+2, "pxor", Iop_XorV128 );
12911 if (haveNo66noF2noF3(pfx) && sz == 4
12922 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
12954 if (haveF3no66noF2(pfx) && sz == 4
12963 assign( sV, getXMMReg( eregOfRexRM(pfx,modrm)) );
12965 nameXMMReg(eregOfRexRM(pfx,modrm)),
12966 nameXMMReg(gregOfRexRM(pfx,modrm)));
12969 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
12974 nameXMMReg(gregOfRexRM(pfx,modrm)));
12979 putXMMReg( gregOfRexRM(pfx,modrm),
12987 if (haveF2no66noF3(pfx)
12995 assign( sV, getXMMReg( eregOfRexRM(pfx,modrm)) );
12996 DIP("movddup %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12997 nameXMMReg(gregOfRexRM(pfx,modrm)));
13001 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
13004 nameXMMReg(gregOfRexRM(pfx,modrm)));
13008 putXMMReg( gregOfRexRM(pfx,modrm),
13014 if (haveF2no66noF3(pfx) && sz == 4
13025 assign( eV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13026 DIP("addsubps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13027 nameXMMReg(gregOfRexRM(pfx,modrm)));
13030 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
13033 nameXMMReg(gregOfRexRM(pfx,modrm)));
13037 assign( gV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13045 putXMMReg( gregOfRexRM(pfx,modrm), mk128from32s( a3, s2, a1, s0 ));
13050 if (have66noF2noF3(pfx) && sz == 2
13061 assign( eV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13062 DIP("addsubpd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13063 nameXMMReg(gregOfRexRM(pfx,modrm)));
13066 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
13069 nameXMMReg(gregOfRexRM(pfx,modrm)));
13073 assign( gV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13081 putXMMReg( gregOfRexRM(pfx,modrm),
13088 if (haveF2no66noF3(pfx) && sz == 4
13101 assign( eV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13102 DIP("h%sps %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13103 nameXMMReg(gregOfRexRM(pfx,modrm)));
13106 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
13109 nameXMMReg(gregOfRexRM(pfx,modrm)));
13113 assign( gV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13121 putXMMReg( gregOfRexRM(pfx,modrm),
13129 if (have66noF2noF3(pfx) && sz == 2
13144 assign( eV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13145 DIP("h%spd %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13146 nameXMMReg(gregOfRexRM(pfx,modrm)));
13149 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
13152 nameXMMReg(gregOfRexRM(pfx,modrm)));
13156 assign( gV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13166 putXMMReg( gregOfRexRM(pfx,modrm),
13173 if (haveF2no66noF3(pfx) && sz == 4
13179 addr = disAMode ( &alen, vbi, pfx, delta+2, dis_buf, 0 );
13180 putXMMReg( gregOfRexRM(pfx,modrm),
13183 nameXMMReg(gregOfRexRM(pfx,modrm)));
13199 if (haveNo66noF2noF3(pfx)
13219 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13252 if (have66noF2noF3(pfx)
13263 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13266 pfx,modrm)) );
13268 DIP("pmaddubsw %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13269 nameXMMReg(gregOfRexRM(pfx,modrm)));
13271 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13276 nameXMMReg(gregOfRexRM(pfx,modrm)));
13294 gregOfRexRM(pfx,modrm),
13317 if (haveNo66noF2noF3(pfx)
13354 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13384 if (have66noF2noF3(pfx)
13416 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13419 assign( sV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13420 DIP("ph%s %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13421 nameXMMReg(gregOfRexRM(pfx,modrm)));
13424 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13428 nameXMMReg(gregOfRexRM(pfx,modrm)));
13441 gregOfRexRM(pfx,modrm),
13458 if (haveNo66noF2noF3(pfx)
13474 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13490 if (have66noF2noF3(pfx)
13501 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13504 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13506 DIP("pmulhrsw %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13507 nameXMMReg(gregOfRexRM(pfx,modrm)));
13509 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13514 nameXMMReg(gregOfRexRM(pfx,modrm)));
13523 gregOfRexRM(pfx,modrm),
13535 if (haveNo66noF2noF3(pfx)
13561 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13578 if (have66noF2noF3(pfx)
13599 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13602 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13604 DIP("psign%s %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13605 nameXMMReg(gregOfRexRM(pfx,modrm)));
13607 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13612 nameXMMReg(gregOfRexRM(pfx,modrm)));
13621 gregOfRexRM(pfx,modrm),
13633 if (haveNo66noF2noF3(pfx)
13657 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13674 if (have66noF2noF3(pfx)
13694 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13696 DIP("pabs%s %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13697 nameXMMReg(gregOfRexRM(pfx,modrm)));
13699 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13704 nameXMMReg(gregOfRexRM(pfx,modrm)));
13711 gregOfRexRM(pfx,modrm),
13721 if (haveNo66noF2noF3(pfx) && sz == 4
13739 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 1 );
13775 if (have66noF2noF3(pfx)
13788 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13791 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13795 nameXMMReg(eregOfRexRM(pfx,modrm)),
13796 nameXMMReg(gregOfRexRM(pfx,modrm)));
13798 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 1 );
13805 nameXMMReg(gregOfRexRM(pfx,modrm)));
13853 gregOfRexRM(pfx,modrm),
13860 if (haveNo66noF2noF3(pfx)
13876 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13901 if (have66noF2noF3(pfx)
13923 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13926 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13928 DIP("pshufb %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13929 nameXMMReg(gregOfRexRM(pfx,modrm)));
13931 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
13936 nameXMMReg(gregOfRexRM(pfx,modrm)));
14007 gregOfRexRM(pfx,modrm),
14023 if ( have66noF2noF3( pfx )
14035 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14039 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14042 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14043 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14045 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
14052 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14064 putXMMReg( gregOfRexRM(pfx, modrm),
14076 if ( have66noF2noF3( pfx )
14086 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14090 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14093 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14094 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14096 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
14103 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14112 putXMMReg( gregOfRexRM(pfx, modrm),
14124 if ( have66noF2noF3( pfx )
14134 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14138 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14141 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14142 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14144 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
14151 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14165 putXMMReg( gregOfRexRM(pfx, modrm),
14179 if ( have66noF2noF3( pfx )
14189 assign( dvec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14193 assign( svec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14196 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14197 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14199 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
14206 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14230 putXMMReg( gregOfRexRM(pfx,modrm), mkexpr(res) );
14237 if ( have66noF2noF3( pfx )
14249 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14253 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14256 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14257 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14259 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
14266 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14282 putXMMReg( gregOfRexRM( pfx, modrm ),
14294 if ( have66noF2noF3( pfx )
14311 assign( xmm1_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14315 assign( xmm2_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14318 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14319 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14321 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
14328 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14348 putXMMReg( gregOfRexRM(pfx, modrm),
14363 if ( have66noF2noF3( pfx )
14376 assign( dstVec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14380 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14401 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14402 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14404 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf,
14411 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14440 putXMMReg( gregOfRexRM(pfx, modrm), ire_vec_128 );
14448 if ( have66noF2noF3( pfx )
14458 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14464 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
14478 putIReg64( eregOfRexRM(pfx,modrm),
14484 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14485 nameIReg64( eregOfRexRM(pfx, modrm) ) );
14490 imm8, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14501 if ( have66noF2noF3( pfx )
14510 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14516 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
14529 putIReg32( eregOfRexRM(pfx,modrm), mkexpr(src_dword) );
14532 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14533 nameIReg32( eregOfRexRM(pfx, modrm) ) );
14538 imm8_10, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14549 if ( have66noF2noF3( pfx )
14558 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14563 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
14573 putIReg64( eregOfRexRM(pfx,modrm), mkexpr(src_qword) );
14576 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14577 nameIReg64( eregOfRexRM(pfx, modrm) ) );
14582 imm8_0, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14591 if ( have66noF2noF3( pfx )
14600 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14606 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
14623 putIReg64( eregOfRexRM(pfx,modrm), unop(Iop_16Uto64, mkexpr(src_word)) );
14626 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14627 nameIReg64( eregOfRexRM(pfx, modrm) ) );
14632 imm8_20, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14641 if ( have66noF2noF3( pfx )
14653 assign( src_elems, getIReg64( eregOfRexRM(pfx,modrm) ) );
14656 nameIReg64( eregOfRexRM(pfx, modrm) ),
14657 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14659 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
14664 imm8_0, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14676 putXMMReg( gregOfRexRM(pfx, modrm),
14679 getXMMReg( gregOfRexRM(pfx, modrm) ),
14688 if ( have66noF2noF3( pfx )
14701 assign( src_elems, getIReg32( eregOfRexRM(pfx,modrm) ) );
14704 nameIReg32( eregOfRexRM(pfx, modrm) ),
14705 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14707 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
14712 imm8_10, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14734 putXMMReg( gregOfRexRM(pfx, modrm),
14737 getXMMReg( gregOfRexRM(pfx, modrm) ),
14745 if ( have66noF2noF3( pfx )
14758 getIReg32(eregOfRexRM(pfx,modrm))),
14762 nameIReg32( eregOfRexRM(pfx, modrm) ),
14763 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14765 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
14770 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14788 putXMMReg( gregOfRexRM(pfx, modrm),
14792 getXMMReg( gregOfRexRM(pfx, modrm) ),
14803 if ( have66noF2noF3( pfx )
14812 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14818 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 1 );
14831 putIReg32( eregOfRexRM(pfx,modrm), mkexpr(src_dword) );
14834 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14835 nameIReg32( eregOfRexRM(pfx, modrm) ) );
14840 imm8_10, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14850 if ( have66noF2noF3( pfx ) && sz == 2
14853 delta = dis_SSEint_E_to_G( vbi, pfx, delta+3,
14862 if ( have66noF2noF3( pfx ) && sz == 2
14868 vbi, pfx, delta+3,
14880 if ( have66noF2noF3( pfx ) && sz == 2
14886 vbi, pfx, delta+3,
14899 if ( have66noF2noF3( pfx ) && sz == 2
14905 vbi, pfx, delta+3,
14918 if ( have66noF2noF3( pfx ) && sz == 2
14924 vbi, pfx, delta+3,
14934 if ( have66noF2noF3( pfx )
14943 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14946 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14947 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14949 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
14954 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14957 putXMMReg( gregOfRexRM(pfx, modrm),
14972 if ( have66noF2noF3( pfx )
14981 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14984 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14985 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14987 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
14992 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14998 putXMMReg( gregOfRexRM(pfx, modrm),
15014 if ( have66noF2noF3(pfx)
15023 assign( srcBytes, getXMMRegLane16( eregOfRexRM(pfx, modrm), 0 ) );
15026 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15027 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15029 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15033 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15036 putXMMReg( gregOfRexRM( pfx, modrm ),
15050 if ( have66noF2noF3( pfx )
15059 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15062 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15063 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15065 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15070 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15073 putXMMReg( gregOfRexRM(pfx, modrm),
15088 if ( have66noF2noF3( pfx )
15097 assign( srcBytes, getXMMRegLane32( eregOfRexRM(pfx, modrm), 0 ) );
15100 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15101 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15103 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15107 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15110 putXMMReg( gregOfRexRM( pfx, modrm ),
15123 if ( have66noF2noF3( pfx )
15132 assign( srcBytes, getXMMRegLane64( eregOfRexRM(pfx, modrm), 0 ) );
15135 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15136 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15138 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15142 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15145 putXMMReg( gregOfRexRM(pfx, modrm),
15158 if ( have66noF2noF3(pfx)
15167 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15170 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15171 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15173 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15178 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15181 putXMMReg( gregOfRexRM(pfx, modrm),
15191 if ( have66noF2noF3( pfx )
15200 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15203 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15204 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15206 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15211 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15217 putXMMReg( gregOfRexRM( pfx, modrm ),
15229 if ( have66noF2noF3( pfx )
15238 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15241 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15242 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15244 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15250 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15256 putXMMReg( gregOfRexRM( pfx, modrm ),
15270 if ( have66noF2noF3( pfx )
15279 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15282 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15283 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15285 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15290 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15293 putXMMReg( gregOfRexRM(pfx, modrm),
15304 if ( have66noF2noF3( pfx )
15313 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15316 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15317 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15319 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15324 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15330 putXMMReg( gregOfRexRM( pfx, modrm ),
15342 if ( have66noF2noF3( pfx )
15351 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15354 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15355 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15357 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15362 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15365 putXMMReg( gregOfRexRM(pfx, modrm),
15376 if ( have66noF2noF3( pfx )
15386 assign( argL, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15389 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15390 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15392 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15397 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15400 assign(argR, getXMMReg( gregOfRexRM(pfx, modrm) ));
15402 putXMMReg( gregOfRexRM(pfx, modrm),
15412 if (haveF3noF2(pfx) /* so both 66 and 48 are possibilities */
15419 assign(src, getIRegE(sz, pfx, modrm));
15421 DIP("popcnt%c %s, %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm),
15422 nameIRegG(sz, pfx, modrm));
15424 addr = disAMode( &alen, vbi, pfx, delta+2, dis_buf, 0);
15428 nameIRegG(sz, pfx, modrm));
15432 putIRegG(sz, pfx, modrm, mkexpr(result));
15455 if (have66noF2noF3(pfx)
15469 isD ? getXMMRegLane64F( eregOfRexRM(pfx, modrm), 0 )
15470 : getXMMRegLane32F( eregOfRexRM(pfx, modrm), 0 ) );
15476 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
15477 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15479 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15486 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15499 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 0, mkexpr(res) );
15501 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 0, mkexpr(res) );
15508 if (have66noF2noF3(pfx)
15523 getXMMRegLane64F( eregOfRexRM(pfx, modrm), 0 ) );
15525 getXMMRegLane64F( eregOfRexRM(pfx, modrm), 1 ) );
15530 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
15531 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15533 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15543 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15555 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 0, mkexpr(res0) );
15556 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 1, mkexpr(res1) );
15563 if (have66noF2noF3(pfx)
15582 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 0 ) );
15584 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 1 ) );
15586 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 2 ) );
15588 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 3 ) );
15593 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
15594 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15596 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15610 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15624 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 0, mkexpr(res0) );
15625 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 1, mkexpr(res1) );
15626 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 2, mkexpr(res2) );
15627 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 3, mkexpr(res3) );
15637 if (haveF3noF2(pfx) /* so both 66 and 48 are possibilities */
15645 assign(src, getIRegE(sz, pfx, modrm));
15647 DIP("lzcnt%c %s, %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm),
15648 nameIRegG(sz, pfx, modrm));
15650 addr = disAMode( &alen, vbi, pfx, delta+2, dis_buf, 0);
15654 nameIRegG(sz, pfx, modrm));
15658 putIRegG(sz, pfx, modrm, mkexpr(res));
15699 if (have66noF2noF3(pfx)
15718 regNoL = eregOfRexRM(pfx, modrm);
15719 regNoR = gregOfRexRM(pfx, modrm);
15724 regNoR = gregOfRexRM(pfx, modrm);
15725 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15821 if (have66noF2noF3( pfx )
15829 assign(vecE, getXMMReg(eregOfRexRM(pfx, modrm)));
15832 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15833 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15835 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15840 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15843 assign(vecG, getXMMReg(gregOfRexRM(pfx, modrm)));
15943 if (have66noF2noF3(pfx) && sz == 2
15969 assign(vecE, getXMMReg(eregOfRexRM(pfx, modrm)));
15972 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15973 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15975 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
15980 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15983 assign(vecG, getXMMReg(gregOfRexRM(pfx, modrm)));
16001 putXMMReg(gregOfRexRM(pfx, modrm), res);
16010 if (haveF2noF3(pfx)
16013 || (insn[2] == 0xF0 && !have66(pfx)))) {
16025 assign(valE, getIRegE(sz, pfx, modrm));
16027 DIP("crc32b %s,%s\n", nameIRegE(sz, pfx, modrm),
16028 nameIRegG(1==getRexW(pfx) ? 8 : 4 ,pfx, modrm));
16030 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
16034 nameIRegG(1==getRexW(pfx) ? 8 : 4 ,pfx, modrm));
16042 assign(valG0, binop(Iop_And64, getIRegG(8, pfx, modrm),
16064 putIRegG(4, pfx, modrm, unop(Iop_64to32, mkexpr(valG1)));
16070 if ( have66noF2noF3( pfx )
16080 assign( argL, getXMMReg( eregOfRexRM(pfx, modrm) ) );
16083 nameXMMReg( eregOfRexRM(pfx, modrm) ),
16084 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16086 addr = disAMode( &alen, vbi, pfx, delta+3, dis_buf, 0 );
16091 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16094 assign(argR, getXMMReg( gregOfRexRM(pfx, modrm) ));
16096 putXMMReg( gregOfRexRM(pfx, modrm),
16108 if (have66noF2noF3(pfx) && sz == 2
16118 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
16121 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
16123 DIP("pmuldq %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
16124 nameXMMReg(gregOfRexRM(pfx,modrm)));
16126 addr = disAMode ( &alen, vbi, pfx, delta+3, dis_buf, 0 );
16130 nameXMMReg(gregOfRexRM(pfx,modrm)));
16137 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0, mkexpr(t0) );
16139 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1, mkexpr(t1) );
16146 if ( have66noF2noF3( pfx ) && sz == 2
16149 delta = dis_SSEint_E_to_G( vbi, pfx, delta+3,
16171 if (have66orF2orF3(pfx)) goto decode_failure;
16180 if (have66orF2(pfx)) goto decode_failure;
16184 DIP(haveF3(pfx) ? "rep ; ret\n" : "ret\n");
16188 if (haveF2orF3(pfx)) goto decode_failure;
16343 if (haveF2orF3(pfx)) goto decode_failure;
16362 if (haveF2orF3(pfx)) goto decode_failure;
16401 if (haveF2orF3(pfx))
16412 && haveNo66noF2noF3(pfx)) {
16415 delta = dis_FPU ( &decode_OK, vbi, pfx, delta );
16436 if (have66orF2orF3(pfx)) goto decode_failure;
16456 pfx)) goto decode_failure;
16472 if (haveF2orF3(pfx)) goto decode_failure;
16505 if (haveF2orF3(pfx)) goto decode_failure;
16562 if (have66orF2orF3(pfx)) goto decode_failure;
16565 if (haveASO(pfx)) {
16596 if (have66orF2orF3(pfx) || 1==getRexW(pfx)) goto decode_failure;
16603 if (haveASO(pfx)) {
16638 DIP("loop%s%s 0x%llx\n", xtra, haveASO(pfx) ? "l" : "", d64);
16645 if (haveF2orF3(pfx)) goto decode_failure;
16646 delta = dis_imul_I_E_G ( vbi, pfx, sz, delta, sz );
16649 delta = dis_imul_I_E_G ( vbi, pfx, sz, delta, 1 );
16655 if (haveF2orF3(pfx)) goto decode_failure;
16656 delta = dis_mov_G_E(vbi, pfx, 1, delta);
16660 if (haveF2orF3(pfx)) goto decode_failure;
16661 delta = dis_mov_G_E(vbi, pfx, sz, delta);
16665 if (haveF2orF3(pfx)) goto decode_failure;
16666 delta = dis_mov_E_G(vbi, pfx, 1, delta);
16670 if (haveF2orF3(pfx)) goto decode_failure;
16671 delta = dis_mov_E_G(vbi, pfx, sz, delta);
16675 if (haveF2orF3(pfx)) goto decode_failure;
16683 any segment override bits in pfx. */
16684 addr = disAMode ( &alen, vbi, clearSegBits(pfx), delta, dis_buf, 0 );
16689 putIRegG( sz, pfx, modrm,
16695 nameIRegG(sz,pfx,modrm));
16707 if (have66orF2orF3(pfx)) goto decode_failure;
16717 assign( addr, handleAddrOverrides(vbi, pfx, mkU64(d64)) );
16720 segRegTxt(pfx), d64,
16725 if (have66orF2orF3(pfx)) goto decode_failure;
16735 assign( addr, handleAddrOverrides(vbi, pfx, mkU64(d64)) );
16738 segRegTxt(pfx), d64);
16750 if (haveF2orF3(pfx)) goto decode_failure;
16753 putIRegRexB(1, pfx, opc-0xB0, mkU8(d64));
16754 DIP("movb $%lld,%s\n", d64, nameIRegRexB(1,pfx,opc-0xB0));
16767 if (haveF2orF3(pfx)) goto decode_failure;
16771 putIRegRexB(8, pfx, opc-0xB8, mkU64(d64));
16773 nameIRegRexB(8,pfx,opc-0xB8));
16777 putIRegRexB(sz, pfx, opc-0xB8,
16781 nameIRegRexB(sz,pfx,opc-0xB8));
16792 if (haveF2orF3(pfx)) goto decode_failure;
16798 putIRegE(sz, pfx, modrm,
16802 nameIRegE(sz,pfx,modrm));
16804 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf,
16818 if (haveF2orF3(pfx)) goto decode_failure;
16819 if (haveREX(pfx) && 1==getRexW(pfx)) {
16825 putIRegG(8, pfx, modrm,
16827 getIRegE(4, pfx, modrm)));
16829 nameIRegE(4, pfx, modrm),
16830 nameIRegG(8, pfx, modrm));
16833 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
16835 putIRegG(8, pfx, modrm,
16839 nameIRegG(8, pfx, modrm));
16849 if (haveF2orF3(pfx)) goto decode_failure;
16853 if (haveF2orF3(pfx)) goto decode_failure;
16858 if (haveF2orF3(pfx)) goto decode_failure;
16862 if (haveF2orF3(pfx)) goto decode_failure;
16867 if (haveF2orF3(pfx)) goto decode_failure;
16871 if (haveF2orF3(pfx)) goto decode_failure;
16876 if (haveF2orF3(pfx)) goto decode_failure;
16880 if (haveF2orF3(pfx)) goto decode_failure;
16885 if (haveF2orF3(pfx)) goto decode_failure;
16889 if (haveF2orF3(pfx)) goto decode_failure;
16894 if (haveF2orF3(pfx)) goto decode_failure;
16898 if (haveF2orF3(pfx)) goto decode_failure;
16903 if (haveF2orF3(pfx)) goto decode_failure;
16907 if (haveF2orF3(pfx)) goto decode_failure;
16912 if (haveF2orF3(pfx)) goto decode_failure;
16916 if (haveF2orF3(pfx)) goto decode_failure;
16921 if (haveF2orF3(pfx)) goto decode_failure;
16925 if (haveF2orF3(pfx)) goto decode_failure;
16932 if (haveF2orF3(pfx)) goto decode_failure;
16933 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Add8, True, 1, delta, "add" );
16936 if (haveF2orF3(pfx)) goto decode_failure;
16937 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Add8, True, sz, delta, "add" );
16941 if (haveF2orF3(pfx)) goto decode_failure;
16942 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Or8, True, 1, delta, "or" );
16945 if (haveF2orF3(pfx)) goto decode_failure;
16946 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Or8, True, sz, delta, "or" );
16950 if (haveF2orF3(pfx)) goto decode_failure;
16951 delta = dis_op2_E_G ( vbi, pfx, True, Iop_Add8, True, 1, delta, "adc" );
16954 if (haveF2orF3(pfx)) goto decode_failure;
16955 delta = dis_op2_E_G ( vbi, pfx, True, Iop_Add8, True, sz, delta, "adc" );
16959 if (haveF2orF3(pfx)) goto decode_failure;
16960 delta = dis_op2_E_G ( vbi, pfx, True, Iop_Sub8, True, 1, delta, "sbb" );
16963 if (haveF2orF3(pfx)) goto decode_failure;
16964 delta = dis_op2_E_G ( vbi, pfx, True, Iop_Sub8, True, sz, delta, "sbb" );
16968 if (haveF2orF3(pfx)) goto decode_failure;
16969 delta = dis_op2_E_G ( vbi, pfx, False, Iop_And8, True, 1, delta, "and" );
16972 if (haveF2orF3(pfx)) goto decode_failure;
16973 delta = dis_op2_E_G ( vbi, pfx, False, Iop_And8, True, sz, delta, "and" );
16977 if (haveF2orF3(pfx)) goto decode_failure;
16978 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Sub8, True, 1, delta, "sub" );
16981 if (haveF2orF3(pfx)) goto decode_failure;
16982 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Sub8, True, sz, delta, "sub" );
16986 if (haveF2orF3(pfx)) goto decode_failure;
16987 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Xor8, True, 1, delta, "xor" );
16990 if (haveF2orF3(pfx)) goto decode_failure;
16991 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Xor8, True, sz, delta, "xor" );
16995 if (haveF2orF3(pfx)) goto decode_failure;
16996 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Sub8, False, 1, delta, "cmp" );
16999 if (haveF2orF3(pfx)) goto decode_failure;
17000 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Sub8, False, sz, delta, "cmp" );
17004 if (haveF2orF3(pfx)) goto decode_failure;
17005 delta = dis_op2_E_G ( vbi, pfx, False, Iop_And8, False, 1, delta, "test" );
17008 if (haveF2orF3(pfx)) goto decode_failure;
17009 delta = dis_op2_E_G ( vbi, pfx, False, Iop_And8, False, sz, delta, "test" );
17015 if (haveF2orF3(pfx)) goto decode_failure;
17016 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Add8, True, 1, delta, "add" );
17019 if (haveF2orF3(pfx)) goto decode_failure;
17020 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Add8, True, sz, delta, "add" );
17024 if (haveF2orF3(pfx)) goto decode_failure;
17025 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Or8, True, 1, delta, "or" );
17028 if (haveF2orF3(pfx)) goto decode_failure;
17029 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Or8, True, sz, delta, "or" );
17033 if (haveF2orF3(pfx)) goto decode_failure;
17034 delta = dis_op2_G_E ( vbi, pfx, True, Iop_Add8, True, 1, delta, "adc" );
17037 if (haveF2orF3(pfx)) goto decode_failure;
17038 delta = dis_op2_G_E ( vbi, pfx, True, Iop_Add8, True, sz, delta, "adc" );
17042 if (haveF2orF3(pfx)) goto decode_failure;
17043 delta = dis_op2_G_E ( vbi, pfx, True, Iop_Sub8, True, 1, delta, "sbb" );
17046 if (haveF2orF3(pfx)) goto decode_failure;
17047 delta = dis_op2_G_E ( vbi, pfx, True, Iop_Sub8, True, sz, delta, "sbb" );
17051 if (haveF2orF3(pfx)) goto decode_failure;
17052 delta = dis_op2_G_E ( vbi, pfx, False, Iop_And8, True, 1, delta, "and" );
17055 if (haveF2orF3(pfx)) goto decode_failure;
17056 delta = dis_op2_G_E ( vbi, pfx, False, Iop_And8, True, sz, delta, "and" );
17060 if (haveF2orF3(pfx)) goto decode_failure;
17061 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, True, 1, delta, "sub" );
17064 if (haveF2orF3(pfx)) goto decode_failure;
17065 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, True, sz, delta, "sub" );
17069 if (haveF2orF3(pfx)) goto decode_failure;
17070 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Xor8, True, 1, delta, "xor" );
17073 if (haveF2orF3(pfx)) goto decode_failure;
17074 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Xor8, True, sz, delta, "xor" );
17078 if (haveF2orF3(pfx)) goto decode_failure;
17079 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, False, 1, delta, "cmp" );
17082 if (haveF2orF3(pfx)) goto decode_failure;
17083 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, False, sz, delta, "cmp" );
17096 if (haveF2orF3(pfx)) goto decode_failure;
17105 putIRegRexB(sz, pfx, opc-0x58, mkexpr(t1));
17106 DIP("pop%c %s\n", nameISize(sz), nameIRegRexB(sz,pfx,opc-0x58));
17112 if (haveF2orF3(pfx)) goto decode_failure;
17206 if (haveF2orF3(pfx)) goto decode_failure;
17232 addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
17261 if (haveF2orF3(pfx)) goto decode_failure;
17268 assign(t1, getIRegRexB(sz, pfx, opc-0x50));
17272 DIP("push%c %s\n", nameISize(sz), nameIRegRexB(sz,pfx,opc-0x50));
17276 if (haveF2orF3(pfx)) goto decode_failure;
17283 if (haveF2orF3(pfx)) goto decode_failure;
17307 if (haveF2orF3(pfx)) goto decode_failure;
17417 dis_string_op( dis_LODS, ( opc == 0xAC ? 1 : sz ), "lods", pfx );
17427 if (haveF2orF3(pfx)) goto decode_failure;
17433 if (haveF2orF3(pfx)) goto decode_failure;
17511 if (haveF2(pfx) && !haveF3(pfx)) {
17516 guest_RIP_bbstart+delta, "repne scas", pfx );
17521 if (!haveF2(pfx) && haveF3(pfx)) {
17526 guest_RIP_bbstart+delta, "repe scas", pfx );
17531 if (!haveF2(pfx) && !haveF3(pfx)) {
17534 dis_string_op( dis_SCAS, sz, "scas", pfx );
17543 if (haveF3(pfx) && !haveF2(pfx)) {
17548 guest_RIP_bbstart+delta, "repe cmps", pfx );
17558 if (haveF3(pfx) && !haveF2(pfx)) {
17563 guest_RIP_bbstart+delta, "rep stos", pfx );
17568 if (!haveF3(pfx) && !haveF2(pfx)) {
17571 dis_string_op( dis_STOS, sz, "stos", pfx );
17580 if (haveF3(pfx) && !haveF2(pfx)) {
17585 guest_RIP_bbstart+delta, "rep movs", pfx );
17590 if (!haveF3(pfx) && !haveF2(pfx)) {
17593 dis_string_op( dis_MOVS, sz, "movs", pfx );
17611 if (haveF2orF3(pfx)) goto decode_failure;
17616 assign(t1, getIRegE(sz, pfx, modrm));
17617 assign(t2, getIRegG(sz, pfx, modrm));
17618 putIRegG(sz, pfx, modrm, mkexpr(t1));
17619 putIRegE(sz, pfx, modrm, mkexpr(t2));
17622 nameISize(sz), nameIRegG(sz, pfx, modrm),
17623 nameIRegE(sz, pfx, modrm));
17626 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
17628 assign( t2, getIRegG(sz, pfx, modrm) );
17631 putIRegG( sz, pfx, modrm, mkexpr(t1) );
17634 nameIRegG(sz, pfx, modrm), dis_buf);
17640 if (!have66(pfx) && !haveF2(pfx) && haveF3(pfx)) {
17650 !haveF2orF3(pfx)
17652 && getRexB(pfx)==0 ) {
17666 if (haveF2orF3(pfx)) goto decode_failure;
17668 codegen_xchg_rAX_Reg ( pfx, sz, opc - 0x90 );
17722 if (haveF2orF3(pfx)) goto decode_failure;
17771 if (haveF2orF3(pfx)) goto decode_failure;
17789 if (haveF2orF3(pfx
17791 am_sz = lengthAMode(pfx,delta);
17795 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
17799 if (haveF2orF3(pfx)) goto decode_failure;
17801 am_sz = lengthAMode(pfx,delta);
17804 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
17808 if (haveF2orF3(pfx)) goto decode_failure;
17810 am_sz = lengthAMode(pfx,delta);
17813 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
17820 if (haveF2orF3(pfx)) goto decode_failure;
17822 am_sz = lengthAMode(pfx,delta);
17826 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17833 if (haveF2orF3(pfx)) goto decode_failure;
17835 am_sz = lengthAMode(pfx,delta);
17838 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17845 if (haveF2orF3(pfx)) goto decode_failure;
17847 am_sz = lengthAMode(pfx,delta);
17851 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17858 if (haveF2orF3(pfx)) goto decode_failure;
17860 am_sz = lengthAMode(pfx,delta);
17863 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17870 if (haveF2orF3(pfx)) goto decode_failure;
17872 am_sz = lengthAMode(pfx,delta);
17875 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17882 if (haveF2orF3(pfx)) goto decode_failure;
17884 am_sz = lengthAMode(pfx,delta);
17886 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17896 if (haveF2orF3(pfx)) goto decode_failure;
17897 delta = dis_Grp3 ( vbi, pfx, 1, delta, &decode_OK );
17903 if (haveF2orF3(pfx)) goto decode_failure;
17904 delta = dis_Grp3 ( vbi, pfx, sz, delta, &decode_OK );
17913 if (haveF2orF3(pfx)) goto decode_failure;
17914 delta = dis_Grp4 ( vbi, pfx, delta, &decode_OK );
17923 if (haveF2orF3(pfx)) goto decode_failure;
17924 delta = dis_Grp5 ( vbi, pfx, sz, delta, &dres, &decode_OK );
17939 if (haveF2orF3(pfx)) goto decode_failure;
17941 am_sz = lengthAMode(pfx,delta);
17943 delta = dis_Grp8_Imm ( vbi, pfx, delta, modrm, am_sz, sz, d64,
17953 if (haveF2orF3(pfx)) goto decode_failure;
17954 delta = dis_bs_E_G ( vbi, pfx, sz, delta, True );
17957 if (haveF2orF3(pfx)) goto decode_failure;
17958 delta = dis_bs_E_G ( vbi, pfx, sz, delta, False );
17971 if (haveF2orF3(pfx)) goto decode_failure;
17977 assign( t1, getIRegRexB(4, pfx, opc-0xC8) );
17991 putIRegRexB(4, pfx, opc-0xC8, mkexpr(t2));
17992 DIP("bswapl %s\n", nameIRegRexB(4, pfx, opc-0xC8));
18003 assign( t1, getIRegRexB(8, pfx, opc-0xC8) );
18041 putIRegRexB(8, pfx, opc-0xC8, mkexpr(t2));
18042 DIP("bswapq %s\n", nameIRegRexB(8, pfx, opc-0xC8));
18054 if (haveF2orF3(pfx)) goto decode_failure;
18056 delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpNone );
18059 if (haveF2orF3(pfx)) goto decode_failure;
18061 delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpReset );
18064 if (haveF2orF3(pfx)) goto decode_failure;
18066 delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpSet );
18069 if (haveF2orF3(pfx)) goto decode_failure;
18071 delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpComp );
18092 if (haveF2orF3(pfx)) goto decode_failure;
18093 delta = dis_cmov_E_G(vbi, pfx, sz, (AMD64Condcode)(opc - 0x40), delta);
18100 if (haveF2orF3(pfx)) goto decode_failure;
18101 delta = dis_cmpxchg_G_E ( &ok, vbi, pfx, 1, delta );
18107 if (haveF2orF3(pfx)) goto decode_failure;
18109 delta = dis_cmpxchg_G_E ( &ok, vbi, pfx, sz, delta );
18139 if (have66orF2orF3(pfx)) goto decode_failure;
18146 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
18254 if (haveF2orF3(pfx)) goto decode_failure;
18301 if (haveF2orF3(pfx)) goto decode_failure;
18304 delta = dis_movx_E_G ( vbi, pfx, delta, 1, sz, False );
18307 if (haveF2orF3(pfx)) goto decode_failure;
18310 delta = dis_movx_E_G ( vbi, pfx, delta, 2, sz, False );
18314 if (haveF2orF3(pfx)) goto decode_failure;
18317 delta = dis_movx_E_G ( vbi, pfx, delta, 1, sz, True );
18320 if (haveF2orF3(pfx)) goto decode_failure;
18323 delta = dis_movx_E_G ( vbi, pfx, delta, 2, sz, True );
18344 if (haveF2orF3(pfx)) goto decode_failure;
18345 delta = dis_mul_E_G ( vbi, pfx, sz, delta );
18351 if (haveF2orF3(pfx)) goto decode_failure;
18354 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
18378 if (haveF2orF3(pfx)) goto decode_failure;
18436 if (have66orF2orF3(pfx)) goto decode_failure;
18442 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
18463 if (have66orF2orF3(pfx)) goto decode_failure;
18501 if (haveF2orF3(pfx)) goto decode_failure;
18507 putIRegE(1, pfx, modrm, mkexpr(t1));
18509 nameIRegE(1,pfx,modrm));
18511 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
18522 d64 = delta + lengthAMode(pfx, delta);
18525 vbi, pfx, delta, modrm, sz,
18532 vbi, pfx, delta, modrm, sz,
18539 d64 = delta + lengthAMode(pfx, delta);
18542 vbi, pfx, delta, modrm, sz,
18549 vbi, pfx, delta, modrm, sz,
18571 delta = dis_xadd_G_E ( &decode_OK, vbi, pfx, 1, delta );
18578 delta = dis_xadd_G_E ( &decode_OK, vbi, pfx, sz, delta );
18663 if (have66orF2orF3(pfx))
18666 delta = dis_MMX ( &decode_OK, vbi, pfx, sz, delta-1 );
18691 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );