Lines Matching refs:pfx
681 static Bool IS_VALID_PFX ( Prefix pfx ) {
682 return toBool((pfx & 0xFF000000) == PFX_EMPTY);
685 static Bool haveREX ( Prefix pfx ) {
686 return toBool(pfx & PFX_REX);
689 static Int getRexW ( Prefix pfx ) {
690 return (pfx & PFX_REXW) ? 1 : 0;
692 static Int getRexR ( Prefix pfx ) {
693 return (pfx & PFX_REXR) ? 1 : 0;
695 static Int getRexX ( Prefix pfx ) {
696 return (pfx & PFX_REXX) ? 1 : 0;
698 static Int getRexB ( Prefix pfx ) {
699 return (pfx & PFX_REXB) ? 1 : 0;
704 static Bool haveF2orF3 ( Prefix pfx ) {
705 return toBool((pfx & (PFX_F2|PFX_F3)) > 0);
707 static Bool haveF2 ( Prefix pfx ) {
708 return toBool((pfx & PFX_F2) > 0);
710 static Bool haveF3 ( Prefix pfx ) {
711 return toBool((pfx & PFX_F3) > 0);
714 static Bool have66 ( Prefix pfx ) {
715 return toBool((pfx & PFX_66) > 0);
717 static Bool haveASO ( Prefix pfx ) {
718 return toBool((pfx & PFX_ASO) > 0);
721 /* Return True iff pfx has 66 set and F2 and F3 clear */
722 static Bool have66noF2noF3 ( Prefix pfx )
725 toBool((pfx & (PFX_66|PFX_F2|PFX_F3)) == PFX_66);
728 /* Return True iff pfx has F2 set and 66 and F3 clear */
729 static Bool haveF2no66noF3 ( Prefix pfx )
732 toBool((pfx & (PFX_66|PFX_F2|PFX_F3)) == PFX_F2);
735 /* Return True iff pfx has F3 set and 66 and F2 clear */
736 static Bool haveF3no66noF2 ( Prefix pfx )
739 toBool((pfx & (PFX_66|PFX_F2|PFX_F3)) == PFX_F3);
742 /* Return True iff pfx has F3 set and F2 clear */
743 static Bool haveF3noF2 ( Prefix pfx )
746 toBool((pfx & (PFX_F2|PFX_F3)) == PFX_F3);
749 /* Return True iff pfx has F2 set and F3 clear */
750 static Bool haveF2noF3 ( Prefix pfx )
753 toBool((pfx & (PFX_F2|PFX_F3)) == PFX_F2);
756 /* Return True iff pfx has 66, F2 and F3 clear */
757 static Bool haveNo66noF2noF3 ( Prefix pfx )
760 toBool((pfx & (PFX_66|PFX_F2|PFX_F3)) == 0);
763 /* Return True iff pfx has any of 66, F2 and F3 set */
764 static Bool have66orF2orF3 ( Prefix pfx )
766 return toBool( ! haveNo66noF2noF3(pfx) );
769 /* Return True iff pfx has 66 or F2 set */
770 static Bool have66orF2 ( Prefix pfx )
772 return toBool((pfx & (PFX_66|PFX_F2)) > 0);
783 static UInt getVexNvvvv ( Prefix pfx ) {
784 UInt r = (UInt)pfx;
789 static Bool haveVEX ( Prefix pfx ) {
790 return toBool(pfx & PFX_VEX);
793 static Int getVexL ( Prefix pfx ) {
794 return (pfx & PFX_VEXL) ? 1 : 0;
1156 static IRExpr* getIReg64rexX ( Prefix pfx, UInt lo3bits )
1159 vassert(IS_VALID_PFX(pfx));
1160 return getIReg64( lo3bits | (getRexX(pfx) << 3) );
1163 static HChar* nameIReg64rexX ( Prefix pfx, UInt lo3bits )
1166 vassert(IS_VALID_PFX(pfx));
1167 return nameIReg( 8, lo3bits | (getRexX(pfx) << 3), False );
1170 static HChar* nameIRegRexB ( Int sz, Prefix pfx, UInt lo3bits )
1173 vassert(IS_VALID_PFX(pfx));
1175 return nameIReg( sz, lo3bits | (getRexB(pfx) << 3),
1176 toBool(sz==1 && !haveREX(pfx)) );
1179 static IRExpr* getIRegRexB ( Int sz, Prefix pfx, UInt lo3bits )
1182 vassert(IS_VALID_PFX(pfx));
1188 offsetIReg( sz, lo3bits | (getRexB(pfx) << 3),
1189 toBool(sz==1 && !haveREX(pfx)) ),
1195 offsetIReg( sz, lo3bits | (getRexB(pfx) << 3),
1196 toBool(sz==1 && !haveREX(pfx)) ),
1202 static void putIRegRexB ( Int sz, Prefix pfx, UInt lo3bits, IRExpr* e )
1205 vassert(IS_VALID_PFX(pfx));
1209 offsetIReg( sz, lo3bits | (getRexB(pfx) << 3),
1210 toBool(sz==1 && !haveREX(pfx)) ),
1224 static UInt gregOfRexRM ( Prefix pfx, UChar mod_reg_rm )
1227 reg += (pfx & PFX_REXR) ? 8 : 0;
1236 static UInt eregOfRexRM ( Prefix pfx, UChar mod_reg_rm )
1241 rm += (pfx & PFX_REXB) ? 8 : 0;
1252 static UInt offsetIRegG ( Int sz, Prefix pfx, UChar mod_reg_rm )
1256 vassert(IS_VALID_PFX(pfx));
1258 reg = gregOfRexRM( pfx, mod_reg_rm );
1259 return offsetIReg( sz, reg, toBool(sz == 1 && !haveREX(pfx)) );
1263 IRExpr* getIRegG ( Int sz, Prefix pfx, UChar mod_reg_rm )
1268 IRExpr_Get( offsetIRegG( sz, pfx, mod_reg_rm ),
1271 return IRExpr_Get( offsetIRegG( sz, pfx, mod_reg_rm ),
1277 void putIRegG ( Int sz, Prefix pfx, UChar mod_reg_rm, IRExpr* e )
1283 stmt( IRStmt_Put( offsetIRegG( sz, pfx, mod_reg_rm ), e ) );
1287 HChar* nameIRegG ( Int sz, Prefix pfx, UChar mod_reg_rm )
1289 return nameIReg( sz, gregOfRexRM(pfx,mod_reg_rm),
1290 toBool(sz==1 && !haveREX(pfx)) );
1299 static UInt offsetIRegE ( Int sz, Prefix pfx, UChar mod_reg_rm )
1303 vassert(IS_VALID_PFX(pfx));
1305 reg = eregOfRexRM( pfx, mod_reg_rm );
1306 return offsetIReg( sz, reg, toBool(sz == 1 && !haveREX(pfx)) );
1310 IRExpr* getIRegE ( Int sz, Prefix pfx, UChar mod_reg_rm )
1315 IRExpr_Get( offsetIRegE( sz, pfx, mod_reg_rm ),
1318 return IRExpr_Get( offsetIRegE( sz, pfx, mod_reg_rm ),
1324 void putIRegE ( Int sz, Prefix pfx, UChar mod_reg_rm, IRExpr* e )
1330 stmt( IRStmt_Put( offsetIRegE( sz, pfx, mod_reg_rm ), e ) );
1334 HChar* nameIRegE ( Int sz, Prefix pfx, UChar mod_reg_rm )
1336 return nameIReg( sz, eregOfRexRM(pfx,mod_reg_rm),
1337 toBool(sz==1 && !haveREX(pfx)) );
2268 HChar* segRegTxt ( Prefix pfx )
2270 if (pfx & PFX_CS) return "%cs:";
2271 if (pfx & PFX_DS) return "%ds:";
2272 if (pfx & PFX_ES) return "%es:";
2273 if (pfx & PFX_FS) return "%fs:";
2274 if (pfx & PFX_GS) return "%gs:";
2275 if (pfx & PFX_SS) return "%ss:";
2286 Prefix pfx, IRExpr* virtual )
2289 if (pfx & PFX_FS) {
2301 if (pfx & PFX_GS) {
2316 if (haveASO(pfx))
2410 VexAbiInfo* vbi, Prefix pfx, Long delta,
2434 DIS(buf, "%s(%s)", segRegTxt(pfx), nameIRegRexB(8,pfx,rm));
2437 handleAddrOverrides(vbi, pfx, getIRegRexB(8,pfx,rm)));
2448 DIS(buf, "%s(%s)", segRegTxt(pfx), nameIRegRexB(8,pfx,rm));
2450 DIS(buf, "%s%lld(%s)", segRegTxt(pfx), d, nameIRegRexB(8,pfx,rm));
2454 handleAddrOverrides(vbi, pfx,
2455 binop(Iop_Add64,getIRegRexB(8,pfx,rm),mkU64(d))));
2465 DIS(buf, "%s%lld(%s)", segRegTxt(pfx), d, nameIRegRexB(8,pfx,rm));
2468 handleAddrOverrides(vbi, pfx,
2469 binop(Iop_Add64,getIRegRexB(8,pfx,rm),mkU64(d))));
2483 DIS(buf, "%s%lld(%%rip)", segRegTxt(pfx), d);
2493 handleAddrOverrides(vbi, pfx,
2521 Bool index_is_SP = toBool(index_r == R_RSP && 0==getRexX(pfx));
2526 DIS(buf, "%s(%s,%s)", segRegTxt(pfx),
2527 nameIRegRexB(8,pfx,base_r),
2528 nameIReg64rexX(pfx,index_r));
2530 DIS(buf, "%s(%s,%s,%d)", segRegTxt(pfx),
2531 nameIRegRexB(8,pfx,base_r),
2532 nameIReg64rexX(pfx,index_r), 1<<scale);
2537 handleAddrOverrides(vbi, pfx,
2539 getIRegRexB(8,pfx,base_r),
2540 binop(Iop_Shl64, getIReg64rexX(pfx,index_r),
2546 DIS(buf, "%s%lld(,%s,%d)", segRegTxt(pfx), d,
2547 nameIReg64rexX(pfx,index_r), 1<<scale);
2551 handleAddrOverrides(vbi, pfx,
2553 binop(Iop_Shl64, getIReg64rexX(pfx,index_r),
2559 DIS(buf, "%s(%s)", segRegTxt(pfx), nameIRegRexB(8,pfx,base_r));
2562 handleAddrOverrides(vbi, pfx, getIRegRexB(8,pfx,base_r)));
2567 DIS(buf, "%s%lld", segRegTxt(pfx), d);
2570 handleAddrOverrides(vbi, pfx, mkU64(d)));
2592 if (index_r == R_RSP && 0==getRexX(pfx)) {
2593 DIS(buf, "%s%lld(%s)", segRegTxt(pfx),
2594 d, nameIRegRexB(8,pfx,base_r));
2597 handleAddrOverrides(vbi, pfx,
2598 binop(Iop_Add64, getIRegRexB(8,pfx,base_r), mkU64(d)) ));
2601 DIS(buf, "%s%lld(%s,%s)", segRegTxt(pfx), d,
2602 nameIRegRexB(8,pfx,base_r),
2603 nameIReg64rexX(pfx,index_r));
2605 DIS(buf, "%s%lld(%s,%s,%d)", segRegTxt(pfx), d,
2606 nameIRegRexB(8,pfx,base_r),
2607 nameIReg64rexX(pfx,index_r), 1<<scale);
2612 handleAddrOverrides(vbi, pfx,
2615 getIRegRexB(8,pfx,base_r),
2617 getIReg64rexX(pfx,index_r), mkU8(scale))),
2639 if (index_r == R_RSP && 0==getRexX(pfx)) {
2640 DIS(buf, "%s%lld(%s)", segRegTxt(pfx),
2641 d, nameIRegRexB(8,pfx,base_r));
2644 handleAddrOverrides(vbi, pfx,
2645 binop(Iop_Add64, getIRegRexB(8,pfx,base_r), mkU64(d)) ));
2648 DIS(buf, "%s%lld(%s,%s)", segRegTxt(pfx), d,
2649 nameIRegRexB(8,pfx,base_r),
2650 nameIReg64rexX(pfx,index_r));
2652 DIS(buf, "%s%lld(%s,%s,%d)", segRegTxt(pfx), d,
2653 nameIRegRexB(8,pfx,base_r),
2654 nameIReg64rexX(pfx,index_r), 1<<scale);
2659 handleAddrOverrides(vbi, pfx,
2662 getIRegRexB(8,pfx,base_r),
2664 getIReg64rexX(pfx,index_r), mkU8(scale))),
2681 static UInt lengthAMode ( Prefix pfx, Long delta )
2789 Prefix pfx,
2819 && offsetIRegG(size,pfx,rm) == offsetIRegE(size,pfx,rm)) {
2822 putIRegG(size,pfx,rm, mkU(ty,0));
2825 assign( dst0, getIRegG(size,pfx,rm) );
2826 assign( src, getIRegE(size,pfx,rm) );
2831 putIRegG(size, pfx, rm, mkexpr(dst1));
2836 putIRegG(size, pfx, rm, mkexpr(dst1));
2844 putIRegG(size, pfx, rm, mkexpr(dst1));
2848 nameIRegE(size,pfx,rm),
2849 nameIRegG(size,pfx,rm));
2853 addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
2854 assign( dst0, getIRegG(size,pfx,rm) );
2860 putIRegG(size, pfx, rm, mkexpr(dst1));
2865 putIRegG(size, pfx, rm, mkexpr(dst1));
2873 putIRegG(size, pfx, rm, mkexpr(dst1));
2877 dis_buf, nameIRegG(size, pfx, rm));
2905 Prefix pfx,
2935 && offsetIRegG(size,pfx,rm) == offsetIRegE(size,pfx,rm)) {
2936 putIRegE(size,pfx,rm, mkU(ty,0));
2939 assign(dst0, getIRegE(size,pfx,rm));
2940 assign(src, getIRegG(size,pfx,rm));
2945 putIRegE(size, pfx, rm, mkexpr(dst1));
2950 putIRegE(size, pfx, rm, mkexpr(dst1));
2958 putIRegE(size, pfx, rm, mkexpr(dst1));
2962 nameIRegG(size,pfx,rm),
2963 nameIRegE(size,pfx,rm));
2969 addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
2971 assign(src, getIRegG(size,pfx,rm));
2974 if (pfx & PFX_LOCK) {
2985 if (pfx & PFX_LOCK) {
2997 if (pfx & PFX_LOCK) {
3014 nameIRegG(size,pfx,rm), dis_buf);
3038 Prefix pfx,
3047 putIRegG(size, pfx, rm, getIRegE(size, pfx, rm));
3049 nameIRegE(size,pfx,rm),
3050 nameIRegG(size,pfx,rm));
3056 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
3057 putIRegG(size, pfx, rm, loadLE(szToITy(size), mkexpr(addr)));
3060 nameIRegG(size,pfx,rm));
3084 Prefix pfx,
3093 putIRegE(size, pfx, rm, getIRegG(size, pfx, rm));
3095 nameIRegG(size,pfx,rm),
3096 nameIRegE(size,pfx,rm));
3102 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
3103 storeLE( mkexpr(addr), getIRegG(size, pfx, rm) );
3105 nameIRegG(size,pfx,rm),
3165 Prefix pfx,
3170 putIRegG(szd, pfx, rm,
3173 getIRegE(szs,pfx,rm)));
3177 nameIRegE(szs,pfx,rm),
3178 nameIRegG(szd,pfx,rm));
3186 IRTemp addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
3187 putIRegG(szd, pfx, rm,
3195 nameIRegG(szd,pfx,rm));
3269 Prefix pfx,
3296 assign(dst0, getIRegE(sz,pfx,modrm));
3315 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3320 nameIRegE(sz,pfx,modrm));
3322 addr = disAMode ( &len, vbi, pfx, delta, dis_buf, /*xtra*/d_sz );
3328 if (pfx & PFX_LOCK) {
3339 if (pfx & PFX_LOCK) {
3351 if (pfx & PFX_LOCK) {
3379 Prefix pfx,
3399 assign(dst0, getIRegE(sz, pfx, modrm));
3402 addr = disAMode ( &len, vbi, pfx, delta, dis_buf, /*xtra*/d_sz );
3620 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3628 vex_printf(", %s\n", nameIRegE(sz,pfx,modrm));
3649 Prefix pfx,
3694 assign( t2, widenUto64(getIRegE(sz, pfx, modrm)) );
3698 src_val, nameIRegE(sz,pfx,modrm));
3701 t_addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 1 );
3730 putIRegE(sz, pfx, modrm, narrowTo(ty, mkexpr(t2m)));
3732 if (pfx & PFX_LOCK) {
3840 Prefix pfx, Int sz, Long delta, Bool* decode_OK )
3860 getIRegE(sz,pfx,modrm),
3865 nameIRegE(sz, pfx, modrm));
3873 putIRegE(sz, pfx, modrm,
3875 getIRegE(sz, pfx, modrm)));
3877 nameIRegE(sz, pfx, modrm));
3885 assign(src, getIRegE(sz, pfx, modrm));
3889 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3890 DIP("neg%c %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm));
3895 assign(src, getIRegE(sz,pfx,modrm));
3897 nameIRegE(sz,pfx,modrm) );
3902 assign(src, getIRegE(sz,pfx,modrm));
3904 nameIRegE(sz,pfx,modrm) );
3908 assign( t1, getIRegE(sz, pfx, modrm) );
3911 nameIRegE(sz, pfx, modrm));
3915 assign( t1, getIRegE(sz, pfx, modrm) );
3918 nameIRegE(sz, pfx, modrm));
3925 addr = disAMode ( &len, vbi, pfx, delta, dis_buf,
3953 if (pfx & PFX_LOCK) {
3969 if (pfx & PFX_LOCK) {
4004 Prefix pfx, Long delta, Bool* decode_OK )
4017 assign(t1, getIRegE(1, pfx, modrm));
4021 putIRegE(1, pfx, modrm, mkexpr(t2));
4026 putIRegE(1, pfx, modrm, mkexpr(t2));
4035 nameIRegE(1, pfx, modrm));
4037 IRTemp addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
4042 if (pfx & PFX_LOCK) {
4052 if (pfx & PFX_LOCK) {
4074 Prefix pfx, Int sz, Long delta,
4091 assign(t1, getIRegE(sz,pfx,modrm));
4098 putIRegE(sz,pfx,modrm, mkexpr(t2));
4105 putIRegE(sz,pfx,modrm, mkexpr(t2));
4112 assign(t3, getIRegE(sz,pfx,modrm));
4127 assign(t3, getIRegE(sz,pfx,modrm));
4139 nameIRegE(sz, pfx, modrm));
4141 addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
4151 if (pfx & PFX_LOCK) {
4163 if (pfx & PFX_LOCK) {
4248 void dis_string_op( void (*dis_OP)( Int, IRTemp, Prefix pfx ),
4249 Int sz, HChar* name, Prefix pfx )
4254 vassert(pfx == clearSegBits(pfx));
4256 dis_OP( sz, t_inc, pfx );
4261 void dis_MOVS ( Int sz, IRTemp t_inc, Prefix pfx )
4268 if (haveASO(pfx)) {
4280 if (haveASO(pfx)) {
4289 void dis_LODS ( Int sz, IRTemp t_inc, Prefix pfx )
4295 if (haveASO(pfx))
4303 if (haveASO(pfx))
4309 void dis_STOS ( Int sz, IRTemp t_inc, Prefix pfx )
4318 if (haveASO(pfx))
4326 if (haveASO(pfx))
4332 void dis_CMPS ( Int sz, IRTemp t_inc, Prefix pfx )
4341 if (haveASO(pfx)) {
4357 if (haveASO(pfx)) {
4366 void dis_SCAS ( Int sz, IRTemp t_inc, Prefix pfx )
4376 if (haveASO(pfx))
4386 if (haveASO(pfx))
4400 Prefix pfx )
4408 vassert(pfx == clearSegBits(pfx));
4410 if (haveASO(pfx)) {
4423 if (haveASO(pfx))
4429 dis_OP (sz, t_inc, pfx);
4453 Prefix pfx,
4465 assign( tg, getIRegG(size, pfx, rm) );
4467 assign( te, getIRegE(size, pfx, rm) );
4469 IRTemp addr = disAMode( &alen, vbi, pfx, delta0, dis_buf, 0 );
4477 putIRegG(size, pfx, rm, mkexpr(resLo) );
4481 nameIRegE(size,pfx,rm),
4482 nameIRegG(size,pfx,rm));
4487 nameIRegG(size,pfx,rm));
4496 Prefix pfx,
4513 assign(te, getIRegE(size, pfx, rm));
4516 IRTemp addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
4531 putIRegG(size, pfx, rm, mkexpr(resLo));
4535 ( epartIsReg(rm) ? nameIRegE(size,pfx,rm) : dis_buf ),
4536 nameIRegG(size,pfx,rm) );
5014 VexAbiInfo* vbi, Prefix pfx, Long delta )
5033 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
5176 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
5676 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
5808 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6025 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6134 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6167 if ( have66(pfx) ) {
6239 if ( have66(pfx) ) {
6249 if ( have66(pfx) ) {
6302 if ( have66(pfx) ) {
6396 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6516 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6693 Prefix pfx,
6799 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
6843 Prefix pfx, Long delta,
6863 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
6975 VexAbiInfo* vbi, Prefix pfx, Int sz, Long delta )
6998 getIReg32(eregOfRexRM(pfx,modrm)) ) );
7000 nameIReg32(eregOfRexRM(pfx,modrm)),
7003 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
7020 getIReg64(eregOfRexRM(pfx,modrm)) );
7022 nameIReg64(eregOfRexRM(pfx,modrm)),
7025 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
7043 putIReg32( eregOfRexRM(pfx,modrm),
7047 nameIReg32(eregOfRexRM(pfx,modrm)));
7049 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
7062 putIReg64( eregOfRexRM(pfx,modrm),
7066 nameIReg64(eregOfRexRM(pfx,modrm)));
7068 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
7082 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
7092 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
7103 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
7113 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
7126 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "padd", True );
7132 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
7134 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "padds", True );
7141 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "paddus", True );
7149 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "psub", True );
7156 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "psubs", True );
7163 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "psubus", True );
7169 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pmulhw", False );
7175 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pmullw", False );
7180 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pmaddwd", False );
7188 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pcmpeq", True );
7196 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pcmpgt", True );
7202 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "packssdw", False );
7208 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "packsswb", False );
7214 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "packuswb", False );
7221 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
7223 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "punpckh", True );
7230 && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
7232 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "punpckl", True );
7238 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pand", False );
7244 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pandn", False );
7250 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "por", False );
7256 delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "pxor", False );
7260 delta = dis_MMX_shiftG_byE(vbi, pfx, delta, _name, _op); \
7331 assign( addr, handleAddrOverrides( vbi, pfx, getIReg64(R_RDI) ));
7413 Prefix pfx,
7455 assign( gsrc, getIRegG(sz, pfx, modrm) );
7459 assign( esrc, getIRegE(sz, pfx, modrm) );
7463 nameIRegG(sz, pfx, modrm), nameIRegE(sz, pfx, modrm));
7465 addr = disAMode ( &len, vbi, pfx, delta, dis_buf,
7473 nameIRegG(sz, pfx, modrm), dis_buf);
7569 putIRegE(sz, pfx, modrm, mkexpr(resTy));
7598 Prefix pfx, Int sz, Long delta, BtOp op )
7620 assign( t_bitno0, widenSto64(getIRegG(sz, pfx, modrm)) );
7645 storeLE( mkexpr(t_rsp), getIRegE(sz, pfx, modrm) );
7657 t_addr0 = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
7708 if ((pfx & PFX_LOCK) && !epartIsReg(modrm)) {
7740 putIRegE(sz, pfx, modrm, loadLE(szToITy(sz), mkexpr(t_rsp)) );
7745 nameBtOp(op), nameISize(sz), nameIRegG(sz, pfx, modrm),
7746 ( epartIsReg(modrm) ? nameIRegE(sz, pfx, modrm) : dis_buf ) );
7756 Prefix pfx, Int sz, Long delta, Bool fwds )
7775 assign( src, getIRegE(sz, pfx, modrm) );
7778 IRTemp addr = disAMode( &len, vbi, pfx, delta, dis_buf, 0 );
7785 ( isReg ? nameIRegE(sz, pfx, modrm) : dis_buf ),
7786 nameIRegG(sz, pfx, modrm));
7846 widenUto64( getIRegG( sz, pfx, modrm ) ),
7864 putIRegG( sz, pfx, modrm, mkexpr(dst) );
7872 void codegen_xchg_rAX_Reg ( Prefix pfx, Int sz, UInt regLo3 )
7881 assign( t2, getIRegRexB(8, pfx, regLo3) );
7883 putIRegRexB(8, pfx, regLo3, mkexpr(t1) );
7886 assign( t2, getIRegRexB(4, pfx, regLo3) );
7888 putIRegRexB(4, pfx, regLo3, mkexpr(t1) );
7891 assign( t2, getIRegRexB(2, pfx, regLo3) );
7893 putIRegRexB(2, pfx, regLo3, mkexpr(t1) );
7897 nameIRegRexB(sz,pfx, regLo3));
7956 Prefix pfx,
7986 assign( dest, getIRegE(size, pfx, rm) );
7988 assign( src, getIRegG(size, pfx, rm) );
7995 putIRegE(size, pfx, rm, mkexpr(dest2));
7997 nameIRegG(size,pfx,rm),
7998 nameIRegE(size,pfx,rm) );
8000 else if (!epartIsReg(rm) && !(pfx & PFX_LOCK)) {
8002 addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
8005 assign( src, getIRegG(size, pfx, rm) );
8014 nameIRegG(size,pfx,rm), dis_buf);
8016 else if (!epartIsReg(rm) && (pfx & PFX_LOCK)) {
8022 addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
8024 assign( src, getIRegG(size, pfx, rm) );
8035 nameIRegG(size,pfx,rm), dis_buf);
8063 Prefix pfx,
8077 assign( tmps, getIRegE(sz, pfx, rm) );
8078 assign( tmpd, getIRegG(sz, pfx, rm) );
8080 putIRegG( sz, pfx, rm,
8087 nameIRegE(sz,pfx,rm),
8088 nameIRegG(sz,pfx,rm));
8094 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
8096 assign( tmpd, getIRegG(sz, pfx, rm) );
8098 putIRegG( sz, pfx, rm,
8107 nameIRegG(sz,pfx,rm));
8116 Prefix pfx, Int sz, Long delta0 )
8140 assign( tmpd, getIRegE(sz, pfx, rm) );
8141 assign( tmpt0, getIRegG(sz, pfx, rm) );
8145 putIRegG(sz, pfx, rm, mkexpr(tmpd));
8146 putIRegE(sz, pfx, rm, mkexpr(tmpt1));
8148 nameISize(sz), nameIRegG(sz,pfx,rm),
8149 nameIRegE(sz,pfx,rm));
8153 else if (!epartIsReg(rm) && !(pfx & PFX_LOCK)) {
8155 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
8157 assign( tmpt0, getIRegG(sz, pfx, rm) );
8162 putIRegG(sz, pfx, rm, mkexpr(tmpd));
8164 nameISize(sz), nameIRegG(sz,pfx,rm), dis_buf);
8168 else if (!epartIsReg(rm) && (pfx & PFX_LOCK)) {
8170 IRTemp addr = disAMode ( &len, vbi, pfx, delta0, dis_buf, 0 );
8172 assign( tmpt0, getIRegG(sz, pfx, rm) );
8178 putIRegG(sz, pfx, rm, mkexpr(tmpd));
8180 nameISize(sz), nameIRegG(sz,pfx,rm), dis_buf);
8298 Prefix pfx, Long delta,
8308 = invertG ? unop(Iop_NotV128, getXMMReg(gregOfRexRM(pfx,rm)))
8309 : getXMMReg(gregOfRexRM(pfx,rm));
8311 putXMMReg( gregOfRexRM(pfx,rm),
8313 getXMMReg(eregOfRexRM(pfx,rm))) );
8315 nameXMMReg(eregOfRexRM(pfx,rm)),
8316 nameXMMReg(gregOfRexRM(pfx,rm)) );
8319 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8320 putXMMReg( gregOfRexRM(pfx,rm),
8325 nameXMMReg(gregOfRexRM(pfx,rm)) );
8335 Prefix pfx, Long delta,
8338 return dis_SSE_E_to_G_all_wrk( vbi, pfx, delta, opname, op, False );
8345 Prefix pfx, Long delta,
8348 return dis_SSE_E_to_G_all_wrk( vbi, pfx, delta, opname, op, True );
8355 Prefix pfx, Long delta,
8362 IRExpr* gpart = getXMMReg(gregOfRexRM(pfx,rm));
8364 putXMMReg( gregOfRexRM(pfx,rm),
8366 getXMMReg(eregOfRexRM(pfx,rm))) );
8368 nameXMMReg(eregOfRexRM(pfx,rm)),
8369 nameXMMReg(gregOfRexRM(pfx,rm)) );
8375 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8378 putXMMReg( gregOfRexRM(pfx,rm),
8382 nameXMMReg(gregOfRexRM(pfx,rm)) );
8391 Prefix pfx, Long delta,
8398 IRExpr* gpart = getXMMReg(gregOfRexRM(pfx,rm));
8400 putXMMReg( gregOfRexRM(pfx,rm),
8402 getXMMReg(eregOfRexRM(pfx,rm))) );
8404 nameXMMReg(eregOfRexRM(pfx,rm)),
8405 nameXMMReg(gregOfRexRM(pfx,rm)) );
8411 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8414 putXMMReg( gregOfRexRM(pfx,rm),
8418 nameXMMReg(gregOfRexRM(pfx,rm)) );
8428 Prefix pfx, Long delta,
8437 putXMMReg( gregOfRexRM(pfx,rm),
8438 unop(op, getXMMReg(eregOfRexRM(pfx,rm))) );
8440 nameXMMReg(eregOfRexRM(pfx,rm)),
8441 nameXMMReg(gregOfRexRM(pfx,rm)) );
8444 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8445 putXMMReg( gregOfRexRM(pfx,rm),
8449 nameXMMReg(gregOfRexRM(pfx,rm)) );
8459 Prefix pfx, Long delta,
8472 assign( oldG0, getXMMReg(gregOfRexRM(pfx,rm)) );
8478 getXMMRegLane32(eregOfRexRM(pfx,rm), 0)) );
8479 putXMMReg( gregOfRexRM(pfx,rm), unop(op, mkexpr(oldG1)) );
8481 nameXMMReg(eregOfRexRM(pfx,rm)),
8482 nameXMMReg(gregOfRexRM(pfx,rm)) );
8485 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8490 putXMMReg( gregOfRexRM(pfx,rm), unop(op, mkexpr(oldG1)) );
8493 nameXMMReg(gregOfRexRM(pfx,rm)) );
8503 Prefix pfx, Long delta,
8516 assign( oldG0, getXMMReg(gregOfRexRM(pfx,rm)) );
8522 getXMMRegLane64(eregOfRexRM(pfx,rm), 0)) );
8523 putXMMReg( gregOfRexRM(pfx,rm), unop(op, mkexpr(oldG1)) );
8525 nameXMMReg(eregOfRexRM(pfx,rm)),
8526 nameXMMReg(gregOfRexRM(pfx,rm)) );
8529 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8534 putXMMReg( gregOfRexRM(pfx,rm), unop(op, mkexpr(oldG1)) );
8537 nameXMMReg(gregOfRexRM(pfx,rm)) );
8549 Prefix pfx, Long delta,
8558 IRExpr* gpart = getXMMReg(gregOfRexRM(pfx,rm));
8561 epart = getXMMReg(eregOfRexRM(pfx,rm));
8563 nameXMMReg(eregOfRexRM(pfx,rm)),
8564 nameXMMReg(gregOfRexRM(pfx,rm)) );
8567 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8571 nameXMMReg(gregOfRexRM(pfx,rm)) );
8574 putXMMReg( gregOfRexRM(pfx,rm),
8704 Prefix pfx, Long delta,
8725 assign( plain, binop(op, getXMMReg(gregOfRexRM(pfx,rm)),
8726 getXMMReg(eregOfRexRM(pfx,rm))) );
8730 nameXMMReg(eregOfRexRM(pfx,rm)),
8731 nameXMMReg(gregOfRexRM(pfx,rm)) );
8733 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
8742 getXMMReg(gregOfRexRM(pfx,rm)),
8755 nameXMMReg(gregOfRexRM(pfx,rm)) );
8759 putXMMReg( gregOfRexRM(pfx,rm),
8765 putXMMReg( gregOfRexRM(pfx,rm),
8769 putXMMReg( gregOfRexRM(pfx,rm), mkexpr(plain) );
8780 Prefix pfx, Long delta,
8793 assign( amt, getXMMRegLane64(eregOfRexRM(pfx,rm), 0) );
8795 nameXMMReg(eregOfRexRM(pfx,rm)),
8796 nameXMMReg(gregOfRexRM(pfx,rm)) );
8799 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
8803 nameXMMReg(gregOfRexRM(pfx,rm)) );
8806 assign( g0, getXMMReg(gregOfRexRM(pfx,rm)) );
8848 putXMMReg( gregOfRexRM(pfx,rm), mkexpr(g1) );
8856 ULong dis_SSE_shiftE_imm ( Prefix pfx,
8871 nameXMMReg(eregOfRexRM(pfx,rm)) );
8872 assign( e0, getXMMReg(eregOfRexRM(pfx,rm)) );
8903 putXMMReg( eregOfRexRM(pfx,rm), mkexpr(e1) );
9508 static Long dis_COMISD ( VexAbiInfo* vbi, Prefix pfx,
9519 assign( argR, getXMMRegLane64F( eregOfRexRM(pfx,modrm),
9524 nameXMMReg(eregOfRexRM(pfx,modrm)),
9525 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9527 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9533 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9535 assign( argL, getXMMRegLane64F( gregOfRexRM(pfx,modrm),
9551 static Long dis_COMISS ( VexAbiInfo* vbi, Prefix pfx,
9562 assign( argR, getXMMRegLane32F( eregOfRexRM(pfx,modrm),
9567 nameXMMReg(eregOfRexRM(pfx,modrm)),
9568 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9570 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9576 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9578 assign( argL, getXMMRegLane32F( gregOfRexRM(pfx,modrm),
9596 static Long dis_PSHUFD_32x4 ( VexAbiInfo* vbi, Prefix pfx,
9607 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
9611 nameXMMReg(eregOfRexRM(pfx,modrm)),
9612 nameXMMReg(gregOfRexRM(pfx,modrm)));
9614 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf,
9621 nameXMMReg(gregOfRexRM(pfx,modrm)));
9637 (gregOfRexRM(pfx,modrm), mkexpr(dV));
9736 static Long dis_CVTxSD2SI ( VexAbiInfo* vbi, Prefix pfx,
9750 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
9752 nameXMMReg(eregOfRexRM(pfx,modrm)),
9753 nameIReg(sz, gregOfRexRM(pfx,modrm),
9756 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9761 nameIReg(sz, gregOfRexRM(pfx,modrm),
9772 putIReg32( gregOfRexRM(pfx,modrm),
9776 putIReg64( gregOfRexRM(pfx,modrm),
9784 static Long dis_CVTxSS2SI ( VexAbiInfo* vbi, Prefix pfx,
9798 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
9800 nameXMMReg(eregOfRexRM(pfx,modrm)),
9801 nameIReg(sz, gregOfRexRM(pfx,modrm),
9804 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9809 nameIReg(sz, gregOfRexRM(pfx,modrm),
9820 putIReg32( gregOfRexRM(pfx,modrm),
9826 putIReg64( gregOfRexRM(pfx,modrm),
9836 static Long dis_CVTPS2PD_128 ( VexAbiInfo* vbi, Prefix pfx,
9845 UInt rG = gregOfRexRM(pfx,modrm);
9847 UInt rE = eregOfRexRM(pfx,modrm);
9854 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9871 static Long dis_CVTPS2PD_256 ( VexAbiInfo* vbi, Prefix pfx,
9882 UInt rG = gregOfRexRM(pfx,modrm);
9884 UInt rE = eregOfRexRM(pfx,modrm);
9892 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9912 static Long dis_CVTPD2PS_128 ( VexAbiInfo* vbi, Prefix pfx,
9919 UInt rG = gregOfRexRM(pfx,modrm);
9923 UInt rE = eregOfRexRM(pfx,modrm);
9929 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
9957 static Long dis_CVTxPS2DQ_128 ( VexAbiInfo* vbi, Prefix pfx,
9966 UInt rG = gregOfRexRM(pfx,modrm);
9970 UInt rE = eregOfRexRM(pfx,modrm);
9976 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10007 static Long dis_CVTxPS2DQ_256 ( VexAbiInfo* vbi, Prefix pfx,
10016 UInt rG = gregOfRexRM(pfx,modrm);
10020 UInt rE = eregOfRexRM(pfx,modrm);
10026 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10059 static Long dis_CVTxPD2DQ_128 ( VexAbiInfo* vbi, Prefix pfx,
10068 UInt rG = gregOfRexRM(pfx,modrm);
10072 UInt rE = eregOfRexRM(pfx,modrm);
10078 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10114 static Long dis_CVTxPD2DQ_256 ( VexAbiInfo* vbi, Prefix pfx,
10123 UInt rG = gregOfRexRM(pfx,modrm);
10127 UInt rE = eregOfRexRM(pfx,modrm);
10133 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10168 static Long dis_CVTDQ2PS_128 ( VexAbiInfo* vbi, Prefix pfx,
10177 UInt rG = gregOfRexRM(pfx,modrm);
10181 UInt rE = eregOfRexRM(pfx,modrm);
10187 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10216 static Long dis_CVTDQ2PS_256 ( VexAbiInfo* vbi, Prefix pfx,
10225 UInt rG = gregOfRexRM(pfx,modrm);
10229 UInt rE = eregOfRexRM(pfx,modrm);
10234 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10269 static Long dis_PMOVMSKB_128 ( VexAbiInfo* vbi, Prefix pfx,
10275 UInt rE = eregOfRexRM(pfx,modrm);
10276 UInt rG = gregOfRexRM(pfx,modrm);
10673 static Long dis_PSHUFxW_128 ( VexAbiInfo* vbi, Prefix pfx,
10680 UInt rG = gregOfRexRM(pfx,modrm);
10690 UInt rE = eregOfRexRM(pfx,modrm);
10698 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
10727 static Long dis_PEXTRW_128_EregOnly_toG ( VexAbiInfo* vbi, Prefix pfx,
10732 UInt rG = gregOfRexRM(pfx,modrm);
10738 UInt rE = eregOfRexRM(pfx,modrm);
10766 static Long dis_CVTDQ2PD_128 ( VexAbiInfo* vbi, Prefix pfx,
10774 UInt rG = gregOfRexRM(pfx,modrm);
10777 UInt rE = eregOfRexRM(pfx,modrm);
10782 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10801 static Long dis_STMXCSR ( VexAbiInfo* vbi, Prefix pfx,
10809 vassert(gregOfRexRM(pfx,modrm) == 3); /* ditto */
10811 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10833 static Long dis_LDMXCSR ( VexAbiInfo* vbi, Prefix pfx,
10841 vassert(gregOfRexRM(pfx,modrm) == 2); /* ditto */
10846 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
10937 static Long dis_MASKMOVDQU ( VexAbiInfo* vbi, Prefix pfx,
10946 UInt rG = gregOfRexRM(pfx,modrm);
10947 UInt rE = eregOfRexRM(pfx,modrm);
10949 assign( addr, handleAddrOverrides( vbi, pfx, getIReg64(R_RDI) ));
10958 getXMMRegLane64( eregOfRexRM(pfx,modrm), 1 ),
10961 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ),
10980 static Long dis_MOVMSKPS_128 ( VexAbiInfo* vbi, Prefix pfx,
10984 UInt rG = gregOfRexRM(pfx,modrm);
10985 UInt rE = eregOfRexRM(pfx,modrm);
11012 static Long dis_MOVMSKPS_256 ( VexAbiInfo* vbi, Prefix pfx, Long delta )
11015 UInt rG = gregOfRexRM(pfx,modrm);
11016 UInt rE = eregOfRexRM(pfx,modrm);
11062 static Long dis_MOVMSKPD_128 ( VexAbiInfo* vbi, Prefix pfx,
11066 UInt rG = gregOfRexRM(pfx,modrm);
11067 UInt rE = eregOfRexRM(pfx,modrm);
11084 static Long dis_MOVMSKPD_256 ( VexAbiInfo* vbi, Prefix pfx, Long delta )
11087 UInt rG = gregOfRexRM(pfx,modrm);
11088 UInt rE = eregOfRexRM(pfx,modrm);
11119 Prefix pfx, Int sz, Long deltaIN,
11142 if (have66noF2noF3(pfx)
11147 putXMMReg( gregOfRexRM(pfx,modrm),
11148 getXMMReg( eregOfRexRM(pfx,modrm) ));
11149 DIP("movupd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11150 nameXMMReg(gregOfRexRM(pfx,modrm)));
11153 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11154 putXMMReg( gregOfRexRM(pfx,modrm),
11157 nameXMMReg(gregOfRexRM(pfx,modrm)));
11165 if (haveF2no66noF3(pfx)
11169 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
11170 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ));
11171 DIP("movsd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11172 nameXMMReg(gregOfRexRM(pfx,modrm)));
11175 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11176 putXMMReg( gregOfRexRM(pfx,modrm), mkV128(0) );
11177 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
11180 nameXMMReg(gregOfRexRM(pfx,modrm)));
11187 if (haveF3no66noF2(pfx)
11191 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0,
11192 getXMMRegLane32( eregOfRexRM(pfx,modrm), 0 ));
11193 DIP("movss %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11194 nameXMMReg(gregOfRexRM(pfx,modrm)));
11197 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11198 putXMMReg( gregOfRexRM(pfx,modrm), mkV128(0) );
11199 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0,
11202 nameXMMReg(gregOfRexRM(pfx,modrm)));
11208 if (haveNo66noF2noF3(pfx)
11212 putXMMReg( gregOfRexRM(pfx,modrm),
11213 getXMMReg( eregOfRexRM(pfx,modrm) ));
11214 DIP("movups %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11215 nameXMMReg(gregOfRexRM(pfx,modrm)));
11218 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11219 putXMMReg( gregOfRexRM(pfx,modrm),
11222 nameXMMReg(gregOfRexRM(pfx,modrm)));
11232 if (haveF2no66noF3(pfx)
11236 putXMMRegLane64( eregOfRexRM(pfx,modrm), 0,
11237 getXMMRegLane64( gregOfRexRM(pfx,modrm), 0 ));
11238 DIP("movsd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11239 nameXMMReg(eregOfRexRM(pfx,modrm)));
11242 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11244 pfx,modrm), 0) );
11245 DIP("movsd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11253 if (haveF3no66noF2(pfx) && sz == 4) {
11258 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11260 getXMMRegLane32(gregOfRexRM(pfx,modrm), 0) );
11261 DIP("movss %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11268 if (have66noF2noF3(pfx)
11272 putXMMReg( eregOfRexRM(pfx,modrm),
11273 getXMMReg( gregOfRexRM(pfx,modrm) ) );
11274 DIP("movupd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11275 nameXMMReg(eregOfRexRM(pfx,modrm)));
11278 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11279 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11280 DIP("movupd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11287 if (haveNo66noF2noF3(pfx)
11293 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11294 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11295 DIP("movups %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11306 if (have66noF2noF3(pfx)
11312 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11314 putXMMRegLane64( gregOfRexRM(pfx,modrm),
11318 dis_buf, nameXMMReg( gregOfRexRM(pfx,modrm) ));
11324 if (haveNo66noF2noF3(pfx)
11329 putXMMRegLane64( gregOfRexRM(pfx,modrm),
11331 getXMMRegLane64( eregOfRexRM(pfx,modrm), 1 ));
11332 DIP("movhlps %s, %s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11333 nameXMMReg(gregOfRexRM(pfx,modrm)));
11335 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11337 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0/*lower lane*/,
11340 dis_buf, nameXMMReg( gregOfRexRM(pfx,modrm) ));
11348 if (haveNo66noF2noF3(pfx)
11352 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11355 getXMMRegLane64( gregOfRexRM(pfx,modrm),
11357 DIP("movlps %s, %s\n", nameXMMReg( gregOfRexRM(pfx,modrm) ),
11365 if (have66noF2noF3(pfx)
11369 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11372 getXMMRegLane64( gregOfRexRM(pfx,modrm),
11374 DIP("movlpd %s, %s\n", nameXMMReg( gregOfRexRM(pfx,modrm) ),
11387 if (haveNo66noF2noF3(pfx) && sz == 4) {
11392 UInt rG = gregOfRexRM(pfx,modrm);
11395 UInt rE = eregOfRexRM(pfx,modrm);
11401 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11414 if (have66noF2noF3(pfx)
11420 UInt rG = gregOfRexRM(pfx,modrm);
11423 UInt rE = eregOfRexRM(pfx,modrm);
11429 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11445 if (have66noF2noF3(pfx)
11451 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11453 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
11456 nameXMMReg( gregOfRexRM(pfx,modrm) ));
11462 if (haveNo66noF2noF3(pfx)
11467 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
11468 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ) );
11469 DIP("movhps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11470 nameXMMReg(gregOfRexRM(pfx,modrm)));
11472 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11474 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
11477 nameXMMReg( gregOfRexRM(pfx,modrm) ));
11485 if (haveNo66noF2noF3(pfx)
11489 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11492 getXMMRegLane64( gregOfRexRM(pfx,modrm),
11494 DIP("movhps %s,%s\n", nameXMMReg( gregOfRexRM(pfx,modrm) ),
11502 if (have66noF2noF3(pfx)
11506 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11509 getXMMRegLane64( gregOfRexRM(pfx,modrm),
11511 DIP("movhpd %s,%s\n", nameXMMReg( gregOfRexRM(pfx,modrm) ),
11524 if (haveNo66noF2noF3(pfx)
11533 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11551 if (have66noF2noF3(pfx)
11555 putXMMReg( gregOfRexRM(pfx,modrm),
11556 getXMMReg( eregOfRexRM(pfx,modrm) ));
11557 DIP("movapd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11558 nameXMMReg(gregOfRexRM(pfx,modrm)));
11561 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11563 putXMMReg( gregOfRexRM(pfx,modrm),
11566 nameXMMReg(gregOfRexRM(pfx,modrm)));
11572 if (haveNo66noF2noF3(pfx)
11576 putXMMReg( gregOfRexRM(pfx,modrm),
11577 getXMMReg( eregOfRexRM(pfx,modrm) ));
11578 DIP("movaps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11579 nameXMMReg(gregOfRexRM(pfx,modrm)));
11582 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11584 putXMMReg( gregOfRexRM(pfx,modrm),
11587 nameXMMReg(gregOfRexRM(pfx,modrm)));
11596 if (haveNo66noF2noF3(pfx)
11601 putXMMReg( eregOfRexRM(pfx,modrm),
11602 getXMMReg( gregOfRexRM(pfx,modrm) ));
11603 DIP("movaps %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11604 nameXMMReg(eregOfRexRM(pfx,modrm)));
11607 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11609 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11610 DIP("movaps %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11617 if (have66noF2noF3(pfx)
11621 putXMMReg( eregOfRexRM(pfx,modrm),
11622 getXMMReg( gregOfRexRM(pfx,modrm) ) );
11623 DIP("movapd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11624 nameXMMReg(eregOfRexRM(pfx,modrm)));
11627 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11629 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11630 DIP("movapd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11641 if (haveNo66noF2noF3(pfx) && sz == 4) {
11651 nameXMMReg(gregOfRexRM(pfx,modrm)));
11653 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11657 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11663 gregOfRexRM(pfx,modrm), 0,
11670 gregOfRexRM(pfx,modrm), 1,
11681 if (haveF3no66noF2(pfx) && (sz == 4 || sz == 8)) {
11688 assign( arg32, getIReg32(eregOfRexRM(pfx,modrm)) );
11690 DIP("cvtsi2ss %s,%s\n", nameIReg32(eregOfRexRM(pfx,modrm)),
11691 nameXMMReg(gregOfRexRM(pfx,modrm)));
11693 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11697 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11700 gregOfRexRM(pfx,modrm), 0,
11708 assign( arg64, getIReg64(eregOfRexRM(pfx,modrm)) );
11710 DIP("cvtsi2ssq %s,%s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
11711 nameXMMReg(gregOfRexRM(pfx,modrm)));
11713 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11717 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11720 gregOfRexRM(pfx,modrm), 0,
11731 if (haveF2no66noF3(pfx) && (sz == 4 || sz == 8)) {
11736 assign( arg32, getIReg32(eregOfRexRM(pfx,modrm)) );
11738 DIP("cvtsi2sdl %s,%s\n", nameIReg32(eregOfRexRM(pfx,modrm)),
11739 nameXMMReg(gregOfRexRM(pfx,modrm)));
11741 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11745 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11747 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 0,
11754 assign( arg64, getIReg64(eregOfRexRM(pfx,modrm)) );
11756 DIP("cvtsi2sdq %s,%s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
11757 nameXMMReg(gregOfRexRM(pfx,modrm)));
11759 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11763 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11766 gregOfRexRM(pfx,modrm),
11778 if (have66noF2noF3(pfx) && sz == 2) {
11793 nameXMMReg(gregOfRexRM(pfx,modrm)));
11795 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11799 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11803 gregOfRexRM(pfx,modrm), 0,
11808 gregOfRexRM(pfx,modrm), 1,
11819 if ( (haveNo66noF2noF3(pfx) && sz == 4)
11820 || (have66noF2noF3(pfx) && sz == 2) ) {
11823 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11825 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11828 nameXMMReg(gregOfRexRM(pfx,modrm)));
11842 if (haveNo66noF2noF3(pfx) && sz == 4) {
11854 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
11855 assign(f32hi, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 1));
11857 nameXMMReg(eregOfRexRM(pfx,modrm)),
11860 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11904 if (haveF3no66noF2(pfx) && (sz == 4 || sz == 8)) {
11905 delta = dis_CVTxSS2SI( vbi, pfx, delta, False/*!isAvx*/, opc, sz);
11920 if (haveF2no66noF3(pfx) && (sz == 4 || sz == 8)) {
11921 delta = dis_CVTxSD2SI( vbi, pfx, delta, False/*!isAvx*/, opc, sz);
11928 if (have66noF2noF3(pfx) && sz == 2) {
11940 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
11941 assign(f64hi, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 1));
11943 nameXMMReg(eregOfRexRM(pfx,modrm)),
11946 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
11980 if (have66noF2noF3(pfx) && sz == 2) {
11981 delta = dis_COMISD( vbi, pfx, delta, False/*!isAvx*/, opc );
11986 if (haveNo66noF2noF3(pfx) && sz == 4) {
11987 delta = dis_COMISS( vbi, pfx, delta, False/*!isAvx*/, opc );
11995 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
12015 delta = dis_MOVMSKPS_128( vbi, pfx, delta, False/*!isAvx*/ );
12020 if (have66noF2noF3(pfx) && (sz == 2 || sz == 8)) {
12026 delta = dis_MOVMSKPD_128( vbi, pfx, delta, False/*!isAvx*/ );
12033 if (haveF3no66noF2(pfx) && sz == 4) {
12034 delta = dis_SSE_E_to_G_unary_lo32( vbi, pfx, delta,
12039 if (haveNo66noF2noF3(pfx) && sz == 4) {
12040 pfx, delta,
12045 if (haveF2no66noF3(pfx) && sz == 4) {
12046 delta = dis_SSE_E_to_G_unary_lo64( vbi, pfx, delta,
12051 if (have66noF2noF3(pfx) && sz == 2) {
12052 delta = dis_SSE_E_to_G_unary_all( vbi, pfx, delta,
12060 if (haveF3no66noF2(pfx) && sz == 4) {
12061 delta = dis_SSE_E_to_G_unary_lo32( vbi, pfx, delta,
12066 if (haveNo66noF2noF3(pfx) && sz == 4) {
12067 delta = dis_SSE_E_to_G_unary_all( vbi, pfx, delta,
12075 if (haveF3no66noF2(pfx) && sz == 4) {
12076 delta = dis_SSE_E_to_G_unary_lo32( vbi, pfx, delta,
12081 if (haveNo66noF2noF3(pfx) && sz == 4) {
12082 delta = dis_SSE_E_to_G_unary_all( vbi, pfx, delta,
12090 if (haveNo66noF2noF3(pfx) && sz == 4) {
12091 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "andps", Iop_AndV128 );
12095 if (have66noF2noF3(pfx) && sz == 2) {
12096 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "andpd", Iop_AndV128 );
12103 if (haveNo66noF2noF3(pfx) && sz == 4) {
12104 delta = dis_SSE_E_to_G_all_invG( vbi, pfx, delta, "andnps",
12109 if (have66noF2noF3(pfx) && sz == 2) {
12110 delta = dis_SSE_E_to_G_all_invG( vbi, pfx, delta, "andnpd",
12118 if (haveNo66noF2noF3(pfx) && sz == 4) {
12119 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "orps", Iop_OrV128 );
12123 if (have66noF2noF3(pfx) && sz == 2) {
12124 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "orpd", Iop_OrV128 );
12131 if (have66noF2noF3(pfx) && sz == 2) {
12132 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "xorpd", Iop_XorV128 );
12136 if (haveNo66noF2noF3(pfx) && sz == 4) {
12137 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "xorps", Iop_XorV128 );
12144 if (haveNo66noF2noF3(pfx) && sz == 4) {
12145 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "addps", Iop_Add32Fx4 );
12149 if (haveF3no66noF2(pfx) && sz == 4) {
12150 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta, "addss", Iop_Add32F0x4 );
12154 if (haveF2no66noF3(pfx)
12156 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta, "addsd", Iop_Add64F0x2 );
12160 if (have66noF2noF3(pfx)
12162 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "addpd", Iop_Add64Fx2 );
12169 if (haveF2no66noF3(pfx)
12171 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta, "mulsd", Iop_Mul64F0x2 );
12175 if (haveF3no66noF2(pfx) && sz == 4) {
12176 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta, "mulss", Iop_Mul32F0x4 );
12180 if (haveNo66noF2noF3(pfx) && sz == 4) {
12181 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "mulps", Iop_Mul32Fx4 );
12185 if (have66noF2noF3(pfx)
12187 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "mulpd", Iop_Mul64Fx2 );
12195 if (haveNo66noF2noF3(pfx) && sz == 4) {
12196 delta = dis_CVTPS2PD_128( vbi, pfx, delta, False/*!isAvx*/ );
12201 if (haveF3no66noF2(pfx) && sz == 4) {
12207 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
12208 DIP("cvtss2sd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12209 nameXMMReg(gregOfRexRM(pfx,modrm)));
12211 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
12215 nameXMMReg(gregOfRexRM(pfx,modrm)));
12218 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 0,
12225 if (haveF2no66noF3(pfx) && sz == 4) {
12232 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
12233 DIP("cvtsd2ss %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12234 nameXMMReg(gregOfRexRM(pfx,modrm)));
12236 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
12240 nameXMMReg(gregOfRexRM(pfx,modrm)));
12245 gregOfRexRM(pfx,modrm), 0,
12256 if (have66noF2noF3(pfx) && sz == 2) {
12257 delta = dis_CVTPD2PS_128( vbi, pfx, delta, False/*!isAvx*/ );
12267 if ( (have66noF2noF3(pfx) && sz == 2)
12268 || (haveF3no66noF2(pfx) && sz == 4) ) {
12270 delta = dis_CVTxPS2DQ_128( vbi, pfx, delta, False/*!isAvx*/, r2zero );
12275 if (haveNo66noF2noF3(pfx) && sz == 4) {
12276 delta = dis_CVTDQ2PS_128( vbi, pfx, delta, False/*!isAvx*/ );
12283 if (haveF3no66noF2(pfx) && sz == 4) {
12284 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta, "subss", Iop_Sub32F0x4 );
12288 if (haveF2no66noF3(pfx)
12290 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta, "subsd", Iop_Sub64F0x2 );
12294 if (haveNo66noF2noF3(pfx) && sz == 4) {
12295 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "subps", Iop_Sub32Fx4 );
12299 if (have66noF2noF3(pfx) && sz == 2) {
12300 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "subpd", Iop_Sub64Fx2 );
12307 if (haveNo66noF2noF3(pfx) && sz == 4) {
12308 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "minps", Iop_Min32Fx4 );
12312 if (haveF3no66noF2(pfx) && sz == 4) {
12313 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta, "minss", Iop_Min32F0x4 );
12317 if (haveF2no66noF3(pfx) && sz == 4) {
12318 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta, "minsd", Iop_Min64F0x2 );
12322 if (have66noF2noF3(pfx) && sz == 2) {
12323 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "minpd", Iop_Min64Fx2 );
12330 if (haveF2no66noF3(pfx) && sz == 4) {
12331 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta, "divsd", Iop_Div64F0x2 );
12335 if (haveNo66noF2noF3(pfx) && sz == 4) {
12336 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "divps", Iop_Div32Fx4 );
12340 if (haveF3no66noF2(pfx) && sz == 4) {
12341 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta, "divss", Iop_Div32F0x4 );
12345 if (have66noF2noF3(pfx) && sz == 2) {
12346 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "divpd", Iop_Div64Fx2 );
12353 if (haveNo66noF2noF3(pfx) && sz == 4) {
12354 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "maxps", Iop_Max32Fx4 );
12358 if (haveF3no66noF2(pfx) && sz == 4) {
12359 delta = dis_SSE_E_to_G_lo32( vbi, pfx, delta, "maxss", Iop_Max32F0x4 );
12363 if (haveF2no66noF3(pfx) && sz == 4) {
12364 delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta, "maxsd", Iop_Max64F0x2 );
12368 if (have66noF2noF3(pfx) && sz == 2) {
12369 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "maxpd", Iop_Max64Fx2 );
12376 if (have66noF2noF3(pfx) && sz == 2) {
12377 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12386 if (have66noF2noF3(pfx) && sz == 2) {
12387 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12396 if (have66noF2noF3(pfx) && sz == 2) {
12397 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12406 if (have66noF2noF3(pfx) && sz == 2) {
12407 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12416 if (have66noF2noF3(pfx) && sz == 2) {
12417 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12425 if (have66noF2noF3(pfx) && sz == 2) {
12426 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12434 if (have66noF2noF3(pfx) && sz == 2) {
12435 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12443 if (have66noF2noF3(pfx) && sz == 2) {
12444 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12453 if (have66noF2noF3(pfx) && sz == 2) {
12454 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12463 if (have66noF2noF3(pfx) && sz == 2) {
12464 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12473 if (have66noF2noF3(pfx) && sz == 2) {
12474 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12483 if (have66noF2noF3(pfx) && sz == 2) {
12484 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12493 if (have66noF2noF3(pfx) && sz == 2) {
12494 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12503 if (have66noF2noF3(pfx) && sz == 2) {
12504 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12516 if (have66noF2noF3(pfx)) {
12524 gregOfRexRM(pfx,modrm),
12525 unop( Iop_32UtoV128, getIReg32(eregOfRexRM(pfx,modrm)) )
12527 DIP("movd %s, %s\n", nameIReg32(eregOfRexRM(pfx,modrm)),
12528 nameXMMReg(gregOfRexRM(pfx,modrm)));
12531 gregOfRexRM(pfx,modrm),
12532 unop( Iop_64UtoV128, getIReg64(eregOfRexRM(pfx,modrm)) )
12534 DIP("movq %s, %s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
12535 nameXMMReg(gregOfRexRM(pfx,modrm)));
12538 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
12541 gregOfRexRM(pfx,modrm),
12547 nameXMMReg(gregOfRexRM(pfx,modrm)));
12554 if (have66noF2noF3(pfx)
12559 putXMMReg( gregOfRexRM(pfx,modrm),
12560 getXMMReg( eregOfRexRM(pfx,modrm) ));
12561 DIP("movdqa %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12562 nameXMMReg(gregOfRexRM(pfx,modrm)));
12565 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
12567 putXMMReg( gregOfRexRM(pfx,modrm),
12570 nameXMMReg(gregOfRexRM(pfx,modrm)));
12575 if (haveF3no66noF2(pfx) && sz == 4) {
12579 putXMMReg( gregOfRexRM(pfx,modrm),
12580 getXMMReg( eregOfRexRM(pfx,modrm) ));
12581 DIP("movdqu %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12582 nameXMMReg(gregOfRexRM(pfx,modrm)));
12585 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
12586 putXMMReg( gregOfRexRM(pfx,modrm),
12589 nameXMMReg(gregOfRexRM(pfx,modrm)));
12598 if (have66noF2noF3(pfx) && sz == 2) {
12599 delta = dis_PSHUFD_32x4( vbi, pfx, delta, False/*!writesYmm*/);
12604 if (haveNo66noF2noF3(pfx) && sz == 4) {
12620 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf,
12642 if (haveF2no66noF3(pfx) && sz == 4) {
12643 delta = dis_PSHUFxW_128( vbi, pfx, delta,
12649 if (haveF3no66noF2(pfx) && sz == 4) {
12650 delta = dis_PSHUFxW_128( vbi, pfx, delta,
12658 if (have66noF2noF3(pfx) && sz == 2
12661 delta = dis_SSE_shiftE_imm( pfx, delta, "psrlw", Iop_ShrN16x8 );
12665 if (have66noF2noF3(pfx) && sz == 2
12668 delta = dis_SSE_shiftE_imm( pfx, delta, "psraw", Iop_SarN16x8 );
12672 if (have66noF2noF3(pfx) && sz == 2
12675 delta = dis_SSE_shiftE_imm( pfx, delta, "psllw", Iop_ShlN16x8 );
12682 if (have66noF2noF3(pfx) && sz == 2
12685 delta = dis_SSE_shiftE_imm( pfx, delta, "psrld", Iop_ShrN32x4 );
12689 if (have66noF2noF3(pfx) && sz == 2
12692 delta = dis_SSE_shiftE_imm( pfx, delta, "psrad", Iop_SarN32x4 );
12696 if (have66noF2noF3(pfx) && sz == 2
12699 delta = dis_SSE_shiftE_imm( pfx, delta, "pslld", Iop_ShlN32x4 );
12707 if (have66noF2noF3(pfx) && sz == 2
12711 Int reg = eregOfRexRM(pfx,getUChar(delta));
12721 if (have66noF2noF3(pfx) && sz == 2
12725 Int reg = eregOfRexRM(pfx,getUChar(delta));
12735 if (have66noF2noF3(pfx) && sz == 2
12738 delta = dis_SSE_shiftE_imm( pfx, delta, "psrlq", Iop_ShrN64x2 );
12742 if (have66noF2noF3(pfx) && sz == 2
12745 delta = dis_SSE_shiftE_imm( pfx, delta, "psllq", Iop_ShlN64x2 );
12752 if (have66noF2noF3(pfx) && sz == 2) {
12753 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12761 if (have66noF2noF3(pfx) && sz == 2) {
12762 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12770 if (have66noF2noF3(pfx) && sz == 2) {
12771 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
12780 if (haveF3no66noF2(pfx)
12784 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
12785 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ));
12787 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1, mkU64(0) );
12788 DIP("movsd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12789 nameXMMReg(gregOfRexRM(pfx,modrm)));
12792 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
12793 putXMMReg( gregOfRexRM(pfx,modrm), mkV128(0) );
12794 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
12797 nameXMMReg(gregOfRexRM(pfx,modrm)));
12804 if (have66noF2noF3(pfx) && (sz == 2 || sz == 8)) {
12810 putIReg32( eregOfRexRM(pfx,modrm),
12811 getXMMRegLane32(gregOfRexRM(pfx,modrm), 0) );
12812 DIP("movd %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
12813 nameIReg32(eregOfRexRM(pfx,modrm)));
12815 putIReg64( eregOfRexRM(pfx,modrm),
12816 getXMMRegLane64(gregOfRexRM(pfx,modrm), 0) );
12817 DIP("movq %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
12818 nameIReg64(eregOfRexRM(pfx,modrm)));
12821 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
12825 ? getXMMRegLane32(gregOfRexRM(pfx,modrm),0)
12826 : getXMMRegLane64(gregOfRexRM(pfx,modrm),0) );
12828 nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
12836 if (haveF3no66noF2(pfx) && sz == 4) {
12841 putXMMReg( eregOfRexRM(pfx,modrm),
12842 getXMMReg(gregOfRexRM(pfx,modrm)) );
12843 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
12844 nameXMMReg(eregOfRexRM(pfx,modrm)));
12846 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
12848 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
12849 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
12854 if (have66noF2noF3(pfx) && sz == 2) {
12858 putXMMReg( eregOfRexRM(pfx,modrm),
12859 getXMMReg(gregOfRexRM(pfx,modrm)) );
12860 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
12861 nameXMMReg(eregOfRexRM(pfx,modrm)));
12863 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
12866 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
12867 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
12875 if (haveNo66noF2noF3(pfx)
12888 if (haveNo66noF2noF3(pfx)
12902 if (haveNo66noF2noF3(pfx)
12913 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
12932 if (haveNo66noF2noF3(pfx)
12935 delta = dis_STMXCSR(vbi, pfx, delta, False/*!isAvx*/);
12939 if (haveNo66noF2noF3(pfx)
12942 delta = dis_LDMXCSR(vbi, pfx, delta, False/*!isAvx*/);
12952 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
12954 && gregOfRexRM(pfx,getUChar(delta)) == 0) {
12959 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13028 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)
13030 && gregOfRexRM(pfx,getUChar(delta)) == 1) {
13035 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13108 if (haveNo66noF2noF3(pfx) && sz == 4) {
13110 delta = dis_SSE_cmp_E_to_G( vbi, pfx, delta, "cmpps", True, 4 );
13114 if (haveF3no66noF2(pfx) && sz == 4) {
13116 delta = dis_SSE_cmp_E_to_G( vbi, pfx, delta, "cmpss", False, 4 );
13120 if (haveF2no66noF3(pfx) && sz == 4) {
13122 delta = dis_SSE_cmp_E_to_G( vbi, pfx, delta, "cmpsd", False, 8 );
13126 if (have66noF2noF3(pfx) && sz == 2) {
13128 delta = dis_SSE_cmp_E_to_G( vbi, pfx, delta, "cmppd", True, 8 );
13135 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)) {
13138 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13139 storeLE( mkexpr(addr), getIRegG(sz, pfx, modrm) );
13141 nameIRegG(sz, pfx, modrm));
13153 if (haveNo66noF2noF3(pfx)
13169 assign(t4, getIReg16(eregOfRexRM(pfx,modrm)));
13173 nameIReg16(eregOfRexRM(pfx,modrm)),
13176 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
13197 if (have66noF2noF3(pfx)
13202 UInt rG = gregOfRexRM(pfx,modrm);
13204 UInt rE = eregOfRexRM(pfx,modrm);
13211 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf,
13231 if (haveNo66noF2noF3(pfx) && (sz == 4 || sz == 8)) {
13247 putIReg64(gregOfRexRM(pfx,modrm), unop(Iop_16Uto64, mkexpr(t5)));
13249 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_16Uto32, mkexpr(t5)));
13253 sz==8 ? nameIReg64(gregOfRexRM(pfx,modrm))
13254 : nameIReg32(gregOfRexRM(pfx,modrm))
13266 if (have66noF2noF3(pfx)
13269 delta = dis_PEXTRW_128_EregOnly_toG( vbi, pfx, delta,
13278 if (haveNo66noF2noF3(pfx) && sz == 4) {
13283 UInt rG = gregOfRexRM(pfx,modrm);
13286 UInt rE = eregOfRexRM(pfx,modrm);
13292 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
13299 putXMMReg( gregOfRexRM(pfx,modrm), mkexpr(res) );
13303 if (have66noF2noF3(pfx) && sz == 2) {
13309 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13312 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13316 nameXMMReg(eregOfRexRM(pfx,modrm)),
13317 nameXMMReg(gregOfRexRM(pfx,modrm)));
13319 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
13325 nameXMMReg(gregOfRexRM(pfx,modrm)));
13329 putXMMReg( gregOfRexRM(pfx,modrm), mkexpr(res) );
13336 if (have66noF2noF3(pfx) && sz == 2) {
13337 delta = dis_SSE_shiftG_byE( vbi, pfx, delta, "psrlw", Iop_ShrN16x8 );
13344 if (have66noF2noF3(pfx) && sz == 2) {
13345 delta = dis_SSE_shiftG_byE( vbi, pfx, delta, "psrld", Iop_ShrN32x4 );
13352 if (have66noF2noF3(pfx) && sz == 2) {
13353 delta = dis_SSE_shiftG_byE( vbi, pfx, delta, "psrlq", Iop_ShrN64x2 );
13360 if (have66noF2noF3(pfx) && sz == 2) {
13361 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13367 if (haveNo66noF2noF3(pfx) && sz == 4) {
13370 vbi, pfx, delta, opc, "paddq", False );
13377 if (have66noF2noF3(pfx) && sz == 2) {
13378 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13387 if (haveF3no66noF2(pfx) && sz == 4) {
13391 putXMMReg( gregOfRexRM(pfx,modrm),
13394 nameXMMReg(gregOfRexRM(pfx,modrm)));
13402 if (have66noF2noF3(pfx)
13409 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13411 getXMMRegLane64( gregOfRexRM(pfx,modrm), 0 ));
13412 DIP("movq %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf );
13418 if (haveF2no66noF3(pfx) && sz == 4) {
13423 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ));
13424 DIP("movdq2q %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13438 if (have66noF2noF3(pfx)
13441 delta = dis_PMOVMSKB_128( vbi, pfx, delta, False/*!isAvx*/ );
13448 if (haveNo66noF2noF3(pfx)
13461 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_64to32,mkexpr(t1)));
13463 nameIReg32(gregOfRexRM(pfx,modrm)));
13473 if (have66noF2noF3(pfx) && sz == 2) {
13474 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13482 if (have66noF2noF3(pfx) && sz == 2) {
13483 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13492 if (haveNo66noF2noF3(pfx) && sz == 4) {
13495 vbi, pfx, delta, opc, "pminub", False );
13499 if (have66noF2noF3(pfx) && sz == 2) {
13500 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13508 if (have66noF2noF3(pfx) && sz == 2) {
13509 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "pand", Iop_AndV128 );
13516 if (have66noF2noF3(pfx) && sz == 2) {
13517 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13525 if (have66noF2noF3(pfx) && sz == 2) {
13526 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13535 if (haveNo66noF2noF3(pfx) && sz == 4) {
13538 vbi, pfx, delta, opc, "pmaxub", False );
13542 if (have66noF2noF3(pfx) && sz == 2) {
13543 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13551 if (have66noF2noF3(pfx) && sz == 2) {
13552 delta = dis_SSE_E_to_G_all_invG( vbi, pfx, delta, "pandn", Iop_AndV128 );
13560 if (haveNo66noF2noF3(pfx) && sz == 4) {
13563 vbi, pfx, delta, opc, "pavgb", False );
13567 if (have66noF2noF3(pfx) && sz == 2) {
13568 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13576 if (have66noF2noF3(pfx) && sz == 2) {
13577 delta = dis_SSE_shiftG_byE( vbi, pfx, delta, "psraw", Iop_SarN16x8 );
13584 if (have66noF2noF3(pfx) && sz == 2) {
13585 delta = dis_SSE_shiftG_byE( vbi, pfx, delta, "psrad", Iop_SarN32x4 );
13593 if (haveNo66noF2noF3(pfx) && sz == 4) {
13596 vbi, pfx, delta, opc, "pavgw", False );
13600 if (have66noF2noF3(pfx) && sz == 2) {
13601 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13610 if (haveNo66noF2noF3(pfx) && sz == 4) {
13613 vbi, pfx, delta, opc, "pmuluh", False );
13617 if (have66noF2noF3(pfx) && sz == 2) {
13618 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13626 if (have66noF2noF3(pfx) && sz == 2) {
13627 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13639 if ( (haveF2no66noF3(pfx) && sz == 4)
13640 || (have66noF2noF3(pfx) && sz == 2) ) {
13641 delta = dis_CVTxPD2DQ_128( vbi, pfx, delta, False/*!isAvx*/,
13647 if (haveF3no66noF2(pfx) && sz == 4) {
13648 delta = dis_CVTDQ2PD_128(vbi, pfx, delta, False/*!isAvx*/);
13660 if (haveNo66noF2noF3(pfx) && sz == 4) {
13664 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13674 if (have66noF2noF3(pfx) && sz == 2) {
13677 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13679 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
13681 nameXMMReg(gregOfRexRM(pfx,modrm)));
13691 if (have66noF2noF3(pfx) && sz == 2) {
13692 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13700 if (have66noF2noF3(pfx) && sz == 2) {
13701 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13710 if (haveNo66noF2noF3(pfx) && sz == 4) {
13713 vbi, pfx, delta, opc, "pminsw", False );
13717 if (have66noF2noF3(pfx) && sz == 2) {
13718 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13726 if (have66noF2noF3(pfx) && sz == 2) {
13727 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "por", Iop_OrV128 );
13734 if (have66noF2noF3(pfx) && sz == 2) {
13735 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13743 if (have66noF2noF3(pfx) && sz == 2) {
13744 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13753 if (haveNo66noF2noF3(pfx) && sz == 4) {
13756 vbi, pfx, delta, opc, "pmaxsw", False );
13760 if (have66noF2noF3(pfx) && sz == 2) {
13761 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13769 if (have66noF2noF3(pfx
13770 delta = dis_SSE_E_to_G_all( vbi, pfx, delta, "pxor", Iop_XorV128 );
13777 if (have66noF2noF3(pfx) && sz == 2) {
13778 delta = dis_SSE_shiftG_byE( vbi, pfx, delta, "psllw", Iop_ShlN16x8 );
13785 if (have66noF2noF3(pfx) && sz == 2) {
13786 delta = dis_SSE_shiftG_byE( vbi, pfx, delta, "pslld", Iop_ShlN32x4 );
13793 if (have66noF2noF3(pfx) && sz == 2) {
13794 delta = dis_SSE_shiftG_byE( vbi, pfx, delta, "psllq", Iop_ShlN64x2 );
13803 if (have66noF2noF3(pfx) && sz == 2) {
13807 UInt rG = gregOfRexRM(pfx,modrm);
13810 UInt rE = eregOfRexRM(pfx,modrm);
13815 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13826 if (haveNo66noF2noF3(pfx) && sz == 4) {
13842 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13860 if (have66noF2noF3(pfx) && sz == 2) {
13864 UInt rG = gregOfRexRM(pfx,modrm);
13866 UInt rE = eregOfRexRM(pfx,modrm);
13871 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13885 if (haveNo66noF2noF3(pfx) && sz == 4) {
13888 vbi, pfx, delta, opc, "psadbw", False );
13893 if (have66noF2noF3(pfx) && sz == 2) {
13897 UInt rG = gregOfRexRM(pfx,modrm);
13899 UInt rE = eregOfRexRM(pfx,modrm);
13904 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
13919 if (haveNo66noF2noF3(pfx) && sz == 4) {
13921 delta = dis_MMX( &ok, vbi, pfx, sz, delta-1 );
13925 if (have66noF2noF3(pfx) && sz == 2 && epartIsReg(getUChar(delta))) {
13926 delta = dis_MASKMOVDQU( vbi, pfx, delta, False/*!isAvx*/ );
13933 if (have66noF2noF3(pfx) && sz == 2) {
13934 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13942 if (have66noF2noF3(pfx) && sz == 2) {
13943 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13951 if (have66noF2noF3(pfx) && sz == 2) {
13952 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13960 if (have66noF2noF3(pfx) && sz == 2) {
13961 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13967 if (haveNo66noF2noF3(pfx) && sz == 4) {
13970 vbi, pfx, delta, opc, "psubq", False );
13977 if (have66noF2noF3(pfx) && sz == 2) {
13978 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13986 if (have66noF2noF3(pfx) && sz == 2) {
13987 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
13995 if (have66noF2noF3(pfx) && sz == 2) {
13996 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
14023 static Long dis_MOVDDUP_128 ( VexAbiInfo* vbi, Prefix pfx,
14032 UInt rG = gregOfRexRM(pfx,modrm);
14034 UInt rE = eregOfRexRM(pfx,modrm);
14041 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14053 static Long dis_MOVDDUP_256 ( VexAbiInfo* vbi, Prefix pfx,
14062 UInt rG = gregOfRexRM(pfx,modrm);
14064 UInt rE = eregOfRexRM(pfx,modrm);
14070 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14085 static Long dis_MOVSxDUP_128 ( VexAbiInfo* vbi, Prefix pfx,
14093 UInt rG = gregOfRexRM(pfx,modrm);
14097 UInt rE = eregOfRexRM(pfx,modrm);
14103 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14119 static Long dis_MOVSxDUP_256 ( VexAbiInfo* vbi, Prefix pfx,
14127 UInt rG = gregOfRexRM(pfx,modrm);
14131 UInt rE = eregOfRexRM(pfx,modrm);
14137 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14196 Prefix pfx, Int sz, Long deltaIN )
14213 if (haveF3no66noF2(pfx) && sz == 4) {
14214 delta = dis_MOVSxDUP_128( vbi, pfx, delta, False/*!isAvx*/,
14220 if (haveF2no66noF3(pfx)
14222 delta = dis_MOVDDUP_128( vbi, pfx, delta, False/*!isAvx*/ );
14230 if (haveF3no66noF2(pfx) && sz == 4) {
14231 delta = dis_MOVSxDUP_128( vbi, pfx, delta, False/*!isAvx*/,
14241 if (haveF2no66noF3(pfx) && sz == 4) {
14247 UInt rG = gregOfRexRM(pfx,modrm);
14249 UInt rE = eregOfRexRM(pfx,modrm);
14254 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14266 if (have66noF2noF3(pfx) && sz == 2) {
14272 UInt rG = gregOfRexRM(pfx,modrm);
14274 UInt rE = eregOfRexRM(pfx,modrm);
14279 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14293 if (have66noF2noF3(pfx) && sz == 2) {
14297 UInt rG = gregOfRexRM(pfx,modrm);
14299 UInt rE = eregOfRexRM(pfx,modrm);
14304 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14315 if (haveF2no66noF3(pfx) && sz == 4) {
14319 UInt rG = gregOfRexRM(pfx,modrm);
14323 UInt rE = eregOfRexRM(pfx,modrm);
14328 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14342 if (haveF2no66noF3(pfx) && sz == 4) {
14347 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14348 putXMMReg( gregOfRexRM(pfx,modrm),
14351 nameXMMReg(gregOfRexRM(pfx,modrm)));
14470 static Long dis_PHADD_128 ( VexAbiInfo* vbi, Prefix pfx, Long delta,
14487 UInt rG = gregOfRexRM(pfx,modrm);
14488 UInt rV = isAvx ? getVexNvvvv(pfx) : rG;
14507 UInt rE = eregOfRexRM(pfx,modrm);
14512 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14572 Prefix pfx, Int sz, Long deltaIN )
14588 if (have66noF2noF3(pfx)
14594 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
14597 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
14599 DIP("pshufb %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
14600 nameXMMReg(gregOfRexRM(pfx,modrm)));
14602 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14607 nameXMMReg(gregOfRexRM(pfx,modrm)));
14611 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(res));
14615 if (haveNo66noF2noF3(pfx) && sz == 4) {
14629 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14672 if (have66noF2noF3(pfx)
14674 delta = dis_PHADD_128( vbi, pfx, delta, False/*isAvx*/, opc );
14690 if (haveNo66noF2noF3(pfx) && sz == 4) {
14723 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14744 if (have66noF2noF3(pfx)
14749 UInt rG = gregOfRexRM(pfx,modrm);
14754 UInt rE = eregOfRexRM(pfx,modrm);
14759 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14771 if (haveNo66noF2noF3(pfx) && sz == 4) {
14789 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14827 if (have66noF2noF3(pfx)
14846 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
14849 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
14851 DIP("psign%s %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
14852 nameXMMReg(gregOfRexRM(pfx,modrm)));
14854 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14859 nameXMMReg(gregOfRexRM(pfx,modrm)));
14868 gregOfRexRM(pfx,modrm),
14879 if (haveNo66noF2noF3(pfx) && sz == 4) {
14902 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14920 if (have66noF2noF3(pfx)
14930 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
14933 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
14935 DIP("pmulhrsw %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
14936 nameXMMReg(gregOfRexRM(pfx,modrm)));
14938 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14943 nameXMMReg(gregOfRexRM(pfx,modrm)));
14952 gregOfRexRM(pfx,modrm),
14962 if (haveNo66noF2noF3(pfx) && sz == 4) {
14976 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
14997 if (have66noF2noF3(pfx)
15012 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
15014 DIP("pabs%s %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
15015 nameXMMReg(gregOfRexRM(pfx,modrm)));
15017 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
15022 nameXMMReg(gregOfRexRM(pfx,modrm)));
15025 putXMMReg( gregOfRexRM(pfx,modrm),
15032 if (haveNo66noF2noF3(pfx) && sz == 4) {
15053 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
15091 Prefix pfx, Int sz, Long deltaIN )
15108 if (have66noF2noF3(pfx)
15114 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
15117 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
15121 nameXMMReg(eregOfRexRM(pfx,modrm)),
15122 nameXMMReg(gregOfRexRM(pfx,modrm)));
15124 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
15131 nameXMMReg(gregOfRexRM(pfx,modrm)));
15135 putXMMReg( gregOfRexRM(pfx,modrm), mkexpr(res) );
15139 if (haveNo66noF2noF3(pfx) && sz == 4) {
15156 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
15218 Prefix pfx, Int sz, Long deltaIN )
15237 if (haveF3noF2(pfx) /* so both 66 and REX.W are possibilities */
15243 assign(src, getIRegE(sz, pfx, modrm));
15245 DIP("popcnt%c %s, %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm),
15246 nameIRegG(sz, pfx, modrm));
15248 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0);
15252 nameIRegG(sz, pfx, modrm));
15256 putIRegG(sz, pfx, modrm, mkexpr(result));
15282 if (haveF3noF2(pfx) /* so both 66 and 48 are possibilities */
15289 assign(src, getIRegE(sz, pfx, modrm));
15291 DIP("lzcnt%c %s, %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm),
15292 nameIRegG(sz, pfx, modrm));
15294 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0);
15298 nameIRegG(sz, pfx, modrm));
15302 putIRegG(sz, pfx, modrm, mkexpr(res));
15410 static Long dis_VBLENDV_128 ( VexAbiInfo* vbi, Prefix pfx, Long delta,
15417 UInt rG = gregOfRexRM(pfx, modrm);
15418 UInt rV = getVexNvvvv(pfx);
15425 UInt rE = eregOfRexRM(pfx, modrm);
15433 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
15449 static Long dis_VBLENDV_256 ( VexAbiInfo* vbi, Prefix pfx, Long delta,
15456 UInt rG = gregOfRexRM(pfx, modrm);
15457 UInt rV = getVexNvvvv(pfx);
15464 UInt rE = eregOfRexRM(pfx, modrm);
15472 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
15588 static Long dis_xTESTy_128 ( VexAbiInfo* vbi, Prefix pfx,
15595 UInt rG = gregOfRexRM(pfx, modrm);
15600 UInt rE = eregOfRexRM(pfx, modrm);
15608 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15641 static Long dis_xTESTy_256 ( VexAbiInfo* vbi, Prefix pfx,
15648 UInt rG = gregOfRexRM(pfx, modrm);
15653 UInt rE = eregOfRexRM(pfx, modrm);
15660 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15699 static Long dis_PMOVxXBW_128 ( VexAbiInfo* vbi, Prefix pfx,
15709 UInt rG = gregOfRexRM(pfx, modrm);
15711 UInt rE = eregOfRexRM(pfx, modrm);
15716 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15741 static Long dis_PMOVxXWD_128 ( VexAbiInfo* vbi, Prefix pfx,
15751 UInt rG = gregOfRexRM(pfx, modrm);
15754 UInt rE = eregOfRexRM(pfx, modrm);
15759 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15774 ( gregOfRexRM(pfx, modrm), res );
15780 static Long dis_PMOVSXWQ_128 ( VexAbiInfo* vbi, Prefix pfx,
15789 UInt rG = gregOfRexRM(pfx, modrm);
15792 UInt rE = eregOfRexRM(pfx, modrm);
15797 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15813 static Long dis_PMOVZXWQ_128 ( VexAbiInfo* vbi, Prefix pfx,
15822 UInt rG = gregOfRexRM(pfx, modrm);
15825 UInt rE = eregOfRexRM(pfx, modrm);
15830 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15850 static Long dis_PMOVxXDQ_128 ( VexAbiInfo* vbi, Prefix pfx,
15861 UInt rG = gregOfRexRM(pfx, modrm);
15867 UInt rE = eregOfRexRM(pfx, modrm);
15873 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15897 static Long dis_PMOVxXBD_128 ( VexAbiInfo* vbi, Prefix pfx,
15907 UInt rG = gregOfRexRM(pfx, modrm);
15909 UInt rE = eregOfRexRM(pfx, modrm);
15914 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15940 static Long dis_PMOVSXBQ_128 ( VexAbiInfo* vbi, Prefix pfx,
15949 UInt rG = gregOfRexRM(pfx, modrm);
15951 UInt rE = eregOfRexRM(pfx, modrm);
15956 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
15973 static Long dis_PMOVZXBQ_128 ( VexAbiInfo* vbi, Prefix pfx,
15982 UInt rG = gregOfRexRM(pfx, modrm);
15984 UInt rE = eregOfRexRM(pfx, modrm);
15989 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
16011 static Long dis_PHMINPOSUW_128 ( VexAbiInfo* vbi, Prefix pfx,
16023 UInt rG = gregOfRexRM(pfx,modrm);
16025 UInt rE = eregOfRexRM(pfx,modrm);
16030 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
16051 static Long dis_AESx ( VexAbiInfo* vbi, Prefix pfx,
16058 UInt rG = gregOfRexRM(pfx, modrm);
16060 UInt regNoR = (isAvx && opc != 0xDB) ? getVexNvvvv(pfx) : rG;
16069 regNoL = eregOfRexRM(pfx, modrm);
16073 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
16145 static Long dis_AESKEYGENASSIST ( VexAbiInfo* vbi, Prefix pfx,
16153 UInt regNoR = gregOfRexRM(pfx, modrm);
16159 regNoL = eregOfRexRM(pfx, modrm);
16164 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
16216 Prefix pfx, Int sz, Long deltaIN )
16239 if (have66noF2noF3(pfx) && sz == 2) {
16263 assign(vecE, getXMMReg(eregOfRexRM(pfx, modrm)));
16266 nameXMMReg( eregOfRexRM(pfx, modrm) ),
16267 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16269 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
16274 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16277 assign(vecG, getXMMReg(gregOfRexRM(pfx, modrm)));
16281 putXMMReg(gregOfRexRM(pfx, modrm), mkexpr(res));
16290 if (have66noF2noF3(pfx)
16292 delta = dis_xTESTy_128( vbi, pfx, delta, False/*!isAvx*/, 0 );
16300 if (have66noF2noF3(pfx) && sz == 2) {
16301 delta = dis_PMOVxXBW_128( vbi, pfx, delta,
16310 if (have66noF2noF3(pfx) && sz == 2) {
16311 delta = dis_PMOVxXBD_128( vbi, pfx, delta,
16320 if (have66noF2noF3(pfx) && sz == 2) {
16321 delta = dis_PMOVSXBQ_128( vbi, pfx, delta, False/*!isAvx*/ );
16329 if (have66noF2noF3(pfx) && sz == 2) {
16330 delta = dis_PMOVxXWD_128(vbi, pfx, delta,
16339 if (have66noF2noF3(pfx) && sz == 2) {
16340 delta = dis_PMOVSXWQ_128( vbi, pfx, delta, False/*!isAvx*/ );
16348 if (have66noF2noF3(pfx) && sz == 2) {
16349 delta = dis_PMOVxXDQ_128( vbi, pfx, delta,
16361 if (have66noF2noF3(pfx) && sz == 2) {
16365 UInt rG = gregOfRexRM(pfx,modrm);
16368 UInt rE = eregOfRexRM(pfx,modrm);
16373 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
16387 if (have66noF2noF3(pfx) && sz == 2) {
16389 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
16398 if (have66noF2noF3(pfx) && sz == 2) {
16406 assign( argL, getXMMReg( eregOfRexRM(pfx, modrm) ) );
16409 nameXMMReg( eregOfRexRM(pfx, modrm) ),
16410 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16412 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
16417 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16420 assign(argR, getXMMReg( gregOfRexRM(pfx, modrm) ));
16422 putXMMReg( gregOfRexRM(pfx, modrm),
16433 if (have66noF2noF3(pfx) && sz == 2) {
16434 delta = dis_PMOVxXBW_128( vbi, pfx, delta,
16443 if (have66noF2noF3(pfx) && sz == 2) {
16444 delta = dis_PMOVxXBD_128( vbi, pfx, delta,
16453 if (have66noF2noF3(pfx) && sz == 2) {
16454 delta = dis_PMOVZXBQ_128( vbi, pfx, delta, False/*!isAvx*/ );
16462 if (have66noF2noF3(pfx) && sz == 2) {
16463 delta = dis_PMOVxXWD_128( vbi, pfx, delta,
16472 if (have66noF2noF3(pfx) && sz == 2) {
16473 delta = dis_PMOVZXWQ_128( vbi, pfx, delta, False/*!isAvx*/ );
16481 if (have66noF2noF3(pfx) && sz == 2) {
16482 delta = dis_PMOVxXDQ_128( vbi, pfx, delta,
16492 if (have66noF2noF3(pfx) && sz == 2) {
16494 delta = dis_SSEint_E_to_G( vbi, pfx, delta,
16505 if (have66noF2noF3(pfx) && sz == 2) {
16509 vbi, pfx, delta,
16525 if (have66noF2noF3(pfx) && sz == 2) {
16529 vbi, pfx, delta,
16545 if (have66noF2noF3(pfx) && sz == 2) {
16549 vbi, pfx, delta,
16565 if (have66noF2noF3(pfx) && sz == 2) {
16569 vbi, pfx, delta,
16581 if (have66noF2noF3(pfx) && sz == 2) {
16589 assign( argL, getXMMReg( eregOfRexRM(pfx, modrm) ) );
16592 nameXMMReg( eregOfRexRM(pfx, modrm) ),
16593 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16595 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
16600 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16603 assign(argR, getXMMReg( gregOfRexRM(pfx, modrm) ));
16605 pfx, modrm),
16615 if (have66noF2noF3(pfx) && sz == 2) {
16616 delta = dis_PHMINPOSUW_128( vbi, pfx, delta, False/*!isAvx*/ );
16632 if (have66noF2noF3(pfx) && sz == 2) {
16633 delta = dis_AESx( vbi, pfx, delta, False/*!isAvx*/, opc );
16644 if (haveF2noF3(pfx)
16645 && (opc == 0xF1 || (opc == 0xF0 && !have66(pfx)))) {
16657 assign(valE, getIRegE(sz, pfx, modrm));
16659 DIP("crc32b %s,%s\n", nameIRegE(sz, pfx, modrm),
16660 nameIRegG(1==getRexW(pfx) ? 8 : 4, pfx, modrm));
16662 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
16666 nameIRegG(1==getRexW(pfx) ? 8 : 4, pfx, modrm));
16674 assign(valG0, binop(Iop_And64, getIRegG(8, pfx, modrm),
16696 putIRegG(4, pfx, modrm, unop(Iop_64to32, mkexpr(valG1)));
16722 static Long dis_PEXTRW ( VexAbiInfo* vbi, Prefix pfx,
16733 UInt rG = gregOfRexRM(pfx,modrm);
16739 vassert(0==getRexW(pfx)); /* ensured by caller */
16746 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
16763 UInt rE = eregOfRexRM(pfx,modrm);
16777 static Long dis_PEXTRD ( VexAbiInfo* vbi, Prefix pfx,
16794 vassert(0==getRexW(pfx)); /* ensured by caller */
16796 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
16802 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
16815 putIReg32( eregOfRexRM(pfx,modrm), mkexpr(src_dword) );
16818 nameXMMReg( gregOfRexRM(pfx, modrm) ),
16819 nameIReg32( eregOfRexRM(pfx, modrm) ) );
16824 imm8_10, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
16830 static Long dis_PEXTRQ ( VexAbiInfo* vbi, Prefix pfx,
16843 vassert(1==getRexW(pfx)); /* ensured by caller */
16845 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
16850 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
16863 putIReg64( eregOfRexRM(pfx,modrm), mkexpr(src_qword) );
16866 nameXMMReg( gregOfRexRM(pfx, modrm) ),
16867 nameIReg64( eregOfRexRM(pfx, modrm) ) );
16872 imm8_0, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
16880 static Long dis_PCMPxSTRx ( VexAbiInfo* vbi, Prefix pfx,
16900 regNoL = eregOfRexRM(pfx, modrm);
16901 regNoR = gregOfRexRM(pfx, modrm);
16906 regNoR = gregOfRexRM(pfx, modrm);
16907 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17114 static Long dis_PEXTRB_128_GtoE ( VexAbiInfo* vbi, Prefix pfx,
17127 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
17134 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17148 putIReg64( eregOfRexRM(pfx,modrm),
17153 nameXMMReg( gregOfRexRM(pfx, modrm) ),
17154 nameIReg64( eregOfRexRM(pfx, modrm) ) );
17159 imm8, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
17283 static Long dis_EXTRACTPS ( VexAbiInfo* vbi, Prefix pfx,
17293 UInt rG = gregOfRexRM(pfx,modrm);
17303 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17316 UInt rE = eregOfRexRM(pfx,modrm);
17363 Prefix pfx, Int sz, Long deltaIN )
17379 if (have66noF2noF3(pfx) && sz == 2) {
17396 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 0 ) );
17398 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 1 ) );
17400 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 2 ) );
17402 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 3 ) );
17407 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
17408 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17410 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17424 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17438 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 0, mkexpr(res0) );
17439 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 1, mkexpr(res1) );
17440 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 2, mkexpr(res2) );
17441 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 3, mkexpr(res3) );
17449 if (have66noF2noF3(pfx) && sz == 2) {
17462 getXMMRegLane64F( eregOfRexRM(pfx, modrm), 0 ) );
17464 getXMMRegLane64F( eregOfRexRM(pfx, modrm), 1 ) );
17469 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
17470 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17472 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17482 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17494 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 0, mkexpr(res0) );
17495 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 1, mkexpr(res1) );
17506 if (have66noF2noF3(pfx) && sz == 2) {
17517 isD ? getXMMRegLane64F( eregOfRexRM(pfx, modrm), 0 )
17518 : getXMMRegLane32F( eregOfRexRM(pfx, modrm), 0 ) );
17524 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
17525 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17527 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17534 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17547 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 0, mkexpr(res) );
17549 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 0, mkexpr(res) );
17558 if (have66noF2noF3(pfx) && sz == 2) {
17566 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
17570 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
17573 nameXMMReg( eregOfRexRM(pfx, modrm) ),
17574 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17576 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
17583 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17586 putXMMReg( gregOfRexRM(pfx, modrm),
17595 if (have66noF2noF3(pfx) && sz == 2) {
17602 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
17606 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
17609 nameXMMReg( eregOfRexRM(pfx, modrm) ),
17610 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17612 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
17619 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17622 putXMMReg( gregOfRexRM(pfx, modrm),
17631 if (have66noF2noF3(pfx) && sz == 2) {
17639 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
17643 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
17646 nameXMMReg( eregOfRexRM(pfx, modrm) ),
17647 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17649 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
17656 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
17659 putXMMReg( gregOfRexRM(pfx, modrm),
17669 if (have66noF2noF3(pfx) && sz == 2) {
17670 delta = dis_PEXTRB_128_GtoE( vbi, pfx, delta, False/*!isAvx*/ );
17679 if (have66noF2noF3(pfx) && sz == 2) {
17680 delta = dis_PEXTRW( vbi, pfx, delta, False/*!isAvx*/ );
17690 if (have66noF2noF3(pfx)
17692 delta = dis_PEXTRD( vbi, pfx, delta, False/*!isAvx*/ );
17699 if (have66noF2noF3(pfx)
17701 delta = dis_PEXTRQ( vbi, pfx, delta, False/*!isAvx*/);
17711 if (have66noF2noF3(pfx)
17713 delta = dis_EXTRACTPS( vbi, pfx, delta, False/*!isAvx*/ );
17721 if (have66noF2noF3(pfx) && sz == 2) {
17725 UInt rG = gregOfRexRM(pfx, modrm);
17727 UInt rE = eregOfRexRM(pfx,modrm);
17734 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17742 assign(src_vec, getXMMReg( gregOfRexRM(pfx, modrm) ));
17752 if (have66noF2noF3(pfx) && sz == 2) {
17758 UInt rG = gregOfRexRM(pfx, modrm);
17761 UInt rE = eregOfRexRM(pfx, modrm);
17772 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17791 if (have66noF2noF3(pfx)
17796 UInt rG = gregOfRexRM(pfx, modrm);
17799 UInt rE = eregOfRexRM(pfx,modrm);
17806 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17822 if (have66noF2noF3(pfx)
17827 UInt rG = gregOfRexRM(pfx, modrm);
17830 UInt rE = eregOfRexRM(pfx,modrm);
17837 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
17856 if (have66noF2noF3(pfx) && sz == 2) {
17861 UInt rG = gregOfRexRM(pfx, modrm);
17864 UInt rE = eregOfRexRM(pfx, modrm);
17871 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
17889 if (have66noF2noF3(pfx) && sz == 2) {
17894 UInt rG = gregOfRexRM(pfx, modrm);
17897 UInt rE = eregOfRexRM(pfx, modrm);
17904 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
17922 if (have66noF2noF3(pfx) && sz == 2) {
17927 UInt rG = gregOfRexRM(pfx, modrm);
17932 UInt rE = eregOfRexRM(pfx, modrm);
17940 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
17959 if (have66noF2noF3(pfx) && sz == 2) {
17965 UInt rG = gregOfRexRM(pfx, modrm);
17970 UInt rE = eregOfRexRM(pfx, modrm);
17977 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
18003 if (have66noF2noF3(pfx) && sz == 2) {
18005 delta = dis_PCMPxSTRx( vbi, pfx, delta, False/*!isAvx*/, opc );
18013 if (have66noF2noF3(pfx) && sz == 2) {
18014 delta = dis_AESKEYGENASSIST( vbi, pfx, delta, False/*!isAvx*/ );
18050 Prefix pfx, Int sz, Long deltaIN
18074 if (haveF2orF3(pfx)) goto decode_failure;
18075 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Add8, True, 1, delta, "add" );
18078 if (haveF2orF3(pfx)) goto decode_failure;
18079 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Add8, True, sz, delta, "add" );
18083 if (haveF2orF3(pfx)) goto decode_failure;
18084 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Add8, True, 1, delta, "add" );
18087 if (haveF2orF3(pfx)) goto decode_failure;
18088 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Add8, True, sz, delta, "add" );
18092 if (haveF2orF3(pfx)) goto decode_failure;
18096 if (haveF2orF3(pfx)) goto decode_failure;
18101 if (haveF2orF3(pfx)) goto decode_failure;
18102 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Or8, True, 1, delta, "or" );
18105 if (haveF2orF3(pfx)) goto decode_failure;
18106 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Or8, True, sz, delta, "or" );
18110 if (haveF2orF3(pfx)) goto decode_failure;
18111 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Or8, True, 1, delta, "or" );
18114 if (haveF2orF3(pfx)) goto decode_failure;
18115 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Or8, True, sz, delta, "or" );
18119 if (haveF2orF3(pfx)) goto decode_failure;
18123 if (haveF2orF3(pfx)) goto decode_failure;
18128 if (haveF2orF3(pfx)) goto decode_failure;
18129 delta = dis_op2_G_E ( vbi, pfx, True, Iop_Add8, True, 1, delta, "adc" );
18132 if (haveF2orF3(pfx)) goto decode_failure;
18133 delta = dis_op2_G_E ( vbi, pfx, True, Iop_Add8, True, sz, delta, "adc" );
18137 if (haveF2orF3(pfx)) goto decode_failure;
18138 delta = dis_op2_E_G ( vbi, pfx, True, Iop_Add8, True, 1, delta, "adc" );
18141 if (haveF2orF3(pfx)) goto decode_failure;
18142 delta = dis_op2_E_G ( vbi, pfx, True, Iop_Add8, True, sz, delta, "adc" );
18146 if (haveF2orF3(pfx)) goto decode_failure;
18150 if (haveF2orF3(pfx)) goto decode_failure;
18155 if (haveF2orF3(pfx)) goto decode_failure;
18156 delta = dis_op2_G_E ( vbi, pfx, True, Iop_Sub8, True, 1, delta, "sbb" );
18159 if (haveF2orF3(pfx)) goto decode_failure;
18160 delta = dis_op2_G_E ( vbi, pfx, True, Iop_Sub8, True, sz, delta, "sbb" );
18164 if (haveF2orF3(pfx)) goto decode_failure;
18165 delta = dis_op2_E_G ( vbi, pfx, True, Iop_Sub8, True, 1, delta, "sbb" );
18168 if (haveF2orF3(pfx)) goto decode_failure;
18169 delta = dis_op2_E_G ( vbi, pfx, True, Iop_Sub8, True, sz, delta, "sbb" );
18173 if (haveF2orF3(pfx)) goto decode_failure;
18177 if (haveF2orF3(pfx)) goto decode_failure;
18182 if (haveF2orF3(pfx)) goto decode_failure;
18183 delta = dis_op2_G_E ( vbi, pfx, False, Iop_And8, True, 1, delta, "and" );
18186 if (haveF2orF3(pfx)) goto decode_failure;
18187 delta = dis_op2_G_E ( vbi, pfx, False, Iop_And8, True, sz, delta, "and" );
18191 if (haveF2orF3(pfx)) goto decode_failure;
18192 delta = dis_op2_E_G ( vbi, pfx, False, Iop_And8, True, 1, delta, "and" );
18195 if (haveF2orF3(pfx)) goto decode_failure;
18196 delta = dis_op2_E_G ( vbi, pfx, False, Iop_And8, True, sz, delta, "and" );
18200 if (haveF2orF3(pfx)) goto decode_failure;
18204 if (haveF2orF3(pfx)) goto decode_failure;
18209 if (haveF2orF3(pfx)) goto decode_failure;
18210 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, True, 1, delta, "sub" );
18213 if (haveF2orF3(pfx)) goto decode_failure;
18214 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, True, sz, delta, "sub" );
18218 if (haveF2orF3(pfx)) goto decode_failure;
18219 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Sub8, True, 1, delta, "sub" );
18222 if (haveF2orF3(pfx)) goto decode_failure;
18223 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Sub8, True, sz, delta, "sub" );
18227 if (haveF2orF3(pfx)) goto decode_failure;
18232 if (haveF2orF3(pfx)) goto decode_failure;
18237 if (haveF2orF3(pfx)) goto decode_failure;
18238 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Xor8, True, 1, delta, "xor" );
18241 if (haveF2orF3(pfx)) goto decode_failure;
18242 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Xor8, True, sz, delta, "xor" );
18246 if (haveF2orF3(pfx)) goto decode_failure;
18247 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Xor8, True, 1, delta, "xor" );
18250 if (haveF2orF3(pfx)) goto decode_failure;
18251 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Xor8, True, sz, delta, "xor" );
18255 if (haveF2orF3(pfx)) goto decode_failure;
18259 if (haveF2orF3(pfx)) goto decode_failure;
18264 if (haveF2orF3(pfx)) goto decode_failure;
18265 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, False, 1, delta, "cmp" );
18268 if (haveF2orF3(pfx)) goto decode_failure;
18269 delta = dis_op2_G_E ( vbi, pfx, False, Iop_Sub8, False, sz, delta, "cmp" );
18273 if (haveF2orF3(pfx)) goto decode_failure;
18274 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Sub8, False, 1, delta, "cmp" );
18277 if (haveF2orF3(pfx)) goto decode_failure;
18278 delta = dis_op2_E_G ( vbi, pfx, False, Iop_Sub8, False, sz, delta, "cmp" );
18282 if (haveF2orF3(pfx)) goto decode_failure;
18286 if (haveF2orF3(pfx)) goto decode_failure;
18301 if (haveF2orF3(pfx)) goto decode_failure;
18308 assign(t1, getIRegRexB(sz, pfx, opc-0x50));
18312 DIP("push%c %s\n", nameISize(sz), nameIRegRexB(sz,pfx,opc-0x50));
18323 if (haveF2orF3(pfx)) goto decode_failure;
18332 putIRegRexB(sz, pfx, opc-0x58, mkexpr(t1));
18333 DIP("pop%c %s\n", nameISize(sz), nameIRegRexB(sz,pfx,opc-0x58));
18337 if (haveF2orF3(pfx)) goto decode_failure;
18338 if (haveREX(pfx) && 1==getRexW(pfx)) {
18344 putIRegG(8, pfx, modrm,
18346 getIRegE(4, pfx, modrm)));
18348 nameIRegE(4, pfx, modrm),
18349 nameIRegG(8, pfx, modrm));
18352 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
18354 putIRegG(8, pfx, modrm,
18358 nameIRegG(8, pfx, modrm));
18366 if (haveF2orF3(pfx)) goto decode_failure;
18374 if (haveF2orF3(pfx)) goto decode_failure;
18375 delta = dis_imul_I_E_G ( vbi, pfx, sz, delta, sz );
18379 if (haveF2orF3(pfx)) goto decode_failure;
18399 delta = dis_imul_I_E_G ( vbi, pfx, sz, delta, 1 );
18420 if (haveF2orF3(pfx)) goto decode_failure;
18477 if (haveF2orF3(pfx)) goto decode_failure;
18479 am_sz = lengthAMode(pfx,delta);
18483 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
18487 if (haveF2orF3(pfx)) goto decode_failure;
18489 am_sz = lengthAMode(pfx,delta);
18492 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
18496 if (haveF2orF3(pfx)) goto decode_failure;
18498 am_sz = lengthAMode(pfx,delta);
18501 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
18505 if (haveF2orF3(pfx)) goto decode_failure;
18506 delta = dis_op2_E_G ( vbi, pfx, False, Iop_And8, False, 1, delta, "test" );
18510 if (haveF2orF3(pfx)) goto decode_failure;
18511 delta = dis_op2_E_G ( vbi, pfx, False, Iop_And8, False, sz, delta, "test" );
18524 if (haveF2orF3(pfx)) goto decode_failure;
18529 assign(t1, getIRegE(sz, pfx, modrm));
18530 assign(t2, getIRegG(sz, pfx, modrm));
18531 putIRegG(sz, pfx, modrm, mkexpr(t1));
18532 putIRegE(sz, pfx, modrm, mkexpr(t2));
18535 nameISize(sz), nameIRegG(sz, pfx, modrm),
18536 nameIRegE(sz, pfx, modrm));
18539 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
18541 assign( t2, getIRegG(sz, pfx, modrm) );
18544 putIRegG( sz, pfx, modrm, mkexpr(t1) );
18547 nameIRegG(sz, pfx, modrm), dis_buf);
18552 if (haveF2orF3(pfx)) goto decode_failure;
18553 delta = dis_mov_G_E(vbi, pfx, 1, delta);
18557 if (haveF2orF3(pfx)) goto decode_failure;
18558 delta = dis_mov_G_E(vbi, pfx, sz, delta);
18562 if (haveF2orF3(pfx)) goto decode_failure;
18563 delta = dis_mov_E_G(vbi, pfx, 1, delta);
18567 if (haveF2orF3(pfx)) goto decode_failure;
18568 delta = dis_mov_E_G(vbi, pfx, sz, delta);
18572 if (haveF2orF3(pfx)) goto decode_failure;
18580 any segment override bits in pfx. */
18581 addr = disAMode ( &alen, vbi, clearSegBits(pfx), delta, dis_buf, 0 );
18586 putIRegG( sz, pfx, modrm,
18592 nameIRegG(sz,pfx,modrm));
18600 if (haveF2orF3(pfx)) goto decode_failure;
18626 addr = disAMode ( &len, vbi, pfx, delta, dis_buf, 0 );
18637 if (!have66(pfx) && !haveF2(pfx) && haveF3(pfx)) {
18647 !haveF2orF3(pfx)
18649 && getRexB(pfx)==0 ) {
18662 if (haveF2orF3(pfx)) goto decode_failure;
18663 codegen_xchg_rAX_Reg ( pfx, sz, opc - 0x90 );
18667 if (haveF2orF3(pfx)) goto decode_failure;
18686 if (haveF2orF3(pfx)) goto decode_failure;
18708 if (haveF2orF3(pfx)) goto decode_failure;
18764 if (haveF2orF3(pfx)) goto decode_failure;
18840 if (have66orF2orF3(pfx)) goto decode_failure;
18850 assign( addr, handleAddrOverrides(vbi, pfx, mkU64(d64)) );
18853 segRegTxt(pfx), d64,
18858 pfx)) goto decode_failure;
18868 assign( addr, handleAddrOverrides(vbi, pfx, mkU64(d64)) );
18871 segRegTxt(pfx), d64);
18877 if (haveF3(pfx) && !haveF2(pfx)) {
18882 guest_RIP_bbstart+delta, "rep movs", pfx );
18887 if (!haveF3(pfx) && !haveF2(pfx)) {
18890 dis_string_op( dis_MOVS, sz, "movs", pfx );
18898 if (haveF3(pfx) && !haveF2(pfx)) {
18903 guest_RIP_bbstart+delta, "repe cmps", pfx );
18912 if (haveF3(pfx) && !haveF2(pfx)) {
18917 guest_RIP_bbstart+delta, "rep stos", pfx );
18922 if (!haveF3(pfx) && !haveF2(pfx)) {
18925 dis_string_op( dis_STOS, sz, "stos", pfx );
18931 if (haveF2orF3(pfx)) goto decode_failure;
18935 if (haveF2orF3(pfx)) goto decode_failure;
18941 dis_string_op( dis_LODS, ( opc == 0xAC ? 1 : sz ), "lods", pfx );
18947 if (haveF2(pfx) && !haveF3(pfx)) {
18952 guest_RIP_bbstart+delta, "repne scas", pfx );
18957 if (!haveF2(pfx) && haveF3(pfx)) {
18962 guest_RIP_bbstart+delta, "repe scas", pfx );
18967 if (!haveF2(pfx) && !haveF3(pfx)) {
18970 dis_string_op( dis_SCAS, sz, "scas", pfx );
18984 if (haveF2orF3(pfx)) goto decode_failure;
18987 putIRegRexB(1, pfx, opc-0xB0, mkU8(d64));
18988 DIP("movb $%lld,%s\n", d64, nameIRegRexB(1,pfx,opc-0xB0));
19001 if (haveF2orF3(pfx)) goto decode_failure;
19005 putIRegRexB(8, pfx, opc-0xB8, mkU64(d64));
19007 nameIRegRexB(8,pfx,opc-0xB8));
19011 putIRegRexB(sz, pfx, opc-0xB8,
19015 nameIRegRexB(sz,pfx,opc-0xB8));
19021 if (haveF2orF3(pfx)) goto decode_failure;
19023 am_sz = lengthAMode(pfx,delta);
19027 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
19035 if (haveF2orF3(pfx)) goto decode_failure;
19037 am_sz = lengthAMode(pfx,delta);
19040 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
19047 if (have66orF2orF3(pfx)) goto decode_failure;
19055 if (have66orF2(pfx)) goto decode_failure;
19058 DIP(haveF3(pfx) ? "rep ; ret\n" : "ret\n");
19067 if (haveF2orF3(pfx)) goto decode_failure;
19073 putIRegE(sz, pfx, modrm,
19077 nameIRegE(sz,pfx,modrm));
19079 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf,
19147 if (haveF2orF3(pfx)) goto decode_failure;
19149 am_sz = lengthAMode(pfx,delta);
19153 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
19161 if (haveF2orF3(pfx)) goto decode_failure;
19163 am_sz = lengthAMode(pfx,delta);
19166 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
19174 if (haveF2orF3(pfx)) goto decode_failure;
19176 am_sz = lengthAMode(pfx,delta);
19179 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
19187 if (haveF2orF3(pfx)) goto decode_failure;
19189 am_sz = lengthAMode(pfx,delta);
19191 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
19207 if (haveF2orF3(pfx))
19236 delta = dis_FPU ( &decode_OK, vbi, pfx, delta );
19253 if (have66orF2orF3(pfx) || 1==getRexW(pfx)) goto decode_failure;
19260 if (haveASO(pfx)) {
19295 DIP("loop%s%s 0x%llx\n", xtra, haveASO(pfx) ? "l" : "", d64);
19301 if (have66orF2orF3(pfx)) goto decode_failure;
19304 if (haveASO(pfx)) {
19359 if (haveF2orF3(pfx)) goto decode_failure;
19408 if (haveF2orF3(pfx)) goto decode_failure;
19424 if (haveF2orF3(pfx)) goto decode_failure;
19447 if (haveF2orF3(pfx)) goto decode_failure;
19463 if (haveF2orF3(pfx)) goto decode_failure;
19513 if (haveF2orF3(pfx)) goto decode_failure;
19514 delta = dis_Grp3 ( vbi, pfx, 1, delta, &decode_OK );
19521 if (haveF2orF3(pfx)) goto decode_failure;
19522 delta = dis_Grp3 ( vbi, pfx, sz, delta, &decode_OK );
19528 if (haveF2orF3(pfx)) goto decode_failure;
19534 if (haveF2orF3(pfx)) goto decode_failure;
19541 if (haveF2orF3(pfx)) goto decode_failure;
19542 delta = dis_Grp4 ( vbi, pfx, delta, &decode_OK );
19549 if (haveF2orF3(pfx)) goto decode_failure;
19550 delta = dis_Grp5 ( vbi, pfx, sz, delta, dres, &decode_OK );
19658 Prefix pfx, Int sz, Long deltaIN
19687 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
19751 if (have66orF2orF3(pfx)) goto decode_failure;
19756 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
19766 if (haveF2orF3(pfx)) goto decode_failure;
19769 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
19784 if (have66orF2orF3(pfx)) goto decode_failure;
19809 if (haveF2orF3(pfx)) goto decode_failure;
19810 delta = dis_cmov_E_G(vbi, pfx, sz, (AMD64Condcode)(opc - 0x40), delta);
19831 if (haveF2orF3(pfx)) goto decode_failure;
19905 if (haveF2orF3(pfx)) goto decode_failure;
19911 putIRegE(1, pfx, modrm, mkexpr(t1));
19913 nameIRegE(1,pfx,modrm));
19915 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
19930 if (haveF2orF3(pfx)) goto decode_failure;
19980 if (haveF2orF3(pfx)) goto decode_failure;
19982 delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpNone );
19987 d64 = delta + lengthAMode(pfx, delta);
19990 vbi, pfx, delta, modrm, sz,
19998 vbi, pfx, delta, modrm, sz,
20004 if (haveF2orF3(pfx)) goto decode_failure;
20006 delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpSet );
20011 d64 = delta + lengthAMode(pfx, delta);
20014 vbi, pfx, delta, modrm, sz,
20022 vbi, pfx, delta, modrm, sz,
20028 if (haveF2orF3(pfx)) goto decode_failure;
20029 delta = dis_mul_E_G ( vbi, pfx, sz, delta );
20034 if (haveF2orF3(pfx)) goto decode_failure;
20036 delta = dis_cmpxchg_G_E ( &ok, vbi, pfx, sz, delta );
20043 if (haveF2orF3(pfx)) goto decode_failure;
20044 delta = dis_cmpxchg_G_E ( &ok, vbi, pfx, 1, delta );
20050 if (haveF2orF3(pfx)) goto decode_failure;
20052 delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpReset );
20056 if (haveF2orF3(pfx)) goto decode_failure;
20059 delta = dis_movx_E_G ( vbi, pfx, delta, 1, sz, False );
20063 if (haveF2orF3(pfx)) goto decode_failure;
20066 delta = dis_movx_E_G ( vbi, pfx, delta, 2, sz, False );
20071 if (haveF2orF3(pfx)) goto decode_failure;
20073 am_sz = lengthAMode(pfx,delta);
20075 delta = dis_Grp8_Imm ( vbi, pfx, delta, modrm, am_sz, sz, d64,
20083 if (haveF2orF3(pfx)) goto decode_failure;
20085 delta = dis_bt_G_E ( vbi, pfx, sz, delta, BtOpComp );
20089 if (haveF2(pfx)) goto decode_failure;
20090 delta = dis_bs_E_G ( vbi, pfx, sz, delta, True );
20094 if (!haveF2orF3(pfx)
20095 || (haveF3noF2(pfx)
20099 delta = dis_bs_E_G ( vbi, pfx, sz, delta, False );
20107 if (haveF2orF3(pfx)) goto decode_failure;
20110 delta = dis_movx_E_G ( vbi, pfx, delta, 1, sz, True );
20114 if (haveF2orF3(pfx)) goto decode_failure;
20117 delta = dis_movx_E_G ( vbi, pfx, delta, 2, sz, True );
20122 delta = dis_xadd_G_E ( &decode_OK, vbi, pfx, sz, delta );
20153 if (have66orF2orF3(pfx)) goto decode_failure;
20160 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
20265 if (haveF2orF3(pfx)) goto decode_failure;
20270 assign( t1, getIRegRexB(4, pfx, opc-0xC8) );
20272 putIRegRexB(4, pfx, opc-0xC8, mkexpr(t2));
20273 DIP("bswapl %s\n", nameIRegRexB(4, pfx, opc-0xC8));
20279 assign( t1, getIRegRexB(8, pfx, opc-0xC8) );
20281 putIRegRexB(8, pfx, opc-0xC8, mkexpr(t2));
20282 DIP("bswapq %s\n", nameIRegRexB(8, pfx, opc-0xC8));
20296 if (!have66orF2orF3(pfx)) {
20373 delta = dis_MMX ( &decode_OK, vbi, pfx, sz, deltaIN );
20400 delta = dis_ESC_0F__SSE2 ( &decode_OK, vbi, pfx, sz, deltaIN, dres );
20410 delta = dis_ESC_0F__SSE3 ( &decode_OK, vbi, pfx, sz, deltaIN );
20421 archinfo, vbi, pfx, sz, deltaIN );
20446 Prefix pfx, Int sz, Long deltaIN
20456 if (!haveF2orF3(pfx) && !haveVEX(pfx)
20464 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
20471 putIRegG(sz, pfx, modrm, mkexpr(dst));
20472 DIP("movbe %s,%s\n", dis_buf, nameIRegG(sz, pfx, modrm));
20474 assign(src, getIRegG(sz, pfx, modrm));
20477 DIP("movbe %s,%s\n", nameIRegG(sz, pfx, modrm), dis_buf);
20496 delta = dis_ESC_0F38__SupSSE3 ( &decode_OK, vbi, pfx, sz, deltaIN );
20506 delta = dis_ESC_0F38__SSE4 ( &decode_OK, vbi, pfx, sz, deltaIN );
20531 Prefix pfx, Int sz, Long deltaIN
20549 delta = dis_ESC_0F3A__SupSSE3 ( &decode_OK, vbi, pfx, sz, deltaIN );
20559 delta = dis_ESC_0F3A__SSE4 ( &decode_OK, vbi, pfx, sz, deltaIN );
20578 Prefix pfx, Long delta, HChar* name,
20587 UInt rD = gregOfRexRM(pfx, modrm);
20588 UInt rSL = getVexNvvvv(pfx);
20594 vassert(0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*WIG?*/);
20600 UInt rSR = eregOfRexRM(pfx, modrm);
20606 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
20637 Prefix pfx, Long delta, HChar* name,
20642 uses_vvvv, vbi, pfx, delta, name, op, NULL, False, False);
20652 Prefix pfx, Long delta, HChar* name,
20657 uses_vvvv, vbi, pfx, delta, name,
20665 Prefix pfx, Long delta,
20673 UInt rG = gregOfRexRM(pfx,modrm);
20674 UInt rV = getVexNvvvv(pfx);;
20680 UInt rE = eregOfRexRM(pfx,modrm);
20686 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
20741 Long dis_AVX128_shiftE_to_V_imm( Prefix pfx,
20748 UInt rD = getVexNvvvv(pfx);
20757 nameXMMReg(eregOfRexRM(pfx,rm)),
20759 assign( e0, getXMMReg(eregOfRexRM(pfx,rm)) );
20804 Prefix pfx, Long delta,
20811 UInt rG = gregOfRexRM(pfx,rm);
20812 UInt rV = getVexNvvvv(pfx);
20815 UInt rE = eregOfRexRM(pfx,rm);
20824 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
20847 Prefix pfx, Long delta,
20854 UInt rG = gregOfRexRM(pfx,rm);
20855 UInt rV = getVexNvvvv(pfx);
20860 UInt rE = eregOfRexRM(pfx,rm);
20866 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
20894 Prefix pfx, Long delta,
20901 UInt rG = gregOfRexRM(pfx,rm);
20902 UInt rV = getVexNvvvv(pfx);
20907 UInt rE = eregOfRexRM(pfx,rm);
20913 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
20941 Prefix pfx, Long delta,
20948 UInt rG = gregOfRexRM(pfx,rm);
20949 UInt rV = getVexNvvvv(pfx);
20952 UInt rE = eregOfRexRM(pfx,rm);
20961 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
20981 Prefix pfx, Long delta,
20985 uses_vvvv, vbi, pfx, delta, opname, op,
20997 Prefix pfx, Long delta,
21011 UInt rG = gregOfRexRM(pfx, rm);
21012 UInt rV = getVexNvvvv(pfx);
21021 UInt rE = eregOfRexRM(pfx,rm);
21028 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
21107 Prefix pfx, Long delta,
21121 UInt rG = gregOfRexRM(pfx, rm);
21122 UInt rV = getVexNvvvv(pfx);
21136 UInt rE = eregOfRexRM(pfx,rm);
21143 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
21177 Prefix pfx, Long delta,
21187 UInt rG = gregOfRexRM(pfx, rm);
21189 UInt rE = eregOfRexRM(pfx,rm);
21194 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21210 Prefix pfx, Long delta,
21218 UInt rG = gregOfRexRM(pfx, rm);
21220 UInt rE = eregOfRexRM(pfx,rm);
21225 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21240 Prefix pfx, Long delta, HChar* name,
21249 UInt rD = gregOfRexRM(pfx, modrm);
21250 UInt rSL = getVexNvvvv(pfx);
21256 vassert(1==getVexL(pfx)/*256*/ && 0==getRexW(pfx)/*WIG?*/);
21262 UInt rSR = eregOfRexRM(pfx, modrm);
21268 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
21298 Prefix pfx, Long delta,
21302 uses_vvvv, vbi, pfx, delta, opname, op,
21314 Prefix pfx, Long delta, HChar* name,
21319 uses_vvvv, vbi, pfx, delta, name,
21328 Prefix pfx, Long delta,
21336 UInt rG = gregOfRexRM(pfx, rm);
21338 UInt rE = eregOfRexRM(pfx,rm);
21343 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21356 static Long dis_CVTDQ2PD_256 ( VexAbiInfo* vbi, Prefix pfx,
21364 UInt rG = gregOfRexRM(pfx,modrm);
21366 UInt rE = eregOfRexRM(pfx,modrm);
21371 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21392 static Long dis_CVTPD2PS_256 ( VexAbiInfo* vbi, Prefix pfx,
21399 UInt rG = gregOfRexRM(pfx,modrm);
21403 UInt rE = eregOfRexRM(pfx,modrm);
21408 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21440 Prefix pfx, Int sz, Long deltaIN
21457 if (haveF2no66noF3(pfx) && !epartIsReg(getUChar(delta))) {
21459 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21460 UInt rG = gregOfRexRM(pfx,modrm);
21473 if (haveF2no66noF3(pfx) && epartIsReg(getUChar(delta))) {
21475 UInt rG = gregOfRexRM(pfx, modrm);
21476 UInt rE = eregOfRexRM(pfx, modrm);
21477 UInt rV = getVexNvvvv(pfx);
21492 if (haveF3no66noF2(pfx) && !epartIsReg(getUChar(delta))) {
21494 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21495 UInt rG = gregOfRexRM(pfx,modrm);
21508 if (haveF3no66noF2(pfx) && epartIsReg(getUChar(delta))) {
21510 UInt rG = gregOfRexRM(pfx, modrm);
21511 UInt rE = eregOfRexRM(pfx, modrm);
21512 UInt rV = getVexNvvvv(pfx);
21527 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
21529 UInt rG = gregOfRexRM(pfx, modrm);
21531 UInt rE = eregOfRexRM(pfx,modrm);
21536 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21544 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
21546 UInt rG = gregOfRexRM(pfx, modrm);
21548 UInt rE = eregOfRexRM(pfx,modrm);
21553 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21561 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
21563 UInt rG = gregOfRexRM(pfx, modrm);
21565 UInt rE = eregOfRexRM(pfx,modrm);
21570 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21578 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
21580 UInt rG = gregOfRexRM(pfx, modrm);
21582 UInt rE = eregOfRexRM(pfx,modrm);
21587 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21599 if (haveF2no66noF3(pfx) && !epartIsReg(getUChar(delta))) {
21601 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21602 UInt rG = gregOfRexRM(pfx,modrm);
21611 if (haveF2no66noF3(pfx) && epartIsReg(getUChar(delta))) {
21613 UInt rG = gregOfRexRM(pfx, modrm);
21614 UInt rE = eregOfRexRM(pfx, modrm);
21615 UInt rV = getVexNvvvv(pfx);
21629 if (haveF3no66noF2(pfx) && !epartIsReg(getUChar(delta))) {
21631 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21632 UInt rG = gregOfRexRM(pfx,modrm);
21641 if (haveF3no66noF2(pfx) && epartIsReg(getUChar(delta))) {
21643 UInt rG = gregOfRexRM(pfx, modrm);
21644 UInt rE = eregOfRexRM(pfx, modrm);
21645 UInt rV = getVexNvvvv(pfx);
21660 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
21662 UInt rG = gregOfRexRM(pfx,modrm);
21664 UInt rE = eregOfRexRM(pfx,modrm);
21669 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21677 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
21679 UInt rG = gregOfRexRM(pfx,modrm);
21681 UInt rE = eregOfRexRM(pfx,modrm);
21686 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21694 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
21696 UInt rG = gregOfRexRM(pfx,modrm);
21698 UInt rE = eregOfRexRM(pfx,modrm);
21703 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21711 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
21713 UInt rG = gregOfRexRM(pfx,modrm);
21715 UInt rE = eregOfRexRM(pfx,modrm);
21720 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21731 if (haveF2no66noF3(pfx) && 0==getVexL(pfx)/*128*/) {
21732 delta = dis_MOVDDUP_128( vbi, pfx, delta, True/*isAvx*/ );
21736 if (haveF2no66noF3(pfx) && 1==getVexL(pfx)/*256*/) {
21737 delta = dis_MOVDDUP_256( vbi, pfx, delta );
21742 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/
21745 UInt rG = gregOfRexRM(pfx, modrm);
21746 UInt rE = eregOfRexRM(pfx, modrm);
21747 UInt rV = getVexNvvvv(pfx);
21763 if ((have66noF2noF3(pfx) || haveNo66noF2noF3(pfx))
21764 && 0==getVexL(pfx)/*128*/ && !epartIsReg(getUChar(delta))) {
21766 UInt rG = gregOfRexRM(pfx, modrm);
21767 UInt rV = getVexNvvvv(pfx);
21768 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21781 if (haveF3no66noF2(pfx) && 0==getVexL(pfx)/*128*/) {
21782 delta = dis_MOVSxDUP_128( vbi, pfx, delta, True/*isAvx*/,
21787 if (haveF3no66noF2(pfx) && 1==getVexL(pfx)/*256*/) {
21788 delta = dis_MOVSxDUP_256( vbi, pfx, delta, True/*isL*/ );
21798 if ((have66noF2noF3(pfx) || haveNo66noF2noF3(pfx))
21799 && 0==getVexL(pfx)/*128*/ && !epartIsReg(getUChar(delta))) {
21801 UInt rG = gregOfRexRM(pfx, modrm);
21802 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21814 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
21817 UInt rG = gregOfRexRM(pfx,modrm);
21818 UInt rV = getVexNvvvv(pfx);
21823 UInt rE = eregOfRexRM(pfx,modrm);
21829 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21842 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
21845 UInt rG = gregOfRexRM(pfx,modrm);
21846 UInt rV = getVexNvvvv(pfx);
21851 UInt rE = eregOfRexRM(pfx,modrm);
21857 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21870 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
21873 UInt rG = gregOfRexRM(pfx,modrm);
21874 UInt rV = getVexNvvvv(pfx);
21879 UInt rE = eregOfRexRM(pfx,modrm);
21885 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21898 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
21901 UInt rG = gregOfRexRM(pfx,modrm);
21902 UInt rV = getVexNvvvv(pfx);
21907 UInt rE = eregOfRexRM(pfx,modrm);
21913 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21929 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/
21932 UInt rG = gregOfRexRM(pfx, modrm);
21933 UInt rE = eregOfRexRM(pfx, modrm);
21934 UInt rV = getVexNvvvv(pfx);
21950 if ((have66noF2noF3(pfx) || haveNo66noF2noF3(pfx))
21951 && 0==getVexL(pfx)/*128*/ && !epartIsReg(getUChar(delta))) {
21953 UInt rG = gregOfRexRM(pfx, modrm);
21954 UInt rV = getVexNvvvv(pfx);
21955 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21957 DIP("vmovhp%c %s,%s,%s\n", have66(pfx) ? 'd' : 's',
21968 if (haveF3no66noF2(pfx) && 0==getVexL(pfx)/*128*/) {
21969 delta = dis_MOVSxDUP_128( vbi, pfx, delta, True/*isAvx*/,
21974 if (haveF3no66noF2(pfx) && 1==getVexL(pfx)/*256*/) {
21975 delta = dis_MOVSxDUP_256( vbi, pfx, delta, False/*!isL*/ );
21985 if ((have66noF2noF3(pfx) || haveNo66noF2noF3(pfx))
21986 && 0==getVexL(pfx)/*128*/ && !epartIsReg(getUChar(delta))) {
21988 UInt rG = gregOfRexRM(pfx, modrm);
21989 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
21992 DIP("vmovhp%c %s,%s\n", have66(pfx) ? 'd' : 's',
22000 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22002 UInt rG = gregOfRexRM(pfx, modrm);
22004 UInt rE = eregOfRexRM(pfx,modrm);
22009 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22018 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22020 UInt rG = gregOfRexRM(pfx, modrm);
22022 UInt rE = eregOfRexRM(pfx,modrm);
22027 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22036 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22038 UInt rG = gregOfRexRM(pfx, modrm);
22040 UInt rE = eregOfRexRM(pfx,modrm);
22045 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22054 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22056 UInt rG = gregOfRexRM(pfx, modrm);
22058 UInt rE = eregOfRexRM(pfx,modrm);
22063 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22075 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22077 UInt rG = gregOfRexRM(pfx,modrm);
22079 UInt rE = eregOfRexRM(pfx,modrm);
22084 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22093 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22095 UInt rG = gregOfRexRM(pfx,modrm);
22097 UInt rE = eregOfRexRM(pfx,modrm);
22102 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22111 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22113 UInt rG = gregOfRexRM(pfx,modrm);
22115 UInt rE = eregOfRexRM(pfx,modrm);
22121 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22130 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22132 UInt rG = gregOfRexRM(pfx,modrm);
22134 UInt rE = eregOfRexRM(pfx,modrm);
22140 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22154 if (haveF2no66noF3(pfx) && 0==getRexW(pfx)/*W0*/) {
22156 UInt rV = getVexNvvvv(pfx);
22157 UInt rD = gregOfRexRM(pfx, modrm);
22160 UInt rS = eregOfRexRM(pfx,modrm);
22166 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22180 if (haveF2no66noF3(pfx) && 1==getRexW(pfx)/*W1*/) {
22182 UInt rV = getVexNvvvv(pfx);
22183 UInt rD = gregOfRexRM(pfx, modrm);
22186 UInt rS = eregOfRexRM(pfx,modrm);
22192 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22208 if (haveF3no66noF2(pfx) && 1==getRexW(pfx)/*W1*/) {
22210 UInt rV = getVexNvvvv(pfx);
22211 UInt rD = gregOfRexRM(pfx, modrm);
22214 UInt rS = eregOfRexRM(pfx,modrm);
22220 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22238 if (haveF3no66noF2(pfx) && 0==getRexW(pfx)/*W0*/) {
22240 UInt rV = getVexNvvvv(pfx);
22241 UInt rD = gregOfRexRM(pfx, modrm);
22244 UInt rS = eregOfRexRM(pfx,modrm);
22250 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22272 if ((have66noF2noF3(pfx) || haveNo66noF2noF3(pfx))
22273 && 0==getVexL(pfx)/*128*/ && !epartIsReg(getUChar(delta))) {
22275 UInt rS = gregOfRexRM(pfx, modrm);
22278 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
22282 DIP("vmovntp%c %s,%s\n", have66(pfx) ? 'd' : 's',
22288 if ((have66noF2noF3(pfx) || haveNo66noF2noF3(pfx))
22289 && 1==getVexL(pfx)/*256*/ && !epartIsReg(getUChar(delta))) {
22291 UInt rS = gregOfRexRM(pfx, modrm);
22294 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
22298 DIP("vmovntp%c %s,%s\n", have66(pfx) ? 'd' : 's',
22306 if (haveF2no66noF3(pfx) && 0==getRexW(pfx)/*W0*/) {
22307 delta = dis_CVTxSD2SI( vbi, pfx, delta, True/*isAvx*/, opc, 4);
22311 if (haveF2no66noF3(pfx) && 1==getRexW(pfx)/*W1*/) {
22312 delta = dis_CVTxSD2SI( vbi, pfx, delta, True/*isAvx*/, opc, 8);
22316 if (haveF3no66noF2(pfx) && 0==getRexW(pfx)/*W0*/) {
22317 delta = dis_CVTxSS2SI( vbi, pfx, delta, True/*isAvx*/, opc, 4);
22321 if (haveF3no66noF2(pfx) && 1==getRexW(pfx)/*W1*/) {
22322 delta = dis_CVTxSS2SI( vbi, pfx, delta, True/*isAvx*/, opc, 8);
22329 if (haveF2no66noF3(pfx) && 0==getRexW(pfx)/*W0*/) {
22330 delta = dis_CVTxSD2SI( vbi, pfx, delta, True/*isAvx*/, opc, 4);
22334 if (haveF2no66noF3(pfx) && 1==getRexW(pfx)/*W1*/) {
22335 delta = dis_CVTxSD2SI( vbi, pfx, delta, True/*isAvx*/, opc, 8);
22339 if (haveF3no66noF2(pfx) && 0==getRexW(pfx)/*W0*/) {
22340 delta = dis_CVTxSS2SI( vbi, pfx, delta, True/*isAvx*/, opc, 4);
22344 if (haveF3no66noF2(pfx) && 1==getRexW(pfx)/*W1*/) {
22345 delta = dis_CVTxSS2SI( vbi, pfx, delta, True/*isAvx*/, opc, 8);
22354 if (have66noF2noF3(pfx)) {
22355 delta = dis_COMISD( vbi, pfx, delta, True/*isAvx*/, opc );
22360 if (haveNo66noF2noF3(pfx)) {
22361 delta = dis_COMISS( vbi, pfx, delta, True/*isAvx*/, opc );
22368 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22369 delta = dis_MOVMSKPD_128( vbi, pfx, delta, True/*isAvx*/ );
22373 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22374 delta = dis_MOVMSKPD_256( vbi, pfx, delta );
22378 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22379 delta = dis_MOVMSKPS_128( vbi, pfx, delta, True/*isAvx*/ );
22383 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22384 delta = dis_MOVMSKPS_256( vbi, pfx, delta );
22391 if (haveF3no66noF2(pfx)) {
22393 uses_vvvv, vbi, pfx, delta, "vsqrtss", Iop_Sqrt32F0x4 );
22397 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22399 uses_vvvv, vbi, pfx, delta, "vsqrtps", Iop_Sqrt32Fx4 );
22403 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22405 uses_vvvv, vbi, pfx, delta, "vsqrtps", Iop_Sqrt32Fx8 );
22409 if (haveF2no66noF3(pfx)) {
22411 uses_vvvv, vbi, pfx, delta, "vsqrtsd", Iop_Sqrt64F0x2 );
22415 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22417 uses_vvvv, vbi, pfx, delta, "vsqrtpd", Iop_Sqrt64Fx2 );
22421 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22423 uses_vvvv, vbi, pfx, delta, "vsqrtpd", Iop_Sqrt64Fx4 );
22430 if (haveF3no66noF2(pfx)) {
22432 uses_vvvv, vbi, pfx, delta, "vrsqrtss", Iop_RSqrt32F0x4 );
22436 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22438 uses_vvvv, vbi, pfx, delta, "vrsqrtps", Iop_RSqrt32Fx4 );
22442 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22444 uses_vvvv, vbi, pfx, delta, "vrsqrtps", Iop_RSqrt32Fx8 );
22451 if (haveF3no66noF2(pfx)) {
22453 uses_vvvv, vbi, pfx, delta, "vrcpss", Iop_Recip32F0x4 );
22457 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22459 uses_vvvv, vbi, pfx, delta, "vrcpps", Iop_Recip32Fx4 );
22463 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22465 uses_vvvv, vbi, pfx, delta, "vrcpps", Iop_Recip32Fx8 );
22473 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22475 uses_vvvv, vbi, pfx, delta, "vandpd", Iop_AndV128 );
22480 if (have66noF2noF3(pfxpfx)/*256*/) {
22482 uses_vvvv, vbi, pfx, delta, "vandpd", Iop_AndV256 );
22486 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22488 uses_vvvv, vbi, pfx, delta, "vandps", Iop_AndV128 );
22492 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22494 uses_vvvv, vbi, pfx, delta, "vandps", Iop_AndV256 );
22502 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22504 uses_vvvv, vbi, pfx, delta, "vandpd", Iop_AndV128,
22509 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22511 uses_vvvv, vbi, pfx, delta, "vandpd", Iop_AndV256,
22516 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22518 uses_vvvv, vbi, pfx, delta, "vandps", Iop_AndV128,
22523 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22525 uses_vvvv, vbi, pfx, delta, "vandps", Iop_AndV256,
22534 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22536 uses_vvvv, vbi, pfx, delta, "vorpd", Iop_OrV128 );
22541 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22543 uses_vvvv, vbi, pfx, delta, "vorpd", Iop_OrV256 );
22548 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22550 uses_vvvv, vbi, pfx, delta, "vorps", Iop_OrV128 );
22555 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22557 uses_vvvv, vbi, pfx, delta, "vorps", Iop_OrV256 );
22565 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22567 uses_vvvv, vbi, pfx, delta, "vxorpd", Iop_XorV128 );
22572 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22574 uses_vvvv, vbi, pfx, delta, "vxorpd", Iop_XorV256 );
22579 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22581 uses_vvvv, vbi, pfx, delta, "vxorps", Iop_XorV128 );
22586 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22588 uses_vvvv, vbi, pfx, delta, "vxorps", Iop_XorV256 );
22595 if (haveF2no66noF3(pfx)) {
22597 uses_vvvv, vbi, pfx, delta, "vaddsd", Iop_Add64F0x2 );
22601 if (haveF3no66noF2(pfx)) {
22603 uses_vvvv, vbi, pfx, delta, "vaddss", Iop_Add32F0x4 );
22607 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22609 uses_vvvv, vbi, pfx, delta, "vaddps", Iop_Add32Fx4 );
22613 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22615 uses_vvvv, vbi, pfx, delta, "vaddps", Iop_Add32Fx8 );
22619 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22621 uses_vvvv, vbi, pfx, delta, "vaddpd", Iop_Add64Fx2 );
22625 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22627 uses_vvvv, vbi, pfx, delta, "vaddpd", Iop_Add64Fx4 );
22634 if (haveF2no66noF3(pfx)) {
22636 uses_vvvv, vbi, pfx, delta, "vmulsd", Iop_Mul64F0x2 );
22640 if (haveF3no66noF2(pfx)) {
22642 uses_vvvv, vbi, pfx, delta, "vmulss", Iop_Mul32F0x4 );
22646 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22648 uses_vvvv, vbi, pfx, delta, "vmulps", Iop_Mul32Fx4 );
22652 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22654 uses_vvvv, vbi, pfx, delta, "vmulps", Iop_Mul32Fx8 );
22658 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22660 uses_vvvv, vbi, pfx, delta, "vmulpd", Iop_Mul64Fx2 );
22664 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22666 uses_vvvv, vbi, pfx, delta, "vmulpd", Iop_Mul64Fx4 );
22673 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22674 delta = dis_CVTPS2PD_128( vbi, pfx, delta, True/*isAvx*/ );
22678 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22679 delta = dis_CVTPS2PD_256( vbi, pfx, delta );
22683 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22684 delta = dis_CVTPD2PS_128( vbi, pfx, delta, True/*isAvx*/ );
22688 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22689 delta = dis_CVTPD2PS_256( vbi, pfx, delta );
22693 if (haveF2no66noF3(pfx)) {
22695 UInt rV = getVexNvvvv(pfx);
22696 UInt rD = gregOfRexRM(pfx, modrm);
22701 UInt rS = eregOfRexRM(pfx,modrm);
22707 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22723 if (haveF3no66noF2(pfx)) {
22725 UInt rV = getVexNvvvv(pfx);
22726 UInt rD = gregOfRexRM(pfx, modrm);
22729 UInt rS = eregOfRexRM(pfx,modrm);
22735 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
22752 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22753 delta = dis_CVTxPS2DQ_128( vbi, pfx, delta,
22758 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22759 delta = dis_CVTxPS2DQ_256( vbi, pfx, delta,
22764 if (haveF3no66noF2(pfx) && 0==getVexL(pfx)/*128*/) {
22765 delta = dis_CVTxPS2DQ_128( vbi, pfx, delta,
22770 if (haveF3no66noF2(pfx) && 1==getVexL(pfx)/*256*/) {
22771 delta = dis_CVTxPS2DQ_256( vbi, pfx, delta,
22776 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22777 delta = dis_CVTDQ2PS_128 ( vbi, pfx, delta, True/*isAvx*/ );
22781 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22782 delta = dis_CVTDQ2PS_256 ( vbi, pfx, delta );
22789 if (haveF2no66noF3(pfx)) {
22791 uses_vvvv, vbi, pfx, delta, "vsubsd", Iop_Sub64F0x2 );
22795 if (haveF3no66noF2(pfx)) {
22797 uses_vvvv, vbi, pfx, delta, "vsubss", Iop_Sub32F0x4 );
22801 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22803 uses_vvvv, vbi, pfx, delta, "vsubps", Iop_Sub32Fx4 );
22807 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22809 uses_vvvv, vbi, pfx, delta, "vsubps", Iop_Sub32Fx8 );
22813 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22815 uses_vvvv, vbi, pfx, delta, "vsubpd", Iop_Sub64Fx2 );
22819 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22821 uses_vvvv, vbi, pfx, delta, "vsubpd", Iop_Sub64Fx4 );
22828 if (haveF2no66noF3(pfx)) {
22830 uses_vvvv, vbi, pfx, delta, "vminsd", Iop_Min64F0x2 );
22834 if (haveF3no66noF2(pfx)) {
22836 uses_vvvv, vbi, pfx, delta, "vminss", Iop_Min32F0x4 );
22840 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22842 uses_vvvv, vbi, pfx, delta, "vminps", Iop_Min32Fx4 );
22846 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22848 uses_vvvv, vbi, pfx, delta, "vminps", Iop_Min32Fx8 );
22852 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22854 uses_vvvv, vbi, pfx, delta, "vminpd", Iop_Min64Fx2 );
22858 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22860 uses_vvvv, vbi, pfx, delta, "vminpd", Iop_Min64Fx4 );
22867 if (haveF2no66noF3(pfx)) {
22869 uses_vvvv, vbi, pfx, delta, "vdivsd", Iop_Div64F0x2 );
22873 if (haveF3no66noF2(pfx)) {
22875 uses_vvvv, vbi, pfx, delta, "vdivss", Iop_Div32F0x4 );
22879 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22881 uses_vvvv, vbi, pfx, delta, "vdivps", Iop_Div32Fx4 );
22885 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22887 uses_vvvv, vbi, pfx, delta, "vdivps", Iop_Div32Fx8 );
22891 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22893 uses_vvvv, vbi, pfx, delta, "vdivpd", Iop_Div64Fx2 );
22897 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22899 uses_vvvv, vbi, pfx, delta, "vdivpd", Iop_Div64Fx4 );
22906 if (haveF2no66noF3(pfx)) {
22908 uses_vvvv, vbi, pfx, delta, "vmaxsd", Iop_Max64F0x2 );
22912 if (haveF3no66noF2(pfx)) {
22914 uses_vvvv, vbi, pfx, delta, "vmaxss", Iop_Max32F0x4 );
22918 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22920 uses_vvvv, vbi, pfx, delta, "vmaxps", Iop_Max32Fx4 );
22924 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22926 uses_vvvv, vbi, pfx, delta, "vmaxps", Iop_Max32Fx8 );
22930 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22932 uses_vvvv, vbi, pfx, delta, "vmaxpd", Iop_Max64Fx2 );
22936 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
22938 uses_vvvv, vbi, pfx, delta, "vmaxpd", Iop_Max64Fx4 );
22946 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22948 uses_vvvv, vbi, pfx, delta, "vpunpcklbw",
22958 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22960 uses_vvvv, vbi, pfx, delta, "vpunpcklwd",
22970 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22972 uses_vvvv, vbi, pfx, delta, "vpunpckldq",
22982 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22984 uses_vvvv, vbi, pfx, delta, "vpacksswb",
22994 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
22996 uses_vvvv, vbi, pfx, delta, "vpcmpgtb", Iop_CmpGT8Sx16 );
23004 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23006 uses_vvvv, vbi, pfx, delta, "vpcmpgtw", Iop_CmpGT16Sx8 );
23014 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23016 uses_vvvv, vbi, pfx, delta, "vpcmpgtd", Iop_CmpGT32Sx4 );
23024 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23026 uses_vvvv, vbi, pfx, delta, "vpackuswb",
23036 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23038 uses_vvvv, vbi, pfx, delta, "vpunpckhbw",
23048 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23050 uses_vvvv, vbi, pfx, delta, "vpunpckhwd",
23060 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23062 uses_vvvv, vbi, pfx, delta, "vpunpckhdq",
23072 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23074 uses_vvvv, vbi, pfx, delta, "vpackssdw",
23084 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23086 uses_vvvv, vbi, pfx, delta, "vpunpcklqdq",
23096 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23098 uses_vvvv, vbi, pfx, delta, "vpunpckhqdq",
23107 if (have66noF2noF3(pfx)
23108 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
23114 gregOfRexRM(pfx,modrm),
23115 unop( Iop_32UtoV128, getIReg32(eregOfRexRM(pfx,modrm)) )
23117 DIP("vmovd %s, %s\n", nameIReg32(eregOfRexRM(pfx,modrm)),
23118 nameXMMReg(gregOfRexRM(pfx,modrm)));
23120 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
23123 gregOfRexRM(pfx,modrm),
23127 nameXMMReg(gregOfRexRM(pfx,modrm)));
23132 if (have66noF2noF3(pfx)
23133 && 0==getVexL(pfx)/*128*/ && 1==getRexW(pfx)/*W1*/) {
23139 gregOfRexRM(pfx,modrm),
23140 unop( Iop_64UtoV128, getIReg64(eregOfRexRM(pfx,modrm)) )
23142 DIP("vmovq %s, %s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
23143 nameXMMReg(gregOfRexRM(pfx,modrm)));
23145 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
23148 gregOfRexRM(pfx,modrm),
23152 nameXMMReg(gregOfRexRM(pfx,modrm)));
23161 if ((have66noF2noF3(pfx) || haveF3no66noF2(pfx))
23162 && 1==getVexL(pfx)/*256*/) {
23164 UInt rD = gregOfRexRM(pfx, modrm);
23166 Bool isA = have66noF2noF3(pfx);
23169 UInt rS = eregOfRexRM(pfx, modrm);
23174 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
23186 if ((have66noF2noF3(pfx) || haveF3no66noF2(pfx))
23187 && 0==getVexL(pfx)/*128*/) {
23189 UInt rD = gregOfRexRM(pfx, modrm);
23191 Bool isA = have66noF2noF3(pfx);
23194 UInt rS = eregOfRexRM(pfx, modrm);
23199 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
23213 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23214 delta = dis_PSHUFD_32x4( vbi, pfx, delta, True/*writesYmm*/);
23218 if (haveF2no66noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23219 delta = dis_PSHUFxW_128( vbi, pfx, delta,
23224 if (haveF3no66noF2(pfx) && 0==getVexL(pfx)/*128*/) {
23225 delta = dis_PSHUFxW_128( vbi, pfx, delta,
23235 if (have66noF2noF3(pfx)
23236 && 0==getVexL(pfx)/*128*/
23239 delta = dis_AVX128_shiftE_to_V_imm( pfx, delta,
23245 delta = dis_AVX128_shiftE_to_V_imm( pfx, delta,
23251 delta = dis_AVX128_shiftE_to_V_imm( pfx, delta,
23264 if (have66noF2noF3(pfx)
23265 && 0==getVexL(pfx)/*128*/
23268 delta = dis_AVX128_shiftE_to_V_imm( pfx, delta,
23274 delta = dis_AVX128_shiftE_to_V_imm( pfx, delta,
23280 delta = dis_AVX128_shiftE_to_V_imm( pfx, delta,
23294 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/
23296 Int rS = eregOfRexRM(pfx,getUChar(delta));
23297 Int rD = getVexNvvvv(pfx);
23318 delta = dis_AVX128_shiftE_to_V_imm( pfx, delta,
23324 delta = dis_AVX128_shiftE_to_V_imm( pfx, delta,
23336 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23338 uses_vvvv, vbi, pfx, delta, "vpcmpeqb", Iop_CmpEQ8x16 );
23346 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23348 uses_vvvv, vbi, pfx, delta, "vpcmpeqw", Iop_CmpEQ16x8 );
23356 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23358 uses_vvvv, vbi, pfx, delta, "vpcmpeqd", Iop_CmpEQ32x4 );
23365 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23376 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23392 if (haveF2no66noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23398 UInt rG = gregOfRexRM(pfx,modrm);
23399 UInt rV = getVexNvvvv(pfx);
23401 UInt rE = eregOfRexRM(pfx,modrm);
23407 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
23420 if (haveF2no66noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23427 UInt rG = gregOfRexRM(pfx,modrm);
23428 UInt rV = getVexNvvvv(pfx);
23431 UInt rE = eregOfRexRM(pfx,modrm);
23437 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
23454 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23460 UInt rG = gregOfRexRM(pfx,modrm);
23461 UInt rV = getVexNvvvv(pfx);
23463 UInt rE = eregOfRexRM(pfx,modrm);
23469 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
23482 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23489 UInt rG = gregOfRexRM(pfx,modrm);
23490 UInt rV = getVexNvvvv(pfx);
23493 UInt rE = eregOfRexRM(pfx,modrm);
23499 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
23522 if (haveF3no66noF2(pfx)
23523 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
23526 UInt rG = gregOfRexRM(pfx,modrm);
23528 UInt rE = eregOfRexRM(pfx,modrm);
23533 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
23546 if (have66noF2noF3(pfx)
23547 && 0==getVexL(pfx)/*128*/ && 1==getRexW(pfx)/*W1*/) {
23549 UInt rG = gregOfRexRM(pfx,modrm);
23551 UInt rE = eregOfRexRM(pfx,modrm);
23556 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
23565 if (have66noF2noF3(pfx)
23566 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
23568 UInt rG = gregOfRexRM(pfx,modrm);
23570 UInt rE = eregOfRexRM(pfx,modrm);
23575 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
23587 if ((have66noF2noF3(pfx) || haveF3no66noF2(pfx))
23588 && 1==getVexL(pfx)/*256*/) {
23590 UInt rS = gregOfRexRM(pfx, modrm);
23592 Bool isA = have66noF2noF3(pfx);
23596 UInt rD = eregOfRexRM(pfx, modrm);
23601 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
23612 if ((have66noF2noF3(pfx) || haveF3no66noF2(pfx))
23613 && 0==getVexL(pfx)/*128*/) {
23615 UInt rS = gregOfRexRM(pfx, modrm);
23617 Bool isA = have66noF2noF3(pfx);
23621 UInt rD = eregOfRexRM(pfx, modrm);
23626 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
23639 if (haveNo66noF2noF3(pfx)
23640 && 0==getVexL(pfx)/*LZ*/
23641 && 0==getRexW(pfx) /* be paranoid -- Intel docs don't require this */
23644 delta = dis_STMXCSR(vbi, pfx, delta, True/*isAvx*/);
23648 if (haveNo66noF2noF3(pfx)
23649 && 0==getVexL(pfx)/*LZ*/
23650 && 0==getRexW(pfx) /* be paranoid -- Intel docs don't require this */
23653 delta = dis_LDMXCSR(vbi, pfx, delta, True/*isAvx*/);
23661 if (haveF2no66noF3(pfx)) {
23663 delta = dis_AVX128_cmp_V_E_to_G( uses_vvvv, vbi, pfx, delta,
23671 if (haveF3no66noF2(pfx)) {
23673 delta = dis_AVX128_cmp_V_E_to_G( uses_vvvv, vbi, pfx, delta,
23681 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23683 delta = dis_AVX128_cmp_V_E_to_G( uses_vvvv, vbi, pfx, delta,
23691 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23693 delta = dis_AVX256_cmp_V_E_to_G( uses_vvvv, vbi, pfx, delta,
23700 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23702 delta = dis_AVX128_cmp_V_E_to_G( uses_vvvv, vbi, pfx, delta,
23710 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23712 delta = dis_AVX256_cmp_V_E_to_G( uses_vvvv, vbi, pfx, delta,
23721 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23723 UInt rG = gregOfRexRM(pfx, modrm);
23724 UInt rV = getVexNvvvv(pfx);
23731 getIReg32(eregOfRexRM(pfx,modrm))) );
23734 nameIReg32( eregOfRexRM(pfx, modrm) ), nameXMMReg(rG) );
23736 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
23755 if (have66noF2noF3(pfx)
23756 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
23758 delta = dis_PEXTRW_128_EregOnly_toG( vbi, pfx, delta,
23768 if (haveNo66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23773 UInt rG = gregOfRexRM(pfx,modrm);
23774 UInt rV = getVexNvvvv(pfx);
23777 UInt rE = eregOfRexRM(pfx,modrm);
23784 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
23798 if (haveNo66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23803 UInt rG = gregOfRexRM(pfx,modrm);
23804 UInt rV = getVexNvvvv(pfx);
23807 UInt rE = eregOfRexRM(pfx,modrm);
23814 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
23828 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23833 UInt rG = gregOfRexRM(pfx,modrm);
23834 UInt rV = getVexNvvvv(pfx);
23837 UInt rE = eregOfRexRM(pfx,modrm);
23844 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
23858 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23863 UInt rG = gregOfRexRM(pfx,modrm);
23864 UInt rV = getVexNvvvv(pfx);
23867 UInt rE = eregOfRexRM(pfx,modrm);
23874 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 1 );
23890 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23892 uses_vvvv, vbi, pfx, delta,
23897 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23899 uses_vvvv, vbi, pfx, delta,
23904 if (haveF2no66noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23906 uses_vvvv, vbi, pfx, delta,
23911 if (haveF2no66noF3(pfx) && 1==getVexL(pfx)/*256*/) {
23913 uses_vvvv, vbi, pfx, delta,
23921 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23922 delta = dis_AVX128_shiftV_byE( vbi, pfx, delta,
23932 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23933 delta = dis_AVX128_shiftV_byE( vbi, pfx, delta,
23942 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23943 delta = dis_AVX128_shiftV_byE( vbi, pfx, delta,
23953 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23955 uses_vvvv, vbi, pfx, delta, "vpaddq", Iop_Add64x2 );
23962 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23964 uses_vvvv, vbi, pfx, delta, "vpmullw", Iop_Mul16x8 );
23974 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/
23975 && 0==getRexW(pfx)/*this might be redundant, dunno*/) {
23977 UInt rG = gregOfRexRM(pfx,modrm);
23982 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
23993 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
23994 delta = dis_PMOVMSKB_128( vbi, pfx, delta, True/*isAvx*/ );
24001 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24003 uses_vvvv, vbi, pfx, delta, "vpsubusb", Iop_QSub8Ux16 );
24010 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24012 uses_vvvv, vbi, pfx, delta, "vpsubusw", Iop_QSub16Ux8 );
24019 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24021 uses_vvvv, vbi, pfx, delta, "vpminub", Iop_Min8Ux16 );
24029 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24031 uses_vvvv, vbi, pfx, delta, "vpand", Iop_AndV128 );
24038 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24040 uses_vvvv, vbi, pfx, delta, "vpaddusb", Iop_QAdd8Ux16 );
24047 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24049 uses_vvvv, vbi, pfx, delta, "vpaddusw", Iop_QAdd16Ux8 );
24056 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24058 uses_vvvv, vbi, pfx, delta, "vpmaxub", Iop_Max8Ux16 );
24066 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24068 uses_vvvv, vbi, pfx, delta, "vpandn", Iop_AndV128,
24076 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24078 uses_vvvv, vbi, pfx, delta, "vpavgb", Iop_Avg8Ux16 );
24085 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24086 pfx, delta,
24095 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24096 delta = dis_AVX128_shiftV_byE( vbi, pfx, delta,
24105 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24107 uses_vvvv, vbi, pfx, delta, "vpavgw", Iop_Avg16Ux8 );
24114 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24116 uses_vvvv, vbi, pfx, delta, "vpmulhuw", Iop_MulHi16Ux8 );
24123 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24125 uses_vvvv, vbi, pfx, delta, "vpmulhw", Iop_MulHi16Sx8 );
24132 if (haveF3no66noF2(pfx) && 0==getVexL(pfx)/*128*/) {
24133 delta = dis_CVTDQ2PD_128(vbi, pfx, delta, True/*isAvx*/);
24137 if (haveF3no66noF2(pfx) && 1==getVexL(pfx)/*256*/) {
24138 delta = dis_CVTDQ2PD_256(vbi, pfx, delta);
24142 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24143 delta = dis_CVTxPD2DQ_128(vbi, pfx, delta, True/*isAvx*/,
24148 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
24149 delta = dis_CVTxPD2DQ_256(vbi, pfx, delta, True/*r2zero*/);
24153 if (haveF2no66noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24154 delta = dis_CVTxPD2DQ_128(vbi, pfx, delta, True/*isAvx*/,
24159 if (haveF2no66noF3(pfx) && 1==getVexL(pfx)/*256*/) {
24160 delta = dis_CVTxPD2DQ_256(vbi, pfx, delta, False/*!r2zero*/);
24167 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24169 UInt rG = gregOfRexRM(pfx,modrm);
24171 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
24181 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
24183 UInt rG = gregOfRexRM(pfx,modrm);
24185 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
24198 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24200 uses_vvvv, vbi, pfx, delta, "vpsubsb", Iop_QSub8Sx16 );
24207 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24209 uses_vvvv, vbi, pfx, delta, "vpsubsw", Iop_QSub16Sx8 );
24217 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24219 uses_vvvv, vbi, pfx, delta, "vpminsw", Iop_Min16Sx8 );
24227 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24229 uses_vvvv, vbi, pfx, delta, "vpor", Iop_OrV128 );
24236 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24238 uses_vvvv, vbi, pfx, delta, "vpaddsb", Iop_QAdd8Sx16 );
24245 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24247 uses_vvvv, vbi, pfx, delta, "vpaddsw", Iop_QAdd16Sx8 );
24255 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24257 uses_vvvv, vbi, pfx, delta, "vpmaxsw", Iop_Max16Sx8 );
24265 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24267 uses_vvvv, vbi, pfx, delta, "vpxor", Iop_XorV128 );
24274 if (haveF2no66noF3(pfx) && 1==getVexL(pfx)/*256*/) {
24276 UInt rD = gregOfRexRM(pfx, modrm);
24279 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24287 if (haveF2no66noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24289 UInt rD = gregOfRexRM(pfx, modrm);
24292 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24303 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24304 delta = dis_AVX128_shiftV_byE( vbi, pfx, delta,
24314 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24315 delta = dis_AVX128_shiftV_byE( vbi, pfx, delta,
24324 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24325 delta = dis_AVX128_shiftV_byE( vbi, pfx, delta,
24334 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24336 uses_vvvv, vbi, pfx, delta,
24344 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24346 uses_vvvv, vbi, pfx, delta,
24354 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24356 uses_vvvv, vbi, pfx, delta,
24364 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/
24366 delta = dis_MASKMOVDQU( vbi, pfx, delta, True/*isAvx*/ );
24374 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24376 uses_vvvv, vbi, pfx, delta, "vpsubb", Iop_Sub8x16 );
24384 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24386 uses_vvvv, vbi, pfx, delta, "vpsubw", Iop_Sub16x8 );
24394 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24396 uses_vvvv, vbi, pfx, delta, "vpsubd", Iop_Sub32x4 );
24404 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24406 uses_vvvv, vbi, pfx, delta, "vpsubq", Iop_Sub64x2 );
24414 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24416 uses_vvvv, vbi, pfx, delta, "vpaddb", Iop_Add8x16 );
24424 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24426 uses_vvvv, vbi, pfx, delta, "vpaddw", Iop_Add16x8 );
24434 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24436 uses_vvvv, vbi, pfx, delta, "vpaddd", Iop_Add32x4 );
24530 Prefix pfx, Int sz, Long deltaIN
24546 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24548 uses_vvvv, vbi, pfx, delta, "vpshufb", math_PSHUFB_XMM );
24559 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24560 delta = dis_PHADD_128( vbi, pfx, delta, True/*isAvx*/, opc );
24568 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24570 uses_vvvv, vbi, pfx, delta, "vpmaddubsw",
24582 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24583 delta = dis_PHADD_128( vbi, pfx, delta, True/*isAvx*/, opc );
24595 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24603 UInt rG = gregOfRexRM(pfx,modrm);
24604 UInt rV = getVexNvvvv(pfx);
24616 UInt rE = eregOfRexRM(pfx,modrm);
24622 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
24646 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24652 UInt rG = gregOfRexRM(pfx,modrm);
24653 UInt rV = getVexNvvvv(pfx);
24658 UInt rE = eregOfRexRM(pfx,modrm);
24664 addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
24688 if (have66noF2noF3(pfx)
24689 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
24691 UInt rG = gregOfRexRM(pfx, modrm);
24692 UInt rV = getVexNvvvv(pfx);
24695 UInt rE = eregOfRexRM(pfx, modrm);
24701 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24715 if (have66noF2noF3(pfx)
24716 && 1==getVexL(pfx)/*256*/ && 0==getRexW(pfx)/*W0*/) {
24718 UInt rG = gregOfRexRM(pfx, modrm);
24719 UInt rV = getVexNvvvv(pfx);
24722 UInt rE = eregOfRexRM(pfx, modrm);
24728 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24745 if (have66noF2noF3(pfx)
24746 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
24748 UInt rG = gregOfRexRM(pfx, modrm);
24749 UInt rV = getVexNvvvv(pfx);
24752 UInt rE = eregOfRexRM(pfx, modrm);
24758 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24772 if (have66noF2noF3(pfx)
24773 && 1==getVexL(pfx)/*256*/ && 0==getRexW(pfx)/*W0*/) {
24775 UInt rG = gregOfRexRM(pfx, modrm);
24776 UInt rV = getVexNvvvv(pfx);
24779 UInt rE = eregOfRexRM(pfx, modrm);
24785 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24802 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24803 delta = dis_xTESTy_128( vbi, pfx, delta, True/*isAvx*/, 32 );
24807 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
24808 delta = dis_xTESTy_256( vbi, pfx, delta, 32 );
24815 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24816 delta = dis_xTESTy_128( vbi, pfx, delta, True/*isAvx*/, 64 );
24820 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
24821 delta = dis_xTESTy_256( vbi, pfx, delta, 64 );
24828 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24829 delta = dis_xTESTy_128( vbi, pfx, delta, True/*isAvx*/, 0 );
24833 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
24834 delta = dis_xTESTy_256( vbi, pfx, delta, 0 );
24841 if (have66noF2noF3(pfx)
24842 && 0==getVexL(pfx)/*128*/
24845 UInt rG = gregOfRexRM(pfx, modrm);
24846 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24858 if (have66noF2noF3(pfx)
24859 && 1==getVexL(pfx)/*256*/
24862 UInt rG = gregOfRexRM(pfx, modrm);
24863 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24879 if (have66noF2noF3(pfx)
24880 && 1==getVexL(pfx)/*256*/
24883 UInt rG = gregOfRexRM(pfx, modrm);
24884 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24898 if (have66noF2noF3(pfx)
24899 && 1==getVexL(pfx)/*256*/
24902 UInt rG = gregOfRexRM(pfx, modrm);
24903 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
24915 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24917 uses_vvvv, vbi, pfx, delta,
24925 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24927 uses_vvvv, vbi, pfx, delta,
24935 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24937 uses_vvvv, vbi, pfx, delta,
24946 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24947 delta = dis_PMOVxXBW_128( vbi, pfx, delta,
24956 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24957 delta = dis_PMOVxXBD_128( vbi, pfx, delta,
24966 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24967 delta = dis_PMOVSXBQ_128( vbi, pfx, delta, True/*isAvx*/ );
24974 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24975 delta = dis_PMOVxXWD_128( vbi, pfx, delta,
24983 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24984 delta = dis_PMOVSXWQ_128( vbi, pfx, delta, True/*isAvx*/ );
24991 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
24992 pfx, delta,
25000 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25002 uses_vvvv, vbi, pfx, delta,
25011 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25013 uses_vvvv, vbi, pfx, delta, "vpcmpeqq", Iop_CmpEQ64x2 );
25020 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/
25023 UInt rD = gregOfRexRM(pfx, modrm);
25025 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 0 );
25038 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25040 uses_vvvv, vbi, pfx, delta, "vpackusdw",
25050 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25051 delta = dis_PMOVxXBW_128( vbi, pfx, delta,
25060 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25061 delta = dis_PMOVxXBD_128( vbi, pfx, delta,
25070 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25071 delta = dis_PMOVZXBQ_128( vbi, pfx, delta, True/*isAvx*/ );
25079 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25080 delta = dis_PMOVxXWD_128( vbi, pfx, delta,
25088 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25089 delta = dis_PMOVZXWQ_128( vbi, pfx, delta, True/*isAvx*/ );
25096 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25097 delta = dis_PMOVxXDQ_128( vbi, pfx, delta,
25106 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25108 uses_vvvv, vbi, pfx, delta, "vpcmpgtq", Iop_CmpGT64Sx2 );
25116 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25118 uses_vvvv, vbi, pfx, delta, "vpminsb", Iop_Min8Sx16 );
25126 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25128 uses_vvvv, vbi, pfx, delta, "vpminsd", Iop_Min32Sx4 );
25136 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25138 uses_vvvv, vbi, pfx, delta, "vpminuw", Iop_Min16Ux8 );
25146 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25148 uses_vvvv, vbi, pfx, delta, "vpminud", Iop_Min32Ux4 );
25156 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25158 uses_vvvv, vbi, pfx, delta, "vpmaxsb", Iop_Max8Sx16 );
25166 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25168 uses_vvvv, vbi, pfx, delta, "vpmaxsd", Iop_Max32Sx4 );
25176 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25178 uses_vvvv, vbi, pfx, delta, "vpmaxuw", Iop_Max16Ux8 );
25186 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25188 uses_vvvv, vbi, pfx, delta, "vpmaxud", Iop_Max32Ux4 );
25196 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25198 uses_vvvv, vbi, pfx, delta, "vpmulld", Iop_Mul32x4 );
25205 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25206 delta = dis_PHMINPOSUW_128( vbi, pfx, delta, True/*isAvx*/ );
25221 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25222 delta = dis_AESx( vbi, pfx, delta, True/*!isAvx*/, opc );
25274 Prefix pfx, Int sz, Long deltaIN
25289 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
25292 UInt rG = gregOfRexRM(pfx, modrm);
25295 UInt rE = eregOfRexRM(pfx, modrm);
25302 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25319 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25322 UInt rG = gregOfRexRM(pfx, modrm);
25325 UInt rE = eregOfRexRM(pfx, modrm);
25332 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25347 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25350 UInt rG = gregOfRexRM(pfx, modrm);
25353 UInt rE = eregOfRexRM(pfx, modrm);
25360 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25380 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
25383 UInt rG = gregOfRexRM(pfx, modrm);
25386 UInt rE = eregOfRexRM(pfx, modrm);
25393 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25417 if (have66noF2noF3(pfx)
25418 && 1==getVexL(pfx)/*256*/ && 0==getRexW(pfx)/*W0*/) {
25421 UInt rG = gregOfRexRM(pfx, modrm);
25422 UInt rV = getVexNvvvv(pfx);
25430 UInt rE = eregOfRexRM(pfx, modrm);
25438 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25464 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25466 UInt rG = gregOfRexRM(pfx, modrm);
25478 UInt rE = eregOfRexRM(pfx, modrm);
25485 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25512 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
25514 UInt rG = gregOfRexRM(pfx, modrm);
25530 UInt rE = eregOfRexRM(pfx, modrm);
25537 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25569 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25571 UInt rG = gregOfRexRM(pfx, modrm);
25581 UInt rE = eregOfRexRM(pfx, modrm);
25588 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25613 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
25615 UInt rG = gregOfRexRM(pfx, modrm);
25627 UInt rE = eregOfRexRM(pfx, modrm);
25634 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25665 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25667 UInt rG = gregOfRexRM(pfx, modrm);
25668 UInt rV = getVexNvvvv(pfx);
25675 UInt rE = eregOfRexRM(pfx, modrm);
25685 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25720 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
25723 UInt rG = gregOfRexRM(pfx, modrm);
25724 UInt rV = getVexNvvvv(pfx);
25729 UInt rE = eregOfRexRM(pfx, modrm);
25736 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25751 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25754 UInt rG = gregOfRexRM(pfx, modrm);
25755 UInt rV = getVexNvvvv(pfx);
25760 UInt rE = eregOfRexRM(pfx, modrm);
25767 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25785 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
25788 UInt rG = gregOfRexRM(pfx, modrm);
25789 UInt rV = getVexNvvvv(pfx);
25794 UInt rE = eregOfRexRM(pfx, modrm);
25801 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25816 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25819 UInt rG = gregOfRexRM(pfx, modrm);
25820 UInt rV = getVexNvvvv(pfx);
25825 UInt rE = eregOfRexRM(pfx, modrm);
25832 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25850 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25853 UInt rG = gregOfRexRM(pfx, modrm);
25854 UInt rV = getVexNvvvv(pfx);
25859 UInt rE = eregOfRexRM(pfx, modrm);
25866 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25884 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25886 UInt rG = gregOfRexRM(pfx, modrm);
25887 UInt rV = getVexNvvvv(pfx);
25895 UInt rE = eregOfRexRM(pfx, modrm);
25902 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25919 if (have66noF2noF3(pfx)
25920 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
25921 delta = dis_PEXTRB_128_GtoE( vbi, pfx, delta, False/*!isAvx*/ );
25929 if (have66noF2noF3(pfx)
25930 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
25931 delta = dis_PEXTRW( vbi, pfx, delta, True/*isAvx*/ );
25939 if (have66noF2noF3(pfx)
25940 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
25941 delta = dis_PEXTRD( vbi, pfx, delta, True/*isAvx*/ );
25945 if (have66noF2noF3(pfx)
25946 && 0==getVexL(pfx)/*128*/ && 1==getRexW(pfx)/*W1*/) {
25947 delta = dis_PEXTRQ( vbi, pfx, delta, True/*isAvx*/ );
25954 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
25955 delta = dis_EXTRACTPS( vbi, pfx, delta, True/*isAvx*/ );
25964 if (have66noF2noF3(pfx)
25965 && 1==getVexL(pfx)/*256*/ && 0==getRexW(pfx)/*W0*/) {
25968 UInt rG = gregOfRexRM(pfx, modrm);
25969 UInt rV = getVexNvvvv(pfx);
25972 UInt rE = eregOfRexRM(pfx, modrm);
25979 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
25999 if (have66noF2noF3(pfx)
26000 && 1==getVexL(pfx)/*256*/ && 0==getRexW(pfx)/*W0*/) {
26003 UInt rS = gregOfRexRM(pfx, modrm);
26006 UInt rD = eregOfRexRM(pfx, modrm);
26014 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
26030 if (have66noF2noF3(pfx)
26031 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
26033 UInt rG = gregOfRexRM(pfx, modrm);
26034 UInt rV = getVexNvvvv(pfx);
26039 UInt rE = eregOfRexRM(pfx,modrm);
26046 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
26066 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26068 UInt rG = gregOfRexRM(pfx, modrm);
26069 UInt rV = getVexNvvvv(pfx);
26075 UInt rE = eregOfRexRM(pfx, modrm);
26086 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
26105 if (have66noF2noF3(pfx)
26106 && 0==getVexL(pfx)/*128*/ && 0==getRexW(pfx)/*W0*/) {
26108 UInt rG = gregOfRexRM(pfx, modrm);
26109 UInt rV = getVexNvvvv(pfx);
26114 UInt rE = eregOfRexRM(pfx,modrm);
26121 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
26137 if (have66noF2noF3(pfx)
26138 && 0==getVexL(pfx)/*128*/ && 1==getRexW(pfx)/*W1*/) {
26140 UInt rG = gregOfRexRM(pfx, modrm);
26141 UInt rV = getVexNvvvv(pfx);
26146 UInt rE = eregOfRexRM(pfx,modrm);
26153 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
26172 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26174 UInt rG = gregOfRexRM(pfx, modrm);
26175 UInt rV = getVexNvvvv(pfx);
26179 UInt rE = eregOfRexRM(pfx,modrm);
26186 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
26202 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
26204 UInt rG = gregOfRexRM(pfx, modrm);
26205 UInt rV = getVexNvvvv(pfx);
26209 UInt rE = eregOfRexRM(pfx,modrm);
26216 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
26240 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26242 UInt rG = gregOfRexRM(pfx, modrm);
26243 UInt rV = getVexNvvvv(pfx);
26247 UInt rE = eregOfRexRM(pfx,modrm);
26254 addr = disAMode( &alen, vbi, pfx, delta, dis_buf, 1 );
26274 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26279 UInt rG = gregOfRexRM(pfx, modrm);
26280 UInt rV = getVexNvvvv(pfx);
26285 UInt rE = eregOfRexRM(pfx, modrm);
26293 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
26316 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26321 UInt rG = gregOfRexRM(pfx, modrm);
26322 UInt rV = getVexNvvvv(pfx);
26327 UInt rE = eregOfRexRM(pfx, modrm);
26334 addr = disAMode( &alen, vbi, pfx, delta, dis_buf,
26353 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26354 delta = dis_VBLENDV_128 ( vbi, pfx, delta,
26362 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
26363 delta = dis_VBLENDV_256 ( vbi, pfx, delta,
26374 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26375 delta = dis_VBLENDV_128 ( vbi, pfx, delta,
26383 if (have66noF2noF3(pfx) && 1==getVexL(pfx)/*256*/) {
26384 delta = dis_VBLENDV_256 ( vbi, pfx, delta,
26395 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26396 delta = dis_VBLENDV_128 ( vbi, pfx, delta,
26414 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26416 delta = dis_PCMPxSTRx( vbi, pfx, delta, True/*isAvx*/, opc );
26424 if (have66noF2noF3(pfx) && 0==getVexL(pfx)/*128*/) {
26425 delta = dis_AESKEYGENASSIST( vbi, pfx, delta, True/*!isAvx*/ );
26480 /* pfx holds the summary of prefixes. */
26481 Prefix pfx = PFX_EMPTY;
26558 /* Eat prefixes, summarising the result in pfx and sz, and rejecting
26565 case 0x66: pfx |= PFX_66; break;
26566 case 0x67: pfx |= PFX_ASO; break;
26567 case 0xF2: pfx |= PFX_F2; break;
26568 case 0xF3: pfx |= PFX_F3; break;
26569 case 0xF0: pfx |= PFX_LOCK; *expect_CAS = True; break;
26570 case 0x2E: pfx |= PFX_CS; break;
26571 case 0x3E: pfx |= PFX_DS; break;
26572 case 0x26: pfx |= PFX_ES; break;
26573 case 0x64: pfx |= PFX_FS; break;
26574 case 0x65: pfx |= PFX_GS; break;
26575 case 0x36: pfx |= PFX_SS; break;
26577 pfx |= PFX_REX;
26578 if (pre & (1<<3)) pfx |= PFX_REXW;
26579 if (pre & (1<<2)) pfx |= PFX_REXR;
26580 if (pre & (1<<1)) pfx |= PFX_REXX;
26581 if (pre & (1<<0)) pfx |= PFX_REXB;
26601 pfx |= PFX_VEX;
26603 /* R */ pfx |= (vex1 & (1<<7)) ? 0 : PFX_REXR;
26604 /* X */ pfx |= (vex1 & (1<<6)) ? 0 : PFX_REXX;
26605 /* B */ pfx |= (vex1 & (1<<5)) ? 0 : PFX_REXB;
26615 /* W */ pfx |= (vex2 & (1<<7)) ? PFX_REXW : 0;
26616 /* ~v3 */ pfx |= (vex2 & (1<<6)) ? 0 : PFX_VEXnV3;
26617 /* ~v2 */ pfx |= (vex2 & (1<<5)) ? 0 : PFX_VEXnV2;
26618 /* ~v1 */ pfx |= (vex2 & (1<<4)) ? 0 : PFX_VEXnV1;
26619 /* ~v0 */ pfx |= (vex2 & (1<<3)) ? 0 : PFX_VEXnV0;
26620 /* L */ pfx |= (vex2 & (1<<2)) ? PFX_VEXL : 0;
26624 case 1: pfx |= PFX_66; break;
26625 case 2: pfx |= PFX_F3; break;
26626 case 3: pfx |= PFX_F2; break;
26634 pfx |= PFX_VEX;
26636 /* R */ pfx |= (vex1 & (1<<7)) ? 0 : PFX_REXR;
26637 /* ~v3 */ pfx |= (vex1 & (1<<6)) ? 0 : PFX_VEXnV3;
26638 /* ~v2 */ pfx |= (vex1 & (1<<5)) ? 0 : PFX_VEXnV2;
26639 /* ~v1 */ pfx |= (vex1 & (1<<4)) ? 0 : PFX_VEXnV1;
26640 /* ~v0 */ pfx |= (vex1 & (1<<3)) ? 0 : PFX_VEXnV0;
26641 /* L */ pfx |= (vex1 & (1<<2)) ? PFX_VEXL : 0;
26645 case 1: pfx |= PFX_66; break;
26646 case 2: pfx |= PFX_F3; break;
26647 case 3: pfx |= PFX_F2; break;
26654 if ((pfx & PFX_VEX) && (pfx & PFX_REX))
26660 if (pfx & PFX_F2) n++;
26661 if (pfx & PFX_F3) n++;
26666 if (pfx & PFX_CS) n++;
26667 if (pfx & PFX_DS) n++;
26668 if (pfx & PFX_ES) n++;
26669 if (pfx & PFX_FS) n++;
26670 if (pfx & PFX_GS) n++;
26671 if (pfx & PFX_SS) n++;
26677 if ((pfx & PFX_FS) && !vbi->guest_amd64_assume_fs_is_zero)
26681 if ((pfx & PFX_GS) && !vbi->guest_amd64_assume_gs_is_0x60)
26686 if (pfx & PFX_66) sz = 2;
26687 if ((pfx & PFX_REX) && (pfx & PFX_REXW)) sz = 8;
26692 if (pfx & PFX_LOCK) {
26703 if (!(pfx & PFX_VEX)) {
26721 if (!(pfx & PFX_VEX)) {
26730 archinfo, vbi, pfx, sz, delta );
26735 archinfo, vbi, pfx, sz, delta );
26740 archinfo, vbi, pfx, sz, delta );
26745 archinfo, vbi, pfx, sz, delta );
26761 archinfo, vbi, pfx, sz, delta );
26767 archinfo, vbi, pfx, sz, delta );
26773 archinfo, vbi, pfx, sz, delta );
26785 if (getVexNvvvv(pfx) != 0)
26877 if (have66orF2orF3(pfx)) goto decode_failure;
26976 delta = dis_xadd_G_E ( &decode_OK, vbi, pfx, 1, delta );
27009 haveREX(pfx) ? 1 : 0, getRexW(pfx), getRexR(pfx),
27010 getRexX(pfx), getRexB(pfx));
27012 haveVEX(pfx) ? 1 : 0, getVexL(pfx),
27013 getVexNvvvv(pfx),
27018 vex_printf("vex amd64->IR: PFX.66=%d PFX.F2=%d PFX.F3=%d\n",
27019 have66(pfx) ? 1 : 0, haveF2(pfx) ? 1 : 0,
27020 haveF3(pfx) ? 1 : 0);