Home | History | Annotate | Download | only in priv

Lines Matching refs:modrm

507 /* Figure out whether the mod and rm parts of a modRM byte refer to a
516 /* Extract the 'g' field from a modRM byte. This only produces 3
525 /* Ditto the 'e' field of a modRM byte. */
794 modrm bytes supply the low 3 bits of the register number. The
800 e register field (when the mod part of modrm indicates that modrm's
808 number extracted from the modrm e or g field is treated as an index
1184 /* Functions for getting register numbers from modrm bytes and REX
1188 /* Extract the g reg field from a modRM byte, and augment it using the
1199 /* Extract the e reg field from a modRM byte, and augment it using the
1201 associated with the e register field (when modrm indicates e is a
1217 field in a modrm byte, taking into account REX (or its absence),
1263 field in a modrm byte, taking into account REX (or its absence),
2257 /* Generate IR to calculate an address indicated by a ModRM and
2636 Is passed the a ptr to the modRM byte, the actual operation, and the
2760 Is passed the a ptr to the modRM byte, the actual operation, and the
2896 Is passed the a ptr to the modRM byte, and the data size. Returns
2942 Is passed the a ptr to the modRM byte, and the data size. Returns
3143 Long delta, UChar modrm,
3156 switch (gregLO3ofRM(modrm)) {
3166 if (epartIsReg(modrm)) {
3169 assign(dst0, getIRegE(sz,pfx,modrm));
3172 if (gregLO3ofRM(modrm) == 2 /* ADC */) {
3176 if (gregLO3ofRM(modrm) == 3 /* SBB */) {
3187 if (gregLO3ofRM(modrm) < 7)
3188 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3192 nameGrp1(gregLO3ofRM(modrm)), nameISize(sz), d64,
3193 nameIRegE(sz,pfx,modrm));
3200 if (gregLO3ofRM(modrm) == 2 /* ADC */) {
3211 if (gregLO3ofRM(modrm) == 3 /* SBB */) {
3223 if (gregLO3ofRM(modrm) < 7) {
3240 nameGrp1(gregLO3ofRM(modrm)), nameISize(sz),
3253 Long delta, UChar modrm,
3257 /* delta on entry points at the modrm byte. */
3271 if (epartIsReg(modrm)) {
3272 assign(dst0, getIRegE(sz, pfx, modrm));
3281 switch (gregLO3ofRM(modrm)) { case 4: case 5: case 6: case 7: isShift = True; }
3284 switch (gregLO3ofRM(modrm)) { case 0: case 1: isRotate = True; }
3287 switch (gregLO3ofRM(modrm)) { case 2: case 3: isRotateC = True; }
3303 Bool left = toBool(gregLO3ofRM(modrm) == 2);
3360 switch (gregLO3ofRM(modrm)) {
3413 Bool left = toBool(gregLO3ofRM(modrm) == 0);
3492 if (epartIsReg(modrm)) {
3493 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3496 nameGrp2(gregLO3ofRM(modrm)), nameISize(sz) );
3501 vex_printf(", %s\n", nameIRegE(sz,pfx,modrm));
3507 nameGrp2(gregLO3ofRM(modrm)), nameISize(sz) );
3523 Long delta, UChar modrm,
3528 And delta on entry points at the modrm byte. */
3551 switch (gregLO3ofRM(modrm)) {
3565 if (epartIsReg(modrm)) {
3567 assign( t2, widenUto64(getIRegE(sz, pfx, modrm)) );
3569 DIP("%s%c $0x%llx, %s\n", nameGrp8(gregLO3ofRM(modrm)),
3571 src_val, nameIRegE(sz,pfx,modrm));
3577 DIP("%s%c $0x%llx, %s\n", nameGrp8(gregLO3ofRM(modrm)),
3583 switch (gregLO3ofRM(modrm)) {
3601 if (gregLO3ofRM(modrm) != 4 /* BT */) {
3602 if (epartIsReg(modrm)) {
3603 putIRegE(sz, pfx, modrm, narrowTo(ty, mkexpr(t2m)));
3716 UChar modrm;
3724 modrm = getUChar(delta);
3725 if (epartIsReg(modrm)) {
3726 switch (gregLO3ofRM(modrm)) {
3733 getIRegE(sz,pfx,modrm),
3738 nameIRegE(sz, pfx, modrm));
3746 putIRegE(sz, pfx, modrm,
3748 getIRegE(sz, pfx, modrm)));
3750 nameIRegE(sz, pfx, modrm));
3758 assign(src, getIRegE(sz, pfx, modrm));
3762 putIRegE(sz, pfx, modrm, mkexpr(dst1));
3763 DIP("neg%c %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm));
3768 assign(src, getIRegE(sz,pfx,modrm));
3770 nameIRegE(sz,pfx,modrm) );
3775 assign(src, getIRegE(sz,pfx,modrm));
3777 nameIRegE(sz,pfx,modrm) );
3781 assign( t1, getIRegE(sz, pfx, modrm) );
3784 nameIRegE(sz, pfx, modrm));
3788 assign( t1, getIRegE(sz, pfx, modrm) );
3791 nameIRegE(sz, pfx, modrm));
3801 gregLO3ofRM(modrm)==0/*TEST*/
3808 switch (gregLO3ofRM(modrm)) {
3880 UChar modrm;
3888 modrm = getUChar(delta);
3889 if (epartIsReg(modrm)) {
3890 assign(t1, getIRegE(1, pfx, modrm));
3891 switch (gregLO3ofRM(modrm)) {
3894 putIRegE(1, pfx, modrm, mkexpr(t2));
3899 putIRegE(1, pfx, modrm, mkexpr(t2));
3907 DIP("%sb %s\n", nameGrp4(gregLO3ofRM(modrm)),
3908 nameIRegE(1, pfx, modrm));
3912 switch (gregLO3ofRM(modrm)) {
3938 DIP("%sb %s\n", nameGrp4(gregLO3ofRM(modrm)), dis_buf);
3951 UChar modrm;
3962 modrm = getUChar(delta);
3963 if (epartIsReg(modrm)) {
3964 assign(t1, getIRegE(sz,pfx,modrm));
3965 switch (gregLO3ofRM(modrm)) {
3971 putIRegE(sz,pfx,modrm, mkexpr(t2));
3978 putIRegE(sz,pfx,modrm, mkexpr(t2));
3985 assign(t3, getIRegE(sz,pfx,modrm));
4000 assign(t3, getIRegE(sz,pfx,modrm));
4010 DIP("%s%c %s\n", nameGrp5(gregLO3ofRM(modrm)),
4012 nameIRegE(sz, pfx, modrm));
4015 if (gregLO3ofRM(modrm) != 2 && gregLO3ofRM(modrm) != 4
4016 && gregLO3ofRM(modrm) != 6) {
4019 switch (gregLO3ofRM(modrm)) {
4090 DIP("%s%c %s\n", nameGrp5(gregLO3ofRM(modrm)),
4889 /* On entry, delta points at the second byte of the insn (the modrm
4892 UChar modrm = getUChar(delta+0);
4897 if (modrm < 0xC0) {
4899 /* bits 5,4,3 are an opcode extension, and the modRM also
4904 switch (gregLO3ofRM(modrm)) {
4962 vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
4968 switch (modrm) {
4971 fp_do_op_ST_ST ( "add", Iop_AddF64, modrm - 0xC0, 0, False );
4975 fp_do_op_ST_ST ( "mul", Iop_MulF64, modrm - 0xC8, 0, False );
4980 r_dst = (UInt)modrm - 0xD0;
4995 r_dst = (UInt)modrm - 0xD8;
5010 fp_do_op_ST_ST ( "sub", Iop_SubF64, modrm - 0xE0, 0, False );
5014 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, modrm - 0xE8, 0, False );
5018 fp_do_op_ST_ST ( "div", Iop_DivF64, modrm - 0xF0, 0, False );
5022 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, modrm - 0xF8, 0, False );
5034 if (modrm < 0xC0) {
5036 /* bits 5,4,3 are an opcode extension, and the modRM also
5041 switch (gregLO3ofRM(modrm)) {
5219 vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
5226 switch (modrm) {
5229 r_src = (UInt)modrm - 0xC0;
5238 r_src = (UInt)modrm - 0xC8;
5529 if (modrm < 0xC0) {
5531 /* bits 5,4,3 are an opcode extension, and the modRM also
5536 switch (gregLO3ofRM(modrm)) {
5587 vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
5595 switch (modrm) {
5598 r_src = (UInt)modrm - 0xC0;
5608 r_src = (UInt)modrm - 0xC8;
5618 r_src = (UInt)modrm - 0xD0;
5628 r_src = (UInt)modrm - 0xD8;
5662 if (modrm < 0xC0) {
5664 /* bits 5,4,3 are an opcode extension, and the modRM also
5669 switch (gregLO3ofRM(modrm)) {
5755 vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
5763 switch (modrm) {
5766 r_src = (UInt)modrm - 0xC0;
5776 r_src = (UInt)modrm - 0xC8;
5790 r_src = (UInt)modrm - 0xD0;
5804 r_src = (UInt)modrm - 0xD8;
5862 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xE8, False );
5866 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xF0, False );
5878 if (modrm < 0xC0) {
5880 /* bits 5,4,3 are an opcode extension, and the modRM also
5885 switch (gregLO3ofRM(modrm)) {
5942 vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
5950 switch (modrm) {
5953 fp_do_op_ST_ST ( "add", Iop_AddF64, 0, modrm - 0xC0, False );
5957 fp_do_op_ST_ST ( "mul", Iop_MulF64, 0, modrm - 0xC8, False );
5961 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, 0, modrm - 0xE0, False );
5965 fp_do_op_ST_ST ( "sub", Iop_SubF64, 0, modrm - 0xE8, False );
5969 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, 0, modrm - 0xF0, False );
5973 fp_do_op_ST_ST ( "div", Iop_DivF64, 0, modrm - 0xF8, False );
5987 if (modrm < 0xC0) {
5989 /* bits 5,4,3 are an opcode extension, and the modRM also
5994 switch (gregLO3ofRM(modrm)) {
6132 vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
6138 switch (modrm) {
6141 r_dst = (UInt)modrm - 0xC0;
6147 r_dst = (UInt)modrm - 0xD0;
6156 r_dst = (UInt)modrm - 0xD8;
6166 r_dst = (UInt)modrm - 0xE0;
6180 r_dst = (UInt)modrm - 0xE8;
6204 if (modrm < 0xC0) {
6206 /* bits 5,4,3 are an opcode extension, and the modRM also
6212 switch (gregLO3ofRM(modrm)) {
6265 vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
6273 switch (modrm) {
6276 fp_do_op_ST_ST ( "add", Iop_AddF64, 0, modrm - 0xC0, True );
6280 fp_do_op_ST_ST ( "mul", Iop_MulF64, 0, modrm - 0xC8, True );
6299 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, 0, modrm - 0xE0, True );
6303 fp_do_op_ST_ST ( "sub", Iop_SubF64, 0, modrm - 0xE8, True );
6307 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, 0, modrm - 0xF0, True );
6311 fp_do_op_ST_ST ( "div", Iop_DivF64, 0, modrm - 0xF8, True );
6325 if (modrm < 0xC0) {
6327 /* bits 5,4,3 are an opcode extension, and the modRM also
6332 switch (gregLO3ofRM(modrm)) {
6381 vex_printf("unhandled opc_aux = 0x%2x\n", gregLO3ofRM(modrm));
6389 switch (modrm) {
6417 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xE8, True );
6422 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xF0, True );
6513 UChar modrm = getUChar(delta);
6514 Bool isReg = epartIsReg(modrm);
6603 argG = getMMXReg(gregLO3ofRM(modrm));
6609 argE = getMMXReg(eregLO3ofRM(modrm));
6641 putMMXReg( gregLO3ofRM(modrm), mkexpr(res) );
6645 ( isReg ? nameMMXReg(eregLO3ofRM(modrm)) : dis_buf ),
6646 nameMMXReg(gregLO3ofRM(modrm)) );
6791 UChar modrm;
6804 modrm = getUChar(delta);
6805 if (epartIsReg(modrm)) {
6808 gregLO3ofRM(modrm),
6811 getIReg32(eregOfRexRM(pfx,modrm)) ) );
6813 nameIReg32(eregOfRexRM(pfx,modrm)),
6814 nameMMXReg(gregLO3ofRM(modrm)));
6819 gregLO3ofRM(modrm),
6823 DIP("movd %s, %s\n", dis_buf, nameMMXReg(gregLO3ofRM(modrm)));
6829 modrm = getUChar(delta);
6830 if (epartIsReg(modrm)) {
6832 putMMXReg( gregLO3ofRM(modrm),
6833 getIReg64(eregOfRexRM(pfx,modrm)) );
6835 nameIReg64(eregOfRexRM(pfx,modrm)),
6836 nameMMXReg(gregLO3ofRM(modrm)));
6840 putMMXReg( gregLO3ofRM(modrm),
6842 DIP("movd{64} %s, %s\n", dis_buf, nameMMXReg(gregLO3ofRM(modrm)));
6853 modrm = getUChar(delta);
6854 if (epartIsReg(modrm)) {
6856 putIReg32( eregOfRexRM(pfx,modrm),
6857 unop(Iop_64to32, getMMXReg(gregLO3ofRM(modrm)) ) );
6859 nameMMXReg(gregLO3ofRM(modrm)),
6860 nameIReg32(eregOfRexRM(pfx,modrm)));
6865 unop(Iop_64to32, getMMXReg(gregLO3ofRM(modrm)) ) );
6866 DIP("movd %s, %s\n", nameMMXReg(gregLO3ofRM(modrm)), dis_buf);
6872 modrm = getUChar(delta);
6873 if (epartIsReg(modrm)) {
6875 putIReg64( eregOfRexRM(pfx,modrm),
6876 getMMXReg(gregLO3ofRM(modrm)) );
6878 nameMMXReg(gregLO3ofRM(modrm)),
6879 nameIReg64(eregOfRexRM(pfx,modrm)));
6884 getMMXReg(gregLO3ofRM(modrm)) );
6885 DIP("movd{64} %s, %s\n", nameMMXReg(gregLO3ofRM(modrm)), dis_buf);
6897 modrm = getUChar(delta);
6898 if (epartIsReg(modrm)) {
6900 putMMXReg( gregLO3ofRM(modrm), getMMXReg(eregLO3ofRM(modrm)) );
6902 nameMMXReg(eregLO3ofRM(modrm)),
6903 nameMMXReg(gregLO3ofRM(modrm)));
6907 putMMXReg( gregLO3ofRM(modrm), loadLE(Ity_I64, mkexpr(addr)) );
6909 dis_buf, nameMMXReg(gregLO3ofRM(modrm)));
6918 modrm = getUChar(delta);
6919 if (epartIsReg(modrm)) {
6926 storeLE( mkexpr(addr), getMMXReg(gregLO3ofRM(modrm)) );
6928 nameMMXReg(gregLO3ofRM(modrm)), dis_buf);
7137 modrm = getUChar(delta);
7138 if (sz != 4 || (!epartIsReg(modrm)))
7143 assign( regM, getMMXReg( eregLO3ofRM(modrm) ));
7144 assign( regD, getMMXReg( gregLO3ofRM(modrm) ));
7156 DIP("maskmovq %s,%s\n", nameMMXReg( eregLO3ofRM(modrm) ),
7157 nameMMXReg( gregLO3ofRM(modrm) ) );
7225 Long delta, UChar modrm,
7233 for printing it. And eip on entry points at the modrm byte. */
7266 assign( gsrc, getIRegG(sz, pfx, modrm) );
7268 if (epartIsReg(modrm)) {
7270 assign( esrc, getIRegE(sz, pfx, modrm) );
7274 nameIRegG(sz, pfx, modrm), nameIRegE(sz, pfx, modrm));
7284 nameIRegG(sz, pfx, modrm), dis_buf);
7379 if (epartIsReg(modrm)) {
7380 putIRegE(sz, pfx, modrm, mkexpr(resTy));
7412 UChar modrm;
7429 modrm = getUChar(delta);
7431 assign( t_bitno0, widenSto64(getIRegG(sz, pfx, modrm)) );
7433 if (epartIsReg(modrm)) {
7456 storeLE( mkexpr(t_rsp), getIRegE(sz, pfx, modrm) );
7519 if ((pfx & PFX_LOCK) && !epartIsReg(modrm)) {
7545 if (epartIsReg(modrm)) {
7551 putIRegE(sz, pfx, modrm, loadLE(szToITy(sz), mkexpr(t_rsp)) );
7556 nameBtOp(op), nameISize(sz), nameIRegG(sz, pfx, modrm),
7557 ( epartIsReg(modrm) ? nameIRegE(sz, pfx, modrm) : dis_buf ) );
7570 UChar modrm;
7582 modrm = getUChar(delta);
7583 isReg = epartIsReg(modrm);
7586 assign( src, getIRegE(sz, pfx, modrm) );
7596 ( isReg ? nameIRegE(sz, pfx, modrm) : dis_buf ),
7597 nameIRegG(sz, pfx, modrm));
7657 widenUto64( getIRegG( sz, pfx, modrm ) ),
7675 putIRegG( sz, pfx, modrm, mkexpr(dst) );
9067 UChar opc, modrm, abyte, pre;
9271 modrm = getUChar(delta+2);
9272 vassert(!epartIsReg(modrm));
9344 modrm = getUChar(delta+2);
9345 vassert(!epartIsReg(modrm));
9463 modrm = getUChar(delta+2);
9464 if (epartIsReg(modrm)) {
9465 assign( argR, getXMMRegLane32F( eregOfRexRM(pfx,modrm),
9469 nameXMMReg(eregOfRexRM(pfx,modrm)),
9470 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9477 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9479 assign( argL, getXMMRegLane32F( gregOfRexRM(pfx,modrm),
9504 modrm = getUChar(delta+2);
9506 if (epartIsReg(modrm)) {
9507 assign( arg64, getMMXReg(eregLO3ofRM(modrm)) );
9509 DIP("cvtpi2ps %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
9510 nameXMMReg(gregOfRexRM(pfx,modrm)));
9516 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9522 gregOfRexRM(pfx,modrm), 0,
9529 gregOfRexRM(pfx,modrm), 1,
9546 modrm = getUChar(delta+2);
9550 if (epartIsReg(modrm)) {
9551 assign( arg32, getIReg32(eregOfRexRM(pfx,modrm)) );
9553 DIP("cvtsi2ss %s,%s\n", nameIReg32(eregOfRexRM(pfx,modrm)),
9554 nameXMMReg(gregOfRexRM(pfx,modrm)));
9560 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9563 gregOfRexRM(pfx,modrm), 0,
9570 if (epartIsReg(modrm)) {
9571 assign( arg64, getIReg64(eregOfRexRM(pfx,modrm)) );
9573 DIP("cvtsi2ssq %s,%s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
9574 nameXMMReg(gregOfRexRM(pfx,modrm)));
9580 nameXMMReg(gregOfRexRM(pfx,modrm)) );
9583 gregOfRexRM(pfx,modrm), 0,
9605 modrm = getUChar(delta+2);
9607 if (epartIsReg(modrm)) {
9609 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
9610 assign(f32hi, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 1));
9612 nameXMMReg(eregOfRexRM(pfx,modrm)),
9613 nameMMXReg(gregLO3ofRM(modrm)));
9623 nameMMXReg(gregLO3ofRM(modrm)));
9644 putMMXReg(gregLO3ofRM(modrm), mkexpr(dst64));
9668 modrm = getUChar(delta+2);
9669 if (epartIsReg(modrm)) {
9671 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
9673 nameXMMReg(eregOfRexRM(pfx,modrm)),
9674 nameIReg(sz, gregOfRexRM(pfx,modrm), False));
9681 nameIReg(sz, gregOfRexRM(pfx,modrm), False));
9691 putIReg32( gregOfRexRM(pfx,modrm),
9696 putIReg64( gregOfRexRM(pfx,modrm),
9812 modrm = getUChar(delta+2);
9813 if (epartIsReg(modrm)) {
9814 putXMMReg( gregOfRexRM(pfx,modrm),
9815 getXMMReg( eregOfRexRM(pfx,modrm) ));
9816 DIP("mov[ua]ps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
9817 nameXMMReg(gregOfRexRM(pfx,modrm)));
9823 putXMMReg( gregOfRexRM(pfx,modrm),
9826 nameXMMReg(gregOfRexRM(pfx,modrm)));
9837 modrm = getUChar(delta+2);
9838 if (epartIsReg(modrm)) {
9844 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
9845 DIP("mov[ua]ps %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
9857 modrm = getUChar(delta+2);
9858 if (epartIsReg(modrm)) {
9860 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
9861 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ) );
9862 DIP("movhps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
9863 nameXMMReg(gregOfRexRM(pfx,modrm)));
9867 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
9870 nameXMMReg( gregOfRexRM(pfx,modrm) ));
9898 modrm = getUChar(delta+2);
9899 if (epartIsReg(modrm)) {
9901 putXMMRegLane64( gregOfRexRM(pfx,modrm),
9903 getXMMRegLane64( eregOfRexRM(pfx,modrm), 1 ));
9904 DIP("movhlps %s, %s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
9905 nameXMMReg(gregOfRexRM(pfx,modrm)));
9909 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0/*lower lane*/,
9912 dis_buf, nameXMMReg( gregOfRexRM(pfx,modrm) ));
9957 modrm = getUChar(delta+2);
9958 if (epartIsReg(modrm)) {
9965 src = eregOfRexRM(pfx,modrm);
9978 putIReg32( gregOfRexRM(pfx,modrm),
9985 nameIReg32(gregOfRexRM(pfx,modrm)));
9997 modrm = getUChar(delta+2);
9998 if (!epartIsReg(modrm)) {
10001 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
10004 nameXMMReg(gregOfRexRM(pfx,modrm)));
10019 modrm = getUChar(delta+2);
10020 if (!epartIsReg(modrm)) {
10023 storeLE( mkexpr(addr), getMMXReg(gregLO3ofRM(modrm)) );
10025 nameMMXReg(gregLO3ofRM(modrm)));
10037 modrm = getUChar(delta+2);
10038 if (epartIsReg(modrm)) {
10039 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0,
10040 getXMMRegLane32( eregOfRexRM(pfx,modrm), 0 ));
10041 DIP("movss %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10042 nameXMMReg(gregOfRexRM(pfx,modrm)));
10046 putXMMReg( gregOfRexRM(pfx,modrm), mkV128(0) );
10047 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0,
10050 nameXMMReg(gregOfRexRM(pfx,modrm)));
10060 modrm = getUChar(delta+2);
10061 if (epartIsReg(modrm)) {
10066 getXMMRegLane32(gregOfRexRM(pfx,modrm), 0) );
10067 DIP("movss %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
10120 modrm = insn[2];
10121 if (epartIsReg(modrm)) {
10125 assign(sV, getMMXReg(eregLO3ofRM(modrm)));
10135 putIReg64(gregOfRexRM(pfx,modrm), unop(Iop_16Uto64, mkexpr(t5)));
10137 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_16Uto32, mkexpr(t5)));
10139 (Int)insn[3], nameMMXReg(eregLO3ofRM(modrm)),
10140 sz==8 ? nameIReg64(gregOfRexRM(pfx,modrm))
10141 : nameIReg32(gregOfRexRM(pfx,modrm))
10165 modrm = insn[2];
10168 assign(t5, getMMXReg(gregLO3ofRM(modrm)));
10171 if (epartIsReg(modrm)) {
10172 assign(t4, getIReg16(eregOfRexRM(pfx,modrm)));
10176 nameIReg16(eregOfRexRM(pfx,modrm)),
10177 nameMMXReg(gregLO3ofRM(modrm)));
10185 nameMMXReg(gregLO3ofRM(modrm)));
10195 putMMXReg(gregLO3ofRM(modrm), mkexpr(t6));
10245 modrm = insn[2];
10246 if (epartIsReg(modrm)) {
10250 assign(t0, getMMXReg(eregLO3ofRM(modrm)));
10256 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_64to32,mkexpr(t1)));
10257 DIP("pmovmskb %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
10258 nameIReg32(gregOfRexRM(pfx,modrm)));
10285 modrm = getUChar(delta+2);
10286 vassert(!epartIsReg(modrm));
10291 switch (gregLO3ofRM(modrm)) {
10323 modrm = insn[2];
10324 if (epartIsReg(modrm)) {
10325 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
10329 nameMMXReg(eregLO3ofRM(modrm)),
10330 nameMMXReg(gregLO3ofRM(modrm)));
10339 nameMMXReg(gregLO3ofRM(modrm)));
10348 putMMXReg(gregLO3ofRM(modrm), mkexpr(dV));
10407 modrm = insn[2];
10408 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
10410 if (epartIsReg(modrm)) {
10411 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10415 nameXMMReg(eregOfRexRM(pfx,modrm)),
10416 nameXMMReg(gregOfRexRM(pfx,modrm)));
10425 nameXMMReg(gregOfRexRM(pfx,modrm)));
10435 gregOfRexRM(pfx,modrm),
10514 modrm = insn[2];
10515 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
10517 if (epartIsReg(modrm)) {
10518 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10521 nameXMMReg(eregOfRexRM(pfx,modrm)),
10522 nameXMMReg(gregOfRexRM(pfx,modrm)));
10529 nameXMMReg(gregOfRexRM(pfx,modrm)));
10536 putXMMReg( gregOfRexRM(pfx,modrm), mk128from32s( s3, d3, s2, d2 ) );
10538 putXMMReg( gregOfRexRM(pfx,modrm), mk128from32s( s1, d1, s0, d0 ) );
10609 modrm = getUChar(delta+2);
10610 if (epartIsReg(modrm)) {
10611 assign( argR, getXMMRegLane64F( eregOfRexRM(pfx,modrm),
10615 nameXMMReg(eregOfRexRM(pfx,modrm)),
10616 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10623 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10625 assign( argL, getXMMRegLane64F( gregOfRexRM(pfx,modrm),
10647 modrm = getUChar(delta+2);
10648 if (epartIsReg(modrm)) {
10649 assign( arg64, getXMMRegLane64(eregOfRexRM(pfx,modrm), 0) );
10651 DIP("cvtdq2pd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10652 nameXMMReg(gregOfRexRM(pfx,modrm)));
10658 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10662 gregOfRexRM(pfx,modrm), 0,
10667 gregOfRexRM(pfx,modrm), 1,
10681 modrm = getUChar(delta+2);
10682 if (epartIsReg(modrm)) {
10683 assign( argV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10685 DIP("cvtdq2ps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10686 nameXMMReg(gregOfRexRM(pfx,modrm)));
10692 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10702 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 3, CVT(t3) );
10703 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 2, CVT(t2) );
10704 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 1, CVT(t1) );
10705 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 0, CVT(t0) );
10725 modrm = getUChar(delta+2);
10726 if (epartIsReg(modrm)) {
10727 assign( argV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10730 nameXMMReg(eregOfRexRM(pfx,modrm)),
10731 nameXMMReg(gregOfRexRM(pfx,modrm)));
10738 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10758 putXMMRegLane32( gregOfRexRM(pfx,modrm), 3, mkU32(0) );
10759 putXMMRegLane32( gregOfRexRM(pfx,modrm), 2, mkU32(0) );
10760 putXMMRegLane32( gregOfRexRM(pfx,modrm), 1, CVT(t1) );
10761 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0, CVT(t0) );
10781 modrm = getUChar(delta+2);
10783 if (epartIsReg(modrm)) {
10785 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
10786 assign(f64hi, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 1));
10788 nameXMMReg(eregOfRexRM(pfx,modrm)),
10789 nameMMXReg(gregLO3ofRM(modrm)));
10799 nameMMXReg(gregLO3ofRM(modrm)));
10816 putMMXReg(gregLO3ofRM(modrm), mkexpr(dst64));
10831 modrm = getUChar(delta+2);
10832 if (epartIsReg(modrm)) {
10833 assign( argV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10835 DIP("cvtpd2ps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10836 nameXMMReg(gregOfRexRM(pfx,modrm)));
10842 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10857 putXMMRegLane32( gregOfRexRM(pfx,modrm), 3, mkU32(0) );
10858 putXMMRegLane32( gregOfRexRM(pfx,modrm), 2, mkU32(0) );
10859 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 1, CVT(t1) );
10860 putXMMRegLane32F( gregOfRexRM(pfx,modrm), 0, CVT(t0) );
10873 modrm = getUChar(delta+2);
10874 if (epartIsReg(modrm)) {
10882 assign( arg64, getMMXReg(eregLO3ofRM(modrm)) );
10884 DIP("cvtpi2pd %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
10885 nameXMMReg(gregOfRexRM(pfx,modrm)));
10891 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10895 gregOfRexRM(pfx,modrm), 0,
10900 gregOfRexRM(pfx,modrm), 1,
10919 modrm = getUChar(delta+2);
10920 if (epartIsReg(modrm)) {
10921 assign( argV, getXMMReg(eregOfRexRM(pfx,modrm)) );
10923 DIP("cvtps2dq %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10924 nameXMMReg(gregOfRexRM(pfx,modrm)));
10930 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10949 putXMMRegLane32( gregOfRexRM(pfx,modrm), 3, CVT(t3) );
10950 putXMMRegLane32( gregOfRexRM(pfx,modrm), 2, CVT(t2) );
10951 putXMMRegLane32( gregOfRexRM(pfx,modrm), 1, CVT(t1) );
10952 putXMMRegLane32( gregOfRexRM(pfx,modrm), 0, CVT(t0) );
10966 modrm = getUChar(delta+2);
10967 if (epartIsReg(modrm)) {
10968 assign( f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0) );
10969 assign( f32hi, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 1) );
10971 DIP("cvtps2pd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
10972 nameXMMReg(gregOfRexRM(pfx,modrm)));
10980 nameXMMReg(gregOfRexRM(pfx,modrm)) );
10983 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 1,
10985 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 0,
11011 modrm = getUChar(delta+2);
11012 if (epartIsReg(modrm)) {
11014 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
11016 nameXMMReg(eregOfRexRM(pfx,modrm)),
11017 nameIReg(sz, gregOfRexRM(pfx,modrm), False));
11024 nameIReg(sz, gregOfRexRM(pfx,modrm), False));
11034 putIReg32( gregOfRexRM(pfx,modrm),
11037 putIReg64( gregOfRexRM(pfx,modrm),
11052 modrm = getUChar(delta+2);
11053 if (epartIsReg(modrm)) {
11055 assign(f64lo, getXMMRegLane64F(eregOfRexRM(pfx,modrm), 0));
11056 DIP("cvtsd2ss %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11057 nameXMMReg(gregOfRexRM(pfx,modrm)));
11063 nameXMMReg(gregOfRexRM(pfx,modrm)));
11068 gregOfRexRM(pfx,modrm), 0,
11081 modrm = getUChar(delta+2);
11085 if (epartIsReg(modrm)) {
11086 assign( arg32, getIReg32(eregOfRexRM(pfx,modrm)) );
11088 modrm)),
11089 nameXMMReg(gregOfRexRM(pfx,modrm)));
11095 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11097 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 0,
11103 if (epartIsReg(modrm)) {
11104 assign( arg64, getIReg64(eregOfRexRM(pfx,modrm)) );
11106 DIP("cvtsi2sdq %s,%s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
11107 nameXMMReg(gregOfRexRM(pfx,modrm)));
11113 nameXMMReg(gregOfRexRM(pfx,modrm)) );
11116 gregOfRexRM(pfx,modrm),
11135 modrm = getUChar(delta+2);
11136 if (epartIsReg(modrm)) {
11138 assign(f32lo, getXMMRegLane32F(eregOfRexRM(pfx,modrm), 0));
11139 DIP("cvtss2sd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11140 nameXMMReg(gregOfRexRM(pfx,modrm)));
11146 nameXMMReg(gregOfRexRM(pfx,modrm)));
11149 putXMMRegLane64F( gregOfRexRM(pfx,modrm), 0,
11220 modrm = getUChar(delta+2);
11221 if (epartIsReg(modrm)) {
11222 putXMMReg( gregOfRexRM(pfx,modrm),
11223 getXMMReg( eregOfRexRM(pfx,modrm) ));
11224 DIP("mov%s %s,%s\n", wot, nameXMMReg(eregOfRexRM(pfx,modrm)),
11225 nameXMMReg(gregOfRexRM(pfx,modrm)));
11231 putXMMReg( gregOfRexRM(pfx,modrm),
11234 nameXMMReg(gregOfRexRM(pfx,modrm)));
11245 modrm = getUChar(delta+2);
11246 if (epartIsReg(modrm)) {
11247 putXMMReg( eregOfRexRM(pfx,modrm),
11248 getXMMReg( gregOfRexRM(pfx,modrm) ) );
11249 DIP("mov%s %s,%s\n", wot, nameXMMReg(gregOfRexRM(pfx,modrm)),
11250 nameXMMReg(eregOfRexRM(pfx,modrm)));
11256 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11257 DIP("mov%s %s,%s\n", wot, nameXMMReg(gregOfRexRM(pfx,modrm)),
11269 modrm = getUChar(delta+2);
11270 if (epartIsReg(modrm)) {
11274 gregOfRexRM(pfx,modrm),
11275 unop( Iop_32UtoV128, getIReg32(eregOfRexRM(pfx,modrm)) )
11277 DIP("movd %s, %s\n", nameIReg32(eregOfRexRM(pfx,modrm)),
11278 nameXMMReg(gregOfRexRM(pfx,modrm)));
11281 gregOfRexRM(pfx,modrm),
11282 unop( Iop_64UtoV128, getIReg64(eregOfRexRM(pfx,modrm)) )
11284 DIP("movq %s, %s\n", nameIReg64(eregOfRexRM(pfx,modrm)),
11285 nameXMMReg(gregOfRexRM(pfx,modrm)));
11291 gregOfRexRM(pfx,modrm),
11297 nameXMMReg(gregOfRexRM(pfx,modrm)));
11307 modrm = getUChar(delta+2);
11308 if (epartIsReg(modrm)) {
11311 putIReg32( eregOfRexRM(pfx,modrm),
11312 getXMMRegLane32(gregOfRexRM(pfx,modrm), 0) );
11313 DIP("movd %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11314 nameIReg32(eregOfRexRM(pfx,modrm)));
11316 putIReg64( eregOfRexRM(pfx,modrm),
11317 getXMMRegLane64(gregOfRexRM(pfx,modrm), 0) );
11318 DIP("movq %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11319 nameIReg64(eregOfRexRM(pfx,modrm)));
11326 ? getXMMRegLane32(gregOfRexRM(pfx,modrm),0)
11327 : getXMMRegLane64(gregOfRexRM(pfx,modrm),0) );
11329 nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
11337 modrm = getUChar(delta+2);
11338 if (epartIsReg(modrm)) {
11340 putXMMReg( eregOfRexRM(pfx,modrm),
11341 getXMMReg(gregOfRexRM(pfx,modrm)) );
11342 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11343 nameXMMReg(eregOfRexRM(pfx,modrm)));
11348 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11349 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
11357 modrm = getUChar(delta+2);
11358 if (epartIsReg(modrm)) {
11359 putXMMReg( gregOfRexRM(pfx,modrm),
11360 getXMMReg( eregOfRexRM(pfx,modrm) ));
11361 DIP("movdqu %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11362 nameXMMReg(gregOfRexRM(pfx,modrm)));
11366 putXMMReg( gregOfRexRM(pfx,modrm),
11369 nameXMMReg(gregOfRexRM(pfx,modrm)));
11378 modrm = getUChar(delta+2);
11379 if (epartIsReg(modrm)) {
11382 putXMMReg( eregOfRexRM(pfx,modrm),
11383 getXMMReg(gregOfRexRM(pfx,modrm)) );
11384 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11385 nameXMMReg(eregOfRexRM(pfx,modrm)));
11389 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11390 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf);
11398 modrm = getUChar(delta+2);
11399 if (epartIsReg(modrm)) {
11401 putMMXReg( gregLO3ofRM(modrm),
11402 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ));
11403 DIP("movdq2q %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11404 nameMMXReg(gregLO3ofRM(modrm)));
11417 modrm = getUChar(delta+2);
11418 if (epartIsReg(modrm)) {
11423 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1/*upper lane*/,
11426 nameXMMReg( gregOfRexRM(pfx,modrm) ));
11451 modrm = getUChar(delta+2);
11452 if (epartIsReg(modrm)) {
11457 putXMMRegLane64( gregOfRexRM(pfx,modrm),
11461 dis_buf, nameXMMReg( gregOfRexRM(pfx,modrm) ));
11469 modrm = getUChar(delta+2);
11470 if (!epartIsReg(modrm)) {
11474 getXMMRegLane64( gregOfRexRM(pfx,modrm),
11476 DIP("movlpd %s, %s\n", nameXMMReg( gregOfRexRM(pfx,modrm) ),
11492 modrm = getUChar(delta+2);
11493 if (epartIsReg(modrm)) {
11498 src = eregOfRexRM(pfx,modrm);
11505 putIReg32( gregOfRexRM(pfx,modrm),
11509 nameIReg32(gregOfRexRM(pfx,modrm)));
11519 modrm = getUChar(delta+2);
11520 if (epartIsReg(modrm)) {
11528 assign( regD, getXMMReg( gregOfRexRM(pfx,modrm) ));
11537 getXMMRegLane64( eregOfRexRM(pfx,modrm), 1 ),
11540 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ),
11554 DIP("maskmovdqu %s,%s\n", nameXMMReg( eregOfRexRM(pfx,modrm) ),
11555 nameXMMReg( gregOfRexRM(pfx,modrm) ) );
11564 modrm = getUChar(delta+2);
11565 if (!epartIsReg(modrm)) {
11568 storeLE( mkexpr(addr), getXMMReg(gregOfRexRM(pfx,modrm)) );
11570 nameXMMReg(gregOfRexRM(pfx,modrm)));
11582 modrm = getUChar(delta+2);
11583 if (!epartIsReg(modrm)) {
11585 storeLE( mkexpr(addr), getIRegG(sz, pfx, modrm) );
11587 nameIRegG(sz, pfx, modrm));
11599 modrm = getUChar(delta+2);
11600 if (epartIsReg(modrm)) {
11606 getXMMRegLane64( gregOfRexRM(pfx,modrm), 0 ));
11607 DIP("movq %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)), dis_buf );
11617 modrm = getUChar(delta+2);
11618 if (epartIsReg(modrm)) {
11620 putXMMReg( gregOfRexRM(pfx,modrm),
11621 unop(Iop_64UtoV128, getMMXReg( eregLO3ofRM(modrm) )) );
11622 DIP("movq2dq %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
11623 nameXMMReg(gregOfRexRM(pfx,modrm)));
11645 modrm = getUChar(delta+2);
11646 if (epartIsReg(modrm)) {
11647 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
11648 getXMMRegLane64( eregOfRexRM(pfx,modrm), 0 ));
11651 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1, mkU64(0) );
11653 DIP("movsd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
11654 nameXMMReg(gregOfRexRM(pfx,modrm)));
11658 putXMMReg( gregOfRexRM(pfx,modrm), mkV128(0) );
11659 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0,
11662 nameXMMReg(gregOfRexRM(pfx,modrm)));
11673 modrm = getUChar(delta+2);
11674 if (epartIsReg(modrm)) {
11675 putXMMRegLane64( eregOfRexRM(pfx,modrm), 0,
11676 getXMMRegLane64( gregOfRexRM(pfx,modrm), 0 ));
11677 DIP("movsd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11678 nameXMMReg(eregOfRexRM(pfx,modrm)));
11683 getXMMRegLane64(gregOfRexRM(pfx,modrm), 0) );
11684 DIP("movsd %s,%s\n", nameXMMReg(gregOfRexRM(pfx,modrm)),
11725 modrm = insn[2];
11726 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
11728 if (epartIsReg(modrm)) {
11729 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
11733 nameXMMReg(eregOfRexRM(pfx,modrm)),
11734 nameXMMReg(gregOfRexRM(pfx,modrm)));
11742 nameXMMReg(gregOfRexRM(pfx,modrm)));
11754 gregOfRexRM(pfx,modrm),
11809 modrm = insn[2];
11810 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
11812 if (epartIsReg(modrm)) {
11813 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
11816 nameXMMReg(eregOfRexRM(pfx,modrm)),
11817 nameXMMReg(gregOfRexRM(pfx,modrm)));
11824 nameXMMReg(gregOfRexRM(pfx,modrm)));
11833 putXMMReg( gregOfRexRM(pfx,modrm),
11836 putXMMReg( gregOfRexRM(pfx,modrm),
12034 modrm = insn[2];
12035 if (epartIsReg(modrm)) {
12038 assign(t5, getXMMReg(eregOfRexRM(pfx,modrm)));
12051 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_16Uto32, mkexpr(t4)));
12053 (Int)insn[3], nameXMMReg(eregOfRexRM(pfx,modrm)),
12054 nameIReg32(gregOfRexRM(pfx,modrm)));
12070 modrm = insn[2];
12072 if (epartIsReg(modrm)) {
12073 assign(t4, getIReg16(eregOfRexRM(pfx,modrm)));
12077 nameIReg16(eregOfRexRM(pfx,modrm)),
12078 nameXMMReg(gregOfRexRM(pfx,modrm)));
12087 nameXMMReg(gregOfRexRM(pfx,modrm)));
12090 putXMMRegLane16( gregOfRexRM(pfx,modrm), lane & 7, mkexpr(t4) );
12107 modrm = insn[2];
12108 if (epartIsReg(modrm)) {
12109 assign( s1V, getXMMReg(eregOfRexRM(pfx,modrm)) );
12111 DIP("pmaddwd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12112 nameXMMReg(gregOfRexRM(pfx,modrm)));
12118 nameXMMReg(gregOfRexRM(pfx,modrm)));
12120 assign( s2V, getXMMReg(gregOfRexRM(pfx,modrm)) );
12138 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12182 modrm = insn[2];
12183 if (epartIsReg(modrm)) {
12186 assign(t0, getXMMRegLane64(eregOfRexRM(pfx,modrm), 0));
12187 assign(t1, getXMMRegLane64(eregOfRexRM(pfx,modrm), 1));
12194 putIReg32(gregOfRexRM(pfx,modrm), unop(Iop_64to32,mkexpr(t5)));
12195 DIP("pmovmskb %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12196 nameIReg32(gregOfRexRM(pfx,modrm)));
12236 modrm = insn[2];
12239 assign( dV, getMMXReg(gregLO3ofRM(modrm)) );
12241 if (epartIsReg(modrm)) {
12242 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
12244 DIP("pmuludq %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
12245 nameMMXReg(gregLO3ofRM(modrm)));
12251 nameMMXReg(gregLO3ofRM(modrm)));
12256 putMMXReg( gregLO3ofRM(modrm),
12275 modrm = insn[2];
12276 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
12278 if (epartIsReg(modrm)) {
12279 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
12281 DIP("pmuludq %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12282 nameXMMReg(gregOfRexRM(pfx,modrm)));
12288 nameXMMReg(gregOfRexRM(pfx,modrm)));
12295 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0, mkexpr(t0) );
12297 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1, mkexpr(t1) );
12321 modrm = insn[2];
12322 if (epartIsReg(modrm)) {
12323 assign( s1V, getXMMReg(eregOfRexRM(pfx,modrm)) );
12325 DIP("psadbw %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12326 nameXMMReg(gregOfRexRM(pfx,modrm)));
12332 nameXMMReg(gregOfRexRM(pfx,modrm)));
12334 assign( s2V, getXMMReg(gregOfRexRM(pfx,modrm)) );
12352 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12364 modrm = insn[2];
12365 if (epartIsReg(modrm)) {
12366 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
12370 nameXMMReg(eregOfRexRM(pfx,modrm)),
12371 nameXMMReg(gregOfRexRM(pfx,modrm)));
12380 nameXMMReg(gregOfRexRM(pfx,modrm)));
12390 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12406 modrm = insn[2];
12407 if (epartIsReg(modrm)) {
12408 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
12412 nameXMMReg(eregOfRexRM(pfx,modrm)),
12413 nameXMMReg(gregOfRexRM(pfx,modrm)));
12422 nameXMMReg(gregOfRexRM(pfx,modrm)));
12436 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12452 modrm = insn[2];
12453 if (epartIsReg(modrm)) {
12454 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
12458 nameXMMReg(eregOfRexRM(pfx,modrm)),
12459 nameXMMReg(gregOfRexRM(pfx,modrm)));
12468 nameXMMReg(gregOfRexRM(pfx,modrm)));
12482 putXMMReg(gregOfRexRM(pfx,modrm), mkexpr(dV));
12961 modrm = insn[2];
12962 if (epartIsReg(modrm)) {
12963 assign( sV, getXMMReg( eregOfRexRM(pfx,modrm)) );
12965 nameXMMReg(eregOfRexRM(pfx,modrm)),
12966 nameXMMReg(gregOfRexRM(pfx,modrm)));
12974 nameXMMReg(gregOfRexRM(pfx,modrm)));
12979 putXMMReg( gregOfRexRM(pfx,modrm),
12993 modrm = insn[2];
12994 if (epartIsReg(modrm)) {
12995 assign( sV, getXMMReg( eregOfRexRM(pfx,modrm)) );
12996 DIP("movddup %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
12997 nameXMMReg(gregOfRexRM(pfx,modrm)));
13004 nameXMMReg(gregOfRexRM(pfx,modrm)));
13008 putXMMReg( gregOfRexRM(pfx,modrm),
13023 modrm = insn[2];
13024 if (epartIsReg(modrm)) {
13025 assign( eV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13026 DIP("addsubps %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13027 nameXMMReg(gregOfRexRM(pfx,modrm)));
13033 nameXMMReg(gregOfRexRM(pfx,modrm)));
13037 assign( gV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13045 putXMMReg( gregOfRexRM(pfx,modrm), mk128from32s( a3, s2, a1, s0 ));
13059 modrm = insn[2];
13060 if (epartIsReg(modrm)) {
13061 assign( eV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13062 DIP("addsubpd %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13063 nameXMMReg(gregOfRexRM(pfx,modrm)));
13069 nameXMMReg(gregOfRexRM(pfx,modrm)));
13073 assign( gV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13081 putXMMReg( gregOfRexRM(pfx,modrm),
13099 modrm = insn[2];
13100 if (epartIsReg(modrm)) {
13101 assign( eV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13102 DIP("h%sps %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13103 nameXMMReg(gregOfRexRM(pfx,modrm)));
13109 nameXMMReg(gregOfRexRM(pfx,modrm)));
13113 assign( gV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13121 putXMMReg( gregOfRexRM(pfx,modrm),
13142 modrm = insn[2];
13143 if (epartIsReg(modrm)) {
13144 assign( eV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13145 DIP("h%spd %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13146 nameXMMReg(gregOfRexRM(pfx,modrm)));
13152 nameXMMReg(gregOfRexRM(pfx,modrm)));
13156 assign( gV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13166 putXMMReg( gregOfRexRM(pfx,modrm),
13175 modrm = insn[2];
13176 if (epartIsReg(modrm)) {
13180 putXMMReg( gregOfRexRM(pfx,modrm),
13183 nameXMMReg(gregOfRexRM(pfx,modrm)));
13209 modrm = insn[3];
13211 assign( dV, getMMXReg(gregLO3ofRM(modrm)) );
13213 if (epartIsReg(modrm)) {
13214 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
13216 DIP("pmaddubsw %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
13217 nameMMXReg(gregLO3ofRM(modrm)));
13223 nameMMXReg(gregLO3ofRM(modrm)));
13241 gregLO3ofRM(modrm),
13262 modrm = insn[3];
13263 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13265 if (epartIsReg(modrm)) {
13266 modrm)) );
13268 DIP("pmaddubsw %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13269 nameXMMReg(gregOfRexRM(pfx,modrm)));
13276 nameXMMReg(gregOfRexRM(pfx,modrm)));
13294 gregOfRexRM(pfx,modrm),
13329 modrm = insn[3];
13346 assign( dV, getMMXReg(gregLO3ofRM(modrm)) );
13348 if (epartIsReg(modrm)) {
13349 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
13351 DIP("ph%s %s,%s\n", str, nameMMXReg(eregLO3ofRM(modrm)),
13352 nameMMXReg(gregLO3ofRM(modrm)));
13358 nameMMXReg(gregLO3ofRM(modrm)));
13362 gregLO3ofRM(modrm),
13400 modrm = insn[3];
13416 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13418 if (epartIsReg(modrm)) {
13419 assign( sV, getXMMReg( eregOfRexRM(pfx,modrm)) );
13420 DIP("ph%s %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13421 nameXMMReg(gregOfRexRM(pfx,modrm)));
13428 nameXMMReg(gregOfRexRM(pfx,modrm)));
13441 gregOfRexRM(pfx,modrm),
13464 modrm = insn[3];
13466 assign( dV, getMMXReg(gregLO3ofRM(modrm)) );
13468 if (epartIsReg(modrm)) {
13469 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
13471 DIP("pmulhrsw %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
13472 nameMMXReg(gregLO3ofRM(modrm)));
13478 nameMMXReg(gregLO3ofRM(modrm)));
13482 gregLO3ofRM(modrm),
13500 modrm = insn[3];
13501 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13503 if (epartIsReg(modrm)) {
13504 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13506 DIP("pmulhrsw %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13507 nameXMMReg(gregOfRexRM(pfx,modrm)));
13514 nameXMMReg(gregOfRexRM(pfx,modrm)));
13523 gregOfRexRM(pfx,modrm),
13551 modrm = insn[3];
13553 assign( dV, getMMXReg(gregLO3ofRM(modrm)) );
13555 if (epartIsReg(modrm)) {
13556 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
13558 DIP("psign%s %s,%s\n", str, nameMMXReg(eregLO3ofRM(modrm)),
13559 nameMMXReg(gregLO3ofRM(modrm)));
13565 nameMMXReg(gregLO3ofRM(modrm)));
13569 gregLO3ofRM(modrm),
13598 modrm = insn[3];
13599 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13601 if (epartIsReg(modrm)) {
13602 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13604 DIP("psign%s %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13605 nameXMMReg(gregOfRexRM(pfx,modrm)));
13612 nameXMMReg(gregOfRexRM(pfx,modrm)));
13621 gregOfRexRM(pfx,modrm),
13648 modrm = insn[3];
13651 if (epartIsReg(modrm)) {
13652 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
13654 DIP("pabs%s %s,%s\n", str, nameMMXReg(eregLO3ofRM(modrm)),
13655 nameMMXReg(gregLO3ofRM(modrm)));
13661 nameMMXReg(gregLO3ofRM(modrm)));
13665 gregLO3ofRM(modrm),
13691 modrm = insn[3];
13693 if (epartIsReg(modrm)) {
13694 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13696 DIP("pabs%s %s,%s\n", str, nameXMMReg(eregOfRexRM(pfx,modrm)),
13697 nameXMMReg(gregOfRexRM(pfx,modrm)));
13704 nameXMMReg(gregOfRexRM(pfx,modrm)));
13711 gregOfRexRM(pfx,modrm),
13727 modrm = insn[3];
13729 assign( dV, getMMXReg(gregLO3ofRM(modrm)) );
13731 if (epartIsReg(modrm)) {
13732 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
13736 nameMMXReg(eregLO3ofRM(modrm)),
13737 nameMMXReg(gregLO3ofRM(modrm)));
13745 nameMMXReg(gregLO3ofRM(modrm)));
13770 putMMXReg( gregLO3ofRM(modrm), mkexpr(res) );
13787 modrm = insn[3];
13788 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13790 if (epartIsReg(modrm)) {
13791 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13795 nameXMMReg(eregOfRexRM(pfx,modrm)),
13796 nameXMMReg(gregOfRexRM(pfx,modrm)));
13805 nameXMMReg(gregOfRexRM(pfx,modrm)));
13853 gregOfRexRM(pfx,modrm),
13866 modrm = insn[3];
13868 assign( dV, getMMXReg(gregLO3ofRM(modrm)) );
13870 if (epartIsReg(modrm)) {
13871 assign( sV, getMMXReg(eregLO3ofRM(modrm)) );
13873 DIP("pshufb %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
13874 nameMMXReg(gregLO3ofRM(modrm)));
13880 nameMMXReg(gregLO3ofRM(modrm)));
13884 gregLO3ofRM(modrm),
13922 modrm = insn[3];
13923 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
13925 if (epartIsReg(modrm)) {
13926 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
13928 DIP("pshufb %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
13929 nameXMMReg(gregOfRexRM(pfx,modrm)));
13936 nameXMMReg(gregOfRexRM(pfx,modrm)));
14007 gregOfRexRM(pfx,modrm),
14034 modrm = insn[3];
14035 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14037 if ( epartIsReg( modrm ) ) {
14039 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14042 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14043 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14052 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14064 putXMMReg( gregOfRexRM(pfx, modrm),
14084 modrm = insn[3];
14086 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14088 if ( epartIsReg( modrm ) ) {
14090 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14093 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14094 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14103 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14112 putXMMReg( gregOfRexRM(pfx, modrm),
14132 modrm = insn[3];
14134 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14136 if ( epartIsReg( modrm ) ) {
14138 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14141 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14142 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14151 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14165 putXMMReg( gregOfRexRM(pfx, modrm),
14187 modrm = insn[3];
14189 assign( dvec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14191 if ( epartIsReg( modrm ) ) {
14193 assign( svec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14196 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14197 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14206 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14230 putXMMReg( gregOfRexRM(pfx,modrm), mkexpr(res) );
14247 modrm = insn[3];
14249 assign( dst_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14251 if ( epartIsReg( modrm ) ) {
14253 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14256 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14257 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14266 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14282 putXMMReg( gregOfRexRM( pfx, modrm ),
14309 modrm = insn[3];
14311 assign( xmm1_vec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14313 if ( epartIsReg( modrm ) ) {
14315 assign( xmm2_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14318 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14319 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14328 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14348 putXMMReg( gregOfRexRM(pfx, modrm),
14374 modrm = insn[3];
14376 assign( dstVec, getXMMReg( gregOfRexRM(pfx, modrm) ) );
14378 if ( epartIsReg( modrm ) ) {
14380 assign( src_vec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14401 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14402 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14411 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14440 putXMMReg( gregOfRexRM(pfx, modrm), ire_vec_128 );
14457 modrm = insn[3];
14458 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14461 if ( epartIsReg( modrm ) ) {
14477 if ( epartIsReg( modrm ) ) {
14478 putIReg64( eregOfRexRM(pfx,modrm),
14484 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14485 nameIReg64( eregOfRexRM(pfx, modrm) ) );
14490 imm8, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14509 modrm = insn[3];
14510 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14513 if ( epartIsReg( modrm ) ) {
14528 if ( epartIsReg( modrm ) ) {
14529 putIReg32( eregOfRexRM(pfx,modrm), mkexpr(src_dword) );
14532 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14533 nameIReg32( eregOfRexRM(pfx, modrm) ) );
14538 imm8_10, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14557 modrm = insn[3];
14558 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14560 if ( epartIsReg( modrm ) ) {
14572 if ( epartIsReg( modrm ) ) {
14573 putIReg64( eregOfRexRM(pfx,modrm), mkexpr(src_qword) );
14576 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14577 nameIReg64( eregOfRexRM(pfx, modrm) ) );
14582 imm8_0, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14599 modrm = insn[3];
14600 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14603 if ( epartIsReg( modrm ) ) {
14622 if ( epartIsReg( modrm ) ) {
14623 putIReg64( eregOfRexRM(pfx,modrm), unop(Iop_16Uto64, mkexpr(src_word)) );
14626 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14627 nameIReg64( eregOfRexRM(pfx, modrm) ) );
14632 imm8_20, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14649 modrm = insn[3];
14651 if ( epartIsReg( modrm ) ) {
14653 assign( src_elems, getIReg64( eregOfRexRM(pfx,modrm) ) );
14656 nameIReg64( eregOfRexRM(pfx, modrm) ),
14657 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14664 imm8_0, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14676 putXMMReg( gregOfRexRM(pfx, modrm),
14679 getXMMReg( gregOfRexRM(pfx, modrm) ),
14697 modrm = insn[3];
14699 if ( epartIsReg( modrm ) ) {
14701 assign( src_elems, getIReg32( eregOfRexRM(pfx,modrm) ) );
14704 nameIReg32( eregOfRexRM(pfx, modrm) ),
14705 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14712 imm8_10, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14734 putXMMReg( gregOfRexRM(pfx, modrm),
14737 getXMMReg( gregOfRexRM(pfx, modrm) ),
14752 modrm = insn[3];
14754 if ( epartIsReg( modrm ) ) {
14758 getIReg32(eregOfRexRM(pfx,modrm))),
14762 nameIReg32( eregOfRexRM(pfx, modrm) ),
14763 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14770 imm8, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14788 putXMMReg( gregOfRexRM(pfx, modrm),
14792 getXMMReg( gregOfRexRM(pfx, modrm) ),
14811 modrm = insn[3];
14812 assign( xmm_vec, getXMMReg( gregOfRexRM(pfx,modrm) ) );
14815 if ( epartIsReg( modrm ) ) {
14830 if ( epartIsReg( modrm ) ) {
14831 putIReg32( eregOfRexRM(pfx,modrm), mkexpr(src_dword) );
14834 nameXMMReg( gregOfRexRM(pfx, modrm) ),
14835 nameIReg32( eregOfRexRM(pfx, modrm) ) );
14840 imm8_10, nameXMMReg( gregOfRexRM(pfx, modrm) ), dis_buf );
14938 modrm = insn[3];
14942 if ( epartIsReg( modrm ) ) {
14943 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14946 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14947 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14954 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14957 putXMMReg( gregOfRexRM(pfx, modrm),
14976 modrm = insn[3];
14980 if ( epartIsReg( modrm ) ) {
14981 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
14984 nameXMMReg( eregOfRexRM(pfx, modrm) ),
14985 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14992 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
14998 putXMMReg( gregOfRexRM(pfx, modrm),
15018 modrm = insn[3];
15022 if ( epartIsReg(modrm) ) {
15023 assign( srcBytes, getXMMRegLane16( eregOfRexRM(pfx, modrm), 0 ) );
15026 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15027 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15033 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15036 putXMMReg( gregOfRexRM( pfx, modrm ),
15054 modrm = insn[3];
15058 if ( epartIsReg(modrm) ) {
15059 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15062 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15063 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15070 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15073 putXMMReg( gregOfRexRM(pfx, modrm),
15092 modrm = insn[3];
15096 if ( epartIsReg( modrm ) ) {
15097 assign( srcBytes, getXMMRegLane32( eregOfRexRM(pfx, modrm), 0 ) );
15100 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15101 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15107 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15110 putXMMReg( gregOfRexRM( pfx, modrm ),
15127 modrm = insn[3];
15131 if ( epartIsReg(modrm) ) {
15132 assign( srcBytes, getXMMRegLane64( eregOfRexRM(pfx, modrm), 0 ) );
15135 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15136 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15142 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15145 putXMMReg( gregOfRexRM(pfx, modrm),
15162 modrm = insn[3];
15166 if ( epartIsReg(modrm) ) {
15167 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15170 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15171 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15178 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15181 putXMMReg( gregOfRexRM(pfx, modrm),
15195 modrm = insn[3];
15199 if ( epartIsReg(modrm) ) {
15200 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15203 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15204 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15211 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15217 putXMMReg( gregOfRexRM( pfx, modrm ),
15233 modrm = insn[3];
15237 if ( epartIsReg(modrm) ) {
15238 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15241 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15242 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15250 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15256 putXMMReg( gregOfRexRM( pfx, modrm ),
15274 modrm = insn[3];
15278 if ( epartIsReg(modrm) ) {
15279 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15282 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15283 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15290 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15293 putXMMReg( gregOfRexRM(pfx, modrm),
15308 modrm = insn[3];
15312 if ( epartIsReg( modrm ) ) {
15313 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15316 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15317 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15324 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15330 putXMMReg( gregOfRexRM( pfx, modrm ),
15346 modrm = insn[3];
15350 if ( epartIsReg(modrm) ) {
15351 assign( srcVec, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15354 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15355 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15362 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15365 putXMMReg( gregOfRexRM(pfx, modrm),
15380 modrm = insn[3];
15385 if ( epartIsReg(modrm) ) {
15386 assign( argL, getXMMReg( eregOfRexRM(pfx, modrm) ) );
15389 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15390 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15397 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15400 assign(argR, getXMMReg( gregOfRexRM(pfx, modrm) ));
15402 putXMMReg( gregOfRexRM(pfx, modrm),
15417 modrm = insn[2];
15418 if (epartIsReg(modrm)) {
15419 assign(src, getIRegE(sz, pfx, modrm));
15421 DIP("popcnt%c %s, %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm),
15422 nameIRegG(sz, pfx, modrm));
15428 nameIRegG(sz, pfx, modrm));
15432 putIRegG(sz, pfx, modrm, mkexpr(result));
15465 modrm = insn[3];
15467 if (epartIsReg(modrm)) {
15469 isD ? getXMMRegLane64F( eregOfRexRM(pfx, modrm), 0 )
15470 : getXMMRegLane32F( eregOfRexRM(pfx, modrm), 0 ) );
15476 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
15477 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15486 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15499 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 0, mkexpr(res) );
15501 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 0, mkexpr(res) );
15519 modrm = insn[3];
15521 if (epartIsReg(modrm)) {
15523 getXMMRegLane64F( eregOfRexRM(pfx, modrm), 0 ) );
15525 getXMMRegLane64F( eregOfRexRM(pfx, modrm), 1 ) );
15530 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
15531 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15543 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15555 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 0, mkexpr(res0) );
15556 putXMMRegLane64F( gregOfRexRM(pfx, modrm), 1, mkexpr(res1) );
15578 modrm = insn[3];
15580 if (epartIsReg(modrm)) {
15582 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 0 ) );
15584 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 1 ) );
15586 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 2 ) );
15588 getXMMRegLane32F( eregOfRexRM(pfx, modrm), 3 ) );
15593 imm, nameXMMReg( eregOfRexRM(pfx, modrm) ),
15594 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15610 imm, dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15624 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 0, mkexpr(res0) );
15625 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 1, mkexpr(res1) );
15626 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 2, mkexpr(res2) );
15627 putXMMRegLane32F( gregOfRexRM(pfx, modrm), 3, mkexpr(res3) );
15643 modrm = insn[2];
15644 if (epartIsReg(modrm)) {
15645 assign(src, getIRegE(sz, pfx, modrm));
15647 DIP("lzcnt%c %s, %s\n", nameISize(sz), nameIRegE(sz, pfx, modrm),
15648 nameIRegG(sz, pfx, modrm));
15654 nameIRegG(sz, pfx, modrm));
15658 putIRegG(sz, pfx, modrm, mkexpr(res));
15716 modrm = insn[3];
15717 if (epartIsReg(modrm)) {
15718 regNoL = eregOfRexRM(pfx, modrm);
15719 regNoR = gregOfRexRM(pfx, modrm);
15724 regNoR = gregOfRexRM(pfx, modrm);
15824 modrm = insn[3];
15828 if ( epartIsReg(modrm) ) {
15829 assign(vecE, getXMMReg(eregOfRexRM(pfx, modrm)));
15832 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15833 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15840 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15843 assign(vecG, getXMMReg(gregOfRexRM(pfx, modrm)));
15946 modrm = insn[3];
15968 if ( epartIsReg(modrm) ) {
15969 assign(vecE, getXMMReg(eregOfRexRM(pfx, modrm)));
15972 nameXMMReg( eregOfRexRM(pfx, modrm) ),
15973 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15980 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
15983 assign(vecG, getXMMReg(gregOfRexRM(pfx, modrm)));
16001 putXMMReg(gregOfRexRM(pfx, modrm), res);
16014 modrm = insn[3];
16024 if (epartIsReg(modrm)) {
16025 assign(valE, getIRegE(sz, pfx, modrm));
16027 DIP("crc32b %s,%s\n", nameIRegE(sz, pfx, modrm),
16028 nameIRegG(1==getRexW(pfx) ? 8 : 4 ,pfx, modrm));
16034 nameIRegG(1==getRexW(pfx) ? 8 : 4 ,pfx, modrm));
16042 assign(valG0, binop(Iop_And64, getIRegG(8, pfx, modrm),
16064 putIRegG(4, pfx, modrm, unop(Iop_64to32, mkexpr(valG1)));
16074 modrm = insn[3];
16079 if ( epartIsReg(modrm) ) {
16080 assign( argL, getXMMReg( eregOfRexRM(pfx, modrm) ) );
16083 nameXMMReg( eregOfRexRM(pfx, modrm) ),
16084 nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16091 dis_buf, nameXMMReg( gregOfRexRM(pfx, modrm) ) );
16094 assign(argR, getXMMReg( gregOfRexRM(pfx, modrm) ));
16096 putXMMReg( gregOfRexRM(pfx, modrm),
16117 modrm = insn[3];
16118 assign( dV, getXMMReg(gregOfRexRM(pfx,modrm)) );
16120 if (epartIsReg(modrm)) {
16121 assign( sV, getXMMReg(eregOfRexRM(pfx,modrm)) );
16123 DIP("pmuldq %s,%s\n", nameXMMReg(eregOfRexRM(pfx,modrm)),
16124 nameXMMReg(gregOfRexRM(pfx,modrm)));
16130 nameXMMReg(gregOfRexRM(pfx,modrm)));
16137 putXMMRegLane64( gregOfRexRM(pfx,modrm), 0, mkexpr(t0) );
16139 putXMMRegLane64( gregOfRexRM(pfx,modrm), 1, mkexpr(t1) );
16678 modrm = getUChar(delta);
16679 if (epartIsReg(modrm))
16689 putIRegG( sz, pfx, modrm,
16695 nameIRegG(sz,pfx,modrm));
16793 modrm = getUChar(delta);
16794 if (epartIsReg(modrm)) {
16798 putIRegE(sz, pfx, modrm,
16802 nameIRegE(sz,pfx,modrm));
16822 modrm = getUChar(delta);
16823 if (epartIsReg(modrm)) {
16825 putIRegG(8, pfx, modrm,
16827 getIRegE(4, pfx, modrm)));
16829 nameIRegE(4, pfx, modrm),
16830 nameIRegG(8, pfx, modrm));
16835 putIRegG(8, pfx, modrm,
16839 nameIRegG(8, pfx, modrm));
17612 modrm = getUChar(delta);
17615 if (epartIsReg(modrm)) {
17616 assign(t1, getIRegE(sz, pfx, modrm));
17617 assign(t2, getIRegG(sz, pfx, modrm));
17618 putIRegG(sz, pfx, modrm, mkexpr(t1));
17619 putIRegE(sz, pfx, modrm, mkexpr(t2));
17622 nameISize(sz), nameIRegG(sz, pfx, modrm),
17623 nameIRegE(sz, pfx, modrm));
17628 assign( t2, getIRegG(sz, pfx, modrm) );
17631 putIRegG( sz, pfx, modrm, mkexpr(t1) );
17634 nameIRegG(sz, pfx, modrm), dis_buf);
17790 modrm = getUChar(delta);
17795 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
17800 modrm = getUChar(delta);
17804 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
17809 modrm = getUChar(delta);
17813 delta = dis_Grp1 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz, d64 );
17821 modrm = getUChar(delta);
17826 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17834 modrm = getUChar(delta);
17838 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17846 modrm = getUChar(delta);
17851 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17859 modrm = getUChar(delta);
17863 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17871 modrm = getUChar(delta);
17875 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17883 modrm = getUChar(delta);
17886 delta = dis_Grp2 ( vbi, pfx, delta, modrm, am_sz, d_sz, sz,
17940 modrm = getUChar(delta);
17943 delta = dis_Grp8_Imm ( vbi, pfx, delta, modrm, am_sz, sz, d64,
18143 modrm = getUChar(delta);
18144 if (epartIsReg(modrm)) goto decode_failure;
18145 if (gregLO3ofRM(modrm) != 1) goto decode_failure;
18330 //.. //-- modrm = getUChar(eip);
18331 //.. //-- vg_assert(!epartIsReg(modrm));
18333 //.. //-- uInstr2(cb, GET, 4, ArchReg, gregOfRM(modrm), TempReg, t1);
18338 //.. //-- DIP("movnti %s,%s\n", nameIReg(4,gregOfRM(modrm)), dis_buf);
18352 modrm = getUChar(delta);
18353 if (epartIsReg(modrm)) goto decode_failure;
18437 modrm = getUChar(delta);
18438 if (epartIsReg(modrm)) goto decode_failure;
18439 if (gregLO3ofRM(modrm) != 0 && gregLO3ofRM(modrm) != 1)
18445 switch (gregLO3ofRM(modrm)) {
18504 modrm = getUChar(delta);
18505 if (epartIsReg(modrm)) {
18507 putIRegE(1, pfx, modrm, mkexpr(t1));
18509 nameIRegE(1,pfx,modrm));
18521 modrm = getUChar(delta);
18525 vbi, pfx, delta, modrm, sz,
18530 modrm = getUChar(delta);
18532 vbi, pfx, delta, modrm, sz,
18538 modrm = getUChar(delta);
18542 vbi, pfx, delta, modrm, sz,
18547 modrm = getUChar(delta);
18549 vbi, pfx, delta, modrm, sz,
18690 modrm = getUChar(delta);
18693 if (epartIsReg(modrm)) goto decode_failure;
18694 if (gregLO3ofRM(modrm) != 0 && gregLO3ofRM(modrm) != 1)
18696 switch (gregLO3ofRM(modrm)) {
18707 mkU64(gregLO3ofRM(modrm)) )