Home | History | Annotate | Download | only in priv

Lines Matching refs:modrm

346 /* Extract the reg field from a modRM byte. */
352 /* Figure out whether the mod and rm parts of a modRM byte refer to a
1462 /* Generate IR to calculate an address indicated by a ModRM and
1776 Is passed the a ptr to the modRM byte, the actual operation, and the
1896 Is passed the a ptr to the modRM byte, the actual operation, and the
2031 Is passed the a ptr to the modRM byte, and the data size. Returns
2075 Is passed the a ptr to the modRM byte, and the data size. Returns
2260 Int delta, UChar modrm,
2273 switch (gregOfRM(modrm)) {
2283 if (epartIsReg(modrm)) {
2286 assign(dst0, getIReg(sz,eregOfRM(modrm)));
2289 if (gregOfRM(modrm) == 2 /* ADC */) {
2293 if (gregOfRM(modrm) == 3 /* SBB */) {
2304 if (gregOfRM(modrm) < 7)
2305 putIReg(sz, eregOfRM(modrm), mkexpr(dst1));
2308 DIP("%s%c $0x%x, %s\n", nameGrp1(gregOfRM(modrm)), nameISize(sz), d32,
2309 nameIReg(sz,eregOfRM(modrm)));
2316 if (gregOfRM(modrm) == 2 /* ADC */) {
2327 if (gregOfRM(modrm) == 3 /* SBB */) {
2339 if (gregOfRM(modrm) < 7) {
2355 DIP("%s%c $0x%x, %s\n", nameGrp1(gregOfRM(modrm)), nameISize(sz),
2367 Int delta, UChar modrm,
2371 /* delta on entry points at the modrm byte. */
2385 if (epartIsReg(modrm)) {
2386 assign(dst0, getIReg(sz, eregOfRM(modrm)));
2395 switch (gregOfRM(modrm)) { case 4: case 5: case 6: case 7: isShift = True; }
2398 switch (gregOfRM(modrm)) { case 0: case 1: isRotate = True; }
2401 switch (gregOfRM(modrm)) { case 2: case 3: isRotateC = True; }
2411 Bool left = toBool(gregOfRM(modrm) == 2);
2444 switch (gregOfRM(modrm)) {
2493 Bool left = toBool(gregOfRM(modrm) == 0);
2571 if (epartIsReg(modrm)) {
2572 putIReg(sz, eregOfRM(modrm), mkexpr(dst1));
2575 nameGrp2(gregOfRM(modrm)), nameISize(sz) );
2580 vex_printf(", %s\n", nameIReg(sz,eregOfRM(modrm)));
2586 nameGrp2(gregOfRM(modrm)), nameISize(sz) );
2602 Int delta, UChar modrm,
2607 And delta on entry points at the modrm byte. */
2629 switch (gregOfRM(modrm)) {
2643 if (epartIsReg(modrm)) {
2645 assign( t2, widenUto32(getIReg(sz, eregOfRM(modrm))) );
2647 DIP("%s%c $0x%x, %s\n", nameGrp8(gregOfRM(modrm)), nameISize(sz),
2648 src_val, nameIReg(sz,eregOfRM(modrm)));
2654 DIP("%s%c $0x%x, %s\n", nameGrp8(gregOfRM(modrm)), nameISize(sz),
2659 switch (gregOfRM(modrm)) {
2679 if (gregOfRM(modrm) != 4 /* BT */) {
2680 if (epartIsReg(modrm)) {
2681 putIReg(sz, eregOfRM(modrm), narrowTo(ty, mkexpr(t2m)));
2778 UChar modrm;
2788 modrm = getIByte(delta);
2790 if (locked && (gregOfRM(modrm) != 2 && gregOfRM(modrm) != 3)) {
2796 if (epartIsReg(modrm)) {
2797 switch (gregOfRM(modrm)) {
2802 getIReg(sz,eregOfRM(modrm)),
2806 nameIReg(sz, eregOfRM(modrm)));
2818 putIReg(sz, eregOfRM(modrm),
2820 getIReg(sz, eregOfRM(modrm))));
2821 DIP("not%c %s\n", nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
2829 assign(src, getIReg(sz,eregOfRM(modrm)));
2832 putIReg(sz, eregOfRM(modrm), mkexpr(dst1));
2833 DIP("neg%c %s\n", nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
2838 assign(src, getIReg(sz,eregOfRM(modrm)));
2839 codegen_mulL_A_D ( sz, False, src, nameIReg(sz,eregOfRM(modrm)) );
2844 assign(src, getIReg(sz,eregOfRM(modrm)));
2845 codegen_mulL_A_D ( sz, True, src, nameIReg(sz,eregOfRM(modrm)) );
2849 assign( t1, getIReg(sz, eregOfRM(modrm)) );
2851 DIP("div%c %s\n", nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
2855 assign( t1, getIReg(sz, eregOfRM(modrm)) );
2857 DIP("idiv%c %s\n", nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
2868 switch (gregOfRM(modrm)) {
2938 UChar modrm;
2946 modrm = getIByte(delta);
2948 if (locked && (gregOfRM(modrm) != 0 && gregOfRM(modrm) != 1)) {
2954 if (epartIsReg(modrm)) {
2955 assign(t1, getIReg(1, eregOfRM(modrm)));
2956 switch (gregOfRM(modrm)) {
2959 putIReg(1, eregOfRM(modrm), mkexpr(t2));
2964 putIReg(1, eregOfRM(modrm), mkexpr(t2));
2972 DIP("%sb %s\n", nameGrp4(gregOfRM(modrm)),
2973 nameIReg(1, eregOfRM(modrm)));
2977 switch (gregOfRM(modrm)) {
3003 DIP("%sb %s\n", nameGrp4(gregOfRM(modrm)), dis_buf);
3015 UChar modrm;
3024 modrm = getIByte(delta);
3026 if (locked && (gregOfRM(modrm) != 0 && gregOfRM(modrm) != 1)) {
3032 if (epartIsReg(modrm)) {
3033 assign(t1, getIReg(sz,eregOfRM(modrm)));
3034 switch (gregOfRM(modrm)) {
3041 putIReg(sz,eregOfRM(modrm),mkexpr(t2));
3049 putIReg(sz,eregOfRM(modrm),mkexpr(t2));
3077 DIP("%s%c %s\n", nameGrp5(gregOfRM(modrm)),
3078 nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
3082 switch (gregOfRM(modrm)) {
3133 DIP("%s%c %s\n", nameGrp5(gregOfRM(modrm)),
3742 /* On entry, delta points at the second byte of the insn (the modrm
3745 UChar modrm = getIByte(delta+0);
3750 if (modrm < 0xC0) {
3752 /* bits 5,4,3 are an opcode extension, and the modRM also
3757 switch (gregOfRM(modrm)) {
3815 vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
3821 switch (modrm) {
3824 fp_do_op_ST_ST ( "add", Iop_AddF64, modrm - 0xC0, 0, False );
3828 fp_do_op_ST_ST ( "mul", Iop_MulF64, modrm - 0xC8, 0, False );
3833 r_dst = (UInt)modrm - 0xD0;
3847 r_dst = (UInt)modrm - 0xD8;
3861 fp_do_op_ST_ST ( "sub", Iop_SubF64, modrm - 0xE0, 0, False );
3865 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, modrm - 0xE8, 0, False );
3869 fp_do_op_ST_ST ( "div", Iop_DivF64, modrm - 0xF0, 0, False );
3873 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, modrm - 0xF8, 0, False );
3885 if (modrm < 0xC0) {
3887 /* bits 5,4,3 are an opcode extension, and the modRM also
3892 switch (gregOfRM(modrm)) {
4068 vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
4075 switch (modrm) {
4078 r_src = (UInt)modrm - 0xC0;
4087 r_src = (UInt)modrm - 0xC8;
4394 if (modrm < 0xC0) {
4396 /* bits 5,4,3 are an opcode extension, and the modRM also
4401 switch (gregOfRM(modrm)) {
4483 vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
4491 switch (modrm) {
4494 r_src = (UInt)modrm - 0xC0;
4504 r_src = (UInt)modrm - 0xC8;
4514 r_src = (UInt)modrm - 0xD0;
4524 r_src = (UInt)modrm - 0xD8;
4557 if (modrm < 0xC0) {
4559 /* bits 5,4,3 are an opcode extension, and the modRM also
4564 switch (gregOfRM(modrm)) {
4648 vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
4656 switch (modrm) {
4659 r_src = (UInt)modrm - 0xC0;
4669 r_src = (UInt)modrm - 0xC8;
4679 r_src = (UInt)modrm - 0xD0;
4689 r_src = (UInt)modrm - 0xD8;
4743 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xE8, False );
4747 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xF0, False );
4759 if (modrm < 0xC0) {
4761 /* bits 5,4,3 are an opcode extension, and the modRM also
4766 switch (gregOfRM(modrm)) {
4822 vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
4830 switch (modrm) {
4833 fp_do_op_ST_ST ( "add", Iop_AddF64, 0, modrm - 0xC0, False );
4837 fp_do_op_ST_ST ( "mul", Iop_MulF64, 0, modrm - 0xC8, False );
4841 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, 0, modrm - 0xE0, False );
4845 fp_do_op_ST_ST ( "sub", Iop_SubF64, 0, modrm - 0xE8, False );
4849 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, 0, modrm - 0xF0, False );
4853 fp_do_op_ST_ST ( "div", Iop_DivF64, 0, modrm - 0xF8, False );
4867 if (modrm < 0xC0) {
4869 /* bits 5,4,3 are an opcode extension, and the modRM also
4874 switch (gregOfRM(modrm)) {
5012 vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
5018 switch (modrm) {
5021 r_dst = (UInt)modrm - 0xC0;
5027 r_dst = (UInt)modrm - 0xD0;
5036 r_dst = (UInt)modrm - 0xD8;
5046 r_dst = (UInt)modrm - 0xE0;
5059 r_dst = (UInt)modrm - 0xE8;
5082 if (modrm < 0xC0) {
5084 /* bits 5,4,3 are an opcode extension, and the modRM also
5090 switch (gregOfRM(modrm)) {
5176 vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
5184 switch (modrm) {
5187 fp_do_op_ST_ST ( "add", Iop_AddF64, 0, modrm - 0xC0, True );
5191 fp_do_op_ST_ST ( "mul", Iop_MulF64, 0, modrm - 0xC8, True );
5209 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, 0, modrm - 0xE0, True );
5213 fp_do_op_ST_ST ( "sub", Iop_SubF64, 0, modrm - 0xE8, True );
5217 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, 0, modrm - 0xF0, True );
5221 fp_do_op_ST_ST ( "div", Iop_DivF64, 0, modrm - 0xF8, True );
5235 if (modrm < 0xC0) {
5237 /* bits 5,4,3 are an opcode extension, and the modRM also
5242 switch (gregOfRM(modrm)) {
5288 vex_printf("unhandled opc_aux = 0x%2x\n", gregOfRM(modrm));
5296 switch (modrm) {
5329 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xE8, True );
5334 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xF0, True );
5424 UChar modrm = getIByte(delta);
5425 Bool isReg = epartIsReg(modrm);
5514 argG = getMMXReg(gregOfRM(modrm));
5520 argE = getMMXReg(eregOfRM(modrm));
5552 putMMXReg( gregOfRM(modrm), mkexpr(res) );
5556 ( isReg ? nameMMXReg(eregOfRM(modrm)) : dis_buf ),
5557 nameMMXReg(gregOfRM(modrm)) );
5702 UChar modrm;
5716 modrm = getIByte(delta);
5717 if (epartIsReg(modrm)) {
5720 gregOfRM(modrm),
5723 getIReg(4, eregOfRM(modrm)) ) );
5725 nameIReg(4,eregOfRM(modrm)), nameMMXReg(gregOfRM(modrm)));
5730 gregOfRM(modrm),
5734 DIP("movd %s, %s\n", dis_buf, nameMMXReg(gregOfRM(modrm)));
5741 modrm = getIByte(delta);
5742 if (epartIsReg(modrm)) {
5744 putIReg( 4, eregOfRM(modrm),
5745 unop(Iop_64to32, getMMXReg(gregOfRM(modrm)) ) );
5747 nameMMXReg(gregOfRM(modrm)), nameIReg(4,eregOfRM(modrm)));
5752 unop(Iop_64to32, getMMXReg(gregOfRM(modrm)) ) );
5753 DIP("movd %s, %s\n", nameMMXReg(gregOfRM(modrm)), dis_buf);
5761 modrm = getIByte(delta);
5762 if (epartIsReg(modrm)) {
5764 putMMXReg( gregOfRM(modrm), getMMXReg(eregOfRM(modrm)) );
5766 nameMMXReg(eregOfRM(modrm)), nameMMXReg(gregOfRM(modrm)));
5770 putMMXReg( gregOfRM(modrm), loadLE(Ity_I64, mkexpr(addr)) );
5772 dis_buf, nameMMXReg(gregOfRM(modrm)));
5780 modrm = getIByte(delta);
5781 if (epartIsReg(modrm)) {
5783 putMMXReg( eregOfRM(modrm), getMMXReg(gregOfRM(modrm)) );
5785 nameMMXReg(gregOfRM(modrm)), nameMMXReg(eregOfRM(modrm)));
5789 storeLE( mkexpr(addr), getMMXReg(gregOfRM(modrm)) );
5791 nameMMXReg(gregOfRM(modrm)), dis_buf);
5997 modrm = getIByte(delta);
5998 if (sz != 4 || (!epartIsReg(modrm)))
6003 assign( regM, getMMXReg( eregOfRM(modrm) ));
6004 assign( regD, getMMXReg( gregOfRM(modrm) ));
6016 DIP("maskmovq %s,%s\n", nameMMXReg( eregOfRM(modrm) ),
6017 nameMMXReg( gregOfRM(modrm) ) );
6042 Int delta, UChar modrm,
6050 for printing it. And eip on entry points at the modrm byte. */
6083 assign( gsrc, getIReg(sz, gregOfRM(modrm)) );
6085 if (epartIsReg(modrm)) {
6087 assign( esrc, getIReg(sz, eregOfRM(modrm)) );
6091 nameIReg(sz, gregOfRM(modrm)), nameIReg(sz, eregOfRM(modrm)));
6099 nameIReg(sz, gregOfRM(modrm)), dis_buf);
6147 if (epartIsReg(modrm)) {
6148 putIReg(sz, eregOfRM(modrm), mkexpr(tmpRes));
6180 UChar modrm;
6197 modrm = getIByte(delta);
6199 assign( t_bitno0, widenSto32(getIReg(sz, gregOfRM(modrm))) );
6201 if (epartIsReg(modrm)) {
6215 storeLE( mkexpr(t_esp), getIReg(sz, eregOfRM(modrm)) );
6278 if (locked && !epartIsReg(modrm)) {
6304 if (epartIsReg(modrm)) {
6306 putIReg(sz, eregOfRM(modrm), loadLE(szToITy(sz), mkexpr(t_esp)) );
6311 nameBtOp(op), nameISize(sz), nameIReg(sz, gregOfRM(modrm)),
6312 ( epartIsReg(modrm) ? nameIReg(sz, eregOfRM(modrm)) : dis_buf ) );
6324 UChar modrm;
6337 modrm = getIByte(delta);
6339 isReg = epartIsReg(modrm);
6342 assign( src, getIReg(sz, eregOfRM(modrm)) );
6352 ( isReg ? nameIReg(sz, eregOfRM(modrm)) : dis_buf ),
6353 nameIReg(sz, gregOfRM(modrm)));
6406 widenUto32( getIReg( sz, gregOfRM(modrm) ) ),
6421 putIReg( sz, gregOfRM(modrm), mkexpr(dst) );
7873 UChar opc, modrm, abyte, pre;
8095 modrm = getIByte(delta+2);
8097 vassert(!epartIsReg(modrm));
8166 modrm = getIByte(delta+2);
8168 vassert(!epartIsReg(modrm));
8289 modrm = getIByte(delta+2);
8290 if (epartIsReg(modrm)) {
8291 assign( argR, getXMMRegLane32F( eregOfRM(modrm), 0/*lowest lane*/ ) );
8293 DIP("[u]comiss %s,%s\n", nameXMMReg(eregOfRM(modrm)),
8294 nameXMMReg(gregOfRM(modrm)) );
8300 nameXMMReg(gregOfRM(modrm)) );
8302 assign( argL, getXMMRegLane32F( gregOfRM(modrm), 0/*lowest lane*/ ) );
8327 modrm = getIByte(delta+2);
8329 if (epartIsReg(modrm)) {
8330 assign( arg64, getMMXReg(eregOfRM(modrm)) );
8332 DIP("cvtpi2ps %s,%s\n", nameMMXReg(eregOfRM(modrm)),
8333 nameXMMReg(gregOfRM(modrm)));
8339 nameXMMReg(gregOfRM(modrm)) );
8345 gregOfRM(modrm), 0,
8352 gregOfRM(modrm), 1,
8368 modrm = getIByte(delta+3);
8369 if (epartIsReg(modrm)) {
8370 assign( arg32, getIReg(4, eregOfRM(modrm)) );
8372 DIP("cvtsi2ss %s,%s\n", nameIReg(4, eregOfRM(modrm)),
8373 nameXMMReg(gregOfRM(modrm)));
8379 nameXMMReg(gregOfRM(modrm)) );
8385 gregOfRM(modrm), 0,
8405 modrm = getIByte(delta+2);
8407 if (epartIsReg(modrm)) {
8409 assign(f32lo, getXMMRegLane32F(eregOfRM(modrm), 0));
8410 assign(f32hi, getXMMRegLane32F(eregOfRM(modrm), 1));
8412 modrm)),
8413 nameMMXReg(gregOfRM(modrm)));
8423 nameMMXReg(gregOfRM(modrm)));
8444 putMMXReg(gregOfRM(modrm), mkexpr(dst64));
8459 modrm = getIByte(delta+3);
8460 if (epartIsReg(modrm)) {
8462 assign(f32lo, getXMMRegLane32F(eregOfRM(modrm), 0));
8464 nameXMMReg(eregOfRM(modrm)),
8465 nameIReg(4, gregOfRM(modrm)));
8472 nameIReg(4, gregOfRM(modrm)));
8481 putIReg(4, gregOfRM(modrm),
8510 modrm = getIByte(delta+2);
8511 vassert(!epartIsReg(modrm));
8589 modrm = getIByte(delta+2);
8590 if (epartIsReg(modrm)) {
8591 putXMMReg( gregOfRM(modrm),
8592 getXMMReg( eregOfRM(modrm) ));
8593 DIP("mov[ua]ps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
8594 nameXMMReg(gregOfRM(modrm)));
8600 putXMMReg( gregOfRM(modrm),
8603 nameXMMReg(gregOfRM(modrm)));
8613 modrm = getIByte(delta+2);
8614 if (epartIsReg(modrm)) {
8620 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
8621 DIP("mov[ua]ps %s,%s\n", nameXMMReg(gregOfRM(modrm)),
8631 modrm = getIByte(delta+2);
8632 if (epartIsReg(modrm)) {
8634 putXMMRegLane64( gregOfRM(modrm), 1/*upper lane*/,
8635 getXMMRegLane64( eregOfRM(modrm), 0 ) );
8636 DIP("movhps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
8637 nameXMMReg(gregOfRM(modrm)));
8641 putXMMRegLane64( gregOfRM(modrm), 1/*upper lane*/,
8644 nameXMMReg( gregOfRM(modrm) ));
8668 modrm = getIByte(delta+2);
8669 if (epartIsReg(modrm)) {
8671 putXMMRegLane64( gregOfRM(modrm),
8673 getXMMRegLane64( eregOfRM(modrm), 1 ));
8674 DIP("movhlps %s, %s\n", nameXMMReg(eregOfRM(modrm)),
8675 nameXMMReg(gregOfRM(modrm)));
8679 putXMMRegLane64( gregOfRM(modrm), 0/*lower lane*/,
8682 dis_buf, nameXMMReg( gregOfRM(modrm) ));
8706 modrm = getIByte(delta+2);
8707 if (sz == 4 && epartIsReg(modrm)) {
8714 src = eregOfRM(modrm);
8727 putIReg(4, gregOfRM(modrm),
8734 nameIReg(4, gregOfRM(modrm)));
8743 modrm = getIByte(delta+2);
8744 if (!epartIsReg(modrm)) {
8747 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
8750 nameXMMReg(gregOfRM(modrm)));
8764 modrm = getIByte(delta+2);
8765 if (sz == 4 && !epartIsReg(modrm)) {
8768 storeLE( mkexpr(addr), getMMXReg(gregOfRM(modrm)) );
8770 nameMMXReg(gregOfRM(modrm)));
8781 modrm = getIByte(delta+3);
8782 if (epartIsReg(modrm)) {
8783 putXMMRegLane32( gregOfRM(modrm), 0,
8784 getXMMRegLane32( eregOfRM(modrm), 0 ));
8785 DIP("movss %s,%s\n", nameXMMReg(eregOfRM(modrm)),
8786 nameXMMReg(gregOfRM(modrm)));
8791 putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
8793 putXMMRegLane32( gregOfRM(modrm), 1, mkU32(0) );
8795 putXMMRegLane32( gregOfRM(modrm), 0,
8798 nameXMMReg(gregOfRM(modrm)));
8808 modrm = getIByte(delta+3);
8809 if (epartIsReg(modrm)) {
8814 getXMMRegLane32(gregOfRM(modrm), 0) );
8815 DIP("movss %s,%s\n", nameXMMReg(gregOfRM(modrm)),
8863 modrm = insn[2];
8864 if (sz == 4 && epartIsReg(modrm)) {
8868 assign(sV, getMMXReg(eregOfRM(modrm)));
8877 putIReg(4, gregOfRM(modrm), unop(Iop_16Uto32, mkexpr(t5)));
8879 (Int)insn[3], nameMMXReg(eregOfRM(modrm)),
8880 nameIReg(4,gregOfRM(modrm)));
8898 modrm = insn[2];
8901 assign(t5, getMMXReg(gregOfRM(modrm)));
8904 if (epartIsReg(modrm)) {
8905 assign(t4, getIReg(2, eregOfRM(modrm)));
8909 nameIReg(2,eregOfRM(modrm)),
8910 nameMMXReg(gregOfRM(modrm)));
8918 nameMMXReg(gregOfRM(modrm)));
8928 putMMXReg(gregOfRM(modrm), mkexpr(t6));
8973 modrm = insn[2];
8974 if (epartIsReg(modrm)) {
8978 assign(t0, getMMXReg(eregOfRM(modrm)));
8984 putIReg(4, gregOfRM(modrm), mkexpr(t1));
8985 DIP("pmovmskb %s,%s\n", nameMMXReg(eregOfRM(modrm)),
8986 nameIReg(4,gregOfRM(modrm)));
9011 modrm = getIByte(delta+2);
9012 vassert(!epartIsReg(modrm));
9017 switch (gregOfRM(modrm)) {
9036 modrm = getIByte(delta+2);
9037 vassert(!epartIsReg(modrm));
9042 switch (gregOfRM(modrm)) {
9070 modrm = insn[2];
9071 if (epartIsReg(modrm)) {
9072 assign( sV, getMMXReg(eregOfRM(modrm)) );
9076 nameMMXReg(eregOfRM(modrm)),
9077 nameMMXReg(gregOfRM(modrm)));
9085 nameMMXReg(gregOfRM(modrm)));
9095 putMMXReg(gregOfRM(modrm), mkexpr(dV));
9152 modrm = insn[2];
9153 assign( dV, getXMMReg(gregOfRM(modrm)) );
9155 if (epartIsReg(modrm)) {
9156 assign( sV, getXMMReg(eregOfRM(modrm)) );
9160 nameXMMReg(eregOfRM(modrm)),
9161 nameXMMReg(gregOfRM(modrm)));
9169 nameXMMReg(gregOfRM(modrm)));
9179 gregOfRM(modrm),
9208 modrm = getIByte(delta+2);
9210 vassert(!epartIsReg(modrm));
9253 modrm = insn[2];
9254 assign( dV, getXMMReg(gregOfRM(modrm)) );
9256 if (epartIsReg(modrm)) {
9257 assign( sV, getXMMReg(eregOfRM(modrm)) );
9260 nameXMMReg(eregOfRM(modrm)),
9261 nameXMMReg(gregOfRM(modrm)));
9268 nameXMMReg(gregOfRM(modrm)));
9275 putXMMReg( gregOfRM(modrm), mk128from32s( s3, d3, s2, d2 ) );
9277 putXMMReg( gregOfRM(modrm), mk128from32s( s1, d1, s0, d0 ) );
9347 modrm = getIByte(delta+2);
9348 if (epartIsReg(modrm)) {
9349 assign( argR, getXMMRegLane64F( eregOfRM(modrm), 0/*lowest lane*/ ) );
9351 DIP("[u]comisd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9352 nameXMMReg(gregOfRM(modrm)) );
9358 nameXMMReg(gregOfRM(modrm)) );
9360 assign( argL, getXMMRegLane64F( gregOfRM(modrm), 0/*lowest lane*/ ) );
9382 modrm = getIByte(delta+3);
9383 if (epartIsReg(modrm)) {
9384 assign( arg64, getXMMRegLane64(eregOfRM(modrm), 0) );
9386 DIP("cvtdq2pd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9387 nameXMMReg(gregOfRM(modrm)));
9393 nameXMMReg(gregOfRM(modrm)) );
9397 gregOfRM(modrm), 0,
9402 gregOfRM(modrm), 1,
9415 modrm = getIByte(delta+2);
9416 if (epartIsReg(modrm)) {
9417 assign( argV, getXMMReg(eregOfRM(modrm)) );
9419 DIP("cvtdq2ps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9420 nameXMMReg(gregOfRM(modrm)));
9426 nameXMMReg(gregOfRM(modrm)) );
9436 putXMMRegLane32F( gregOfRM(modrm), 3, CVT(t3) );
9437 putXMMRegLane32F( gregOfRM(modrm), 2, CVT(t2) );
9438 putXMMRegLane32F( gregOfRM(modrm), 1, CVT(t1) );
9439 putXMMRegLane32F( gregOfRM(modrm), 0, CVT(t0) );
9453 modrm = getIByte(delta+3);
9454 if (epartIsReg(modrm)) {
9455 assign( argV, getXMMReg(eregOfRM(modrm)) );
9457 DIP("cvtpd2dq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9458 nameXMMReg(gregOfRM(modrm)));
9464 nameXMMReg(gregOfRM(modrm)) );
9479 putXMMRegLane32( gregOfRM(modrm), 3, mkU32(0) );
9480 putXMMRegLane32( gregOfRM(modrm), 2, mkU32(0) );
9481 putXMMRegLane32( gregOfRM(modrm), 1, CVT(t1) );
9482 putXMMRegLane32( gregOfRM(modrm), 0, CVT(t0) );
9501 modrm = getIByte(delta+2);
9503 if (epartIsReg(modrm)) {
9505 assign(f64lo, getXMMRegLane64F(eregOfRM(modrm), 0));
9506 assign(f64hi, getXMMRegLane64F(eregOfRM(modrm), 1));
9508 nameXMMReg(eregOfRM(modrm)),
9509 nameMMXReg(gregOfRM(modrm)));
9519 nameMMXReg(gregOfRM(modrm)));
9536 putMMXReg(gregOfRM(modrm), mkexpr(dst64));
9549 modrm = getIByte(delta+2);
9550 if (epartIsReg(modrm)) {
9551 assign( argV, getXMMReg(eregOfRM(modrm)) );
9553 DIP("cvtpd2ps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9554 nameXMMReg(gregOfRM(modrm)));
9560 nameXMMReg(gregOfRM(modrm)) );
9575 putXMMRegLane32( gregOfRM(modrm), 3, mkU32(0) );
9576 putXMMRegLane32( gregOfRM(modrm), 2, mkU32(0) );
9577 putXMMRegLane32F( gregOfRM(modrm), 1, CVT(t1) );
9578 putXMMRegLane32F( gregOfRM(modrm), 0, CVT(t0) );
9590 modrm = getIByte(delta+2);
9591 if (epartIsReg(modrm)) {
9599 assign( arg64, getMMXReg(eregOfRM(modrm)) );
9601 DIP("cvtpi2pd %s,%s\n", nameMMXReg(eregOfRM(modrm)),
9602 nameXMMReg(gregOfRM(modrm)));
9608 nameXMMReg(gregOfRM(modrm)) );
9612 gregOfRM(modrm), 0,
9617 gregOfRM(modrm), 1,
9630 modrm = getIByte(delta+2);
9631 if (epartIsReg(modrm)) {
9632 assign( argV, getXMMReg(eregOfRM(modrm)) );
9634 DIP("cvtps2dq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9635 nameXMMReg(gregOfRM(modrm)));
9641 nameXMMReg(gregOfRM(modrm)) );
9655 putXMMRegLane32( gregOfRM(modrm), 3, CVT(t3) );
9656 putXMMRegLane32( gregOfRM(modrm), 2, CVT(t2) );
9657 putXMMRegLane32( gregOfRM(modrm), 1, CVT(t1) );
9658 putXMMRegLane32( gregOfRM(modrm), 0, CVT(t0) );
9671 modrm = getIByte(delta+2);
9672 if (epartIsReg(modrm)) {
9673 assign( f32lo, getXMMRegLane32F(eregOfRM(modrm), 0) );
9674 assign( f32hi, getXMMRegLane32F(eregOfRM(modrm), 1) );
9676 DIP("cvtps2pd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9677 nameXMMReg(gregOfRM(modrm)));
9685 nameXMMReg(gregOfRM(modrm)) );
9688 putXMMRegLane64F( gregOfRM(modrm), 1,
9690 putXMMRegLane64F( gregOfRM(modrm), 0,
9707 modrm = getIByte(delta+3);
9708 if (epartIsReg(modrm)) {
9710 assign(f64lo, getXMMRegLane64F(eregOfRM(modrm), 0));
9712 nameXMMReg(eregOfRM(modrm)),
9713 nameIReg(4, gregOfRM(modrm)));
9720 nameIReg(4, gregOfRM(modrm)));
9729 putIReg(4, gregOfRM(modrm),
9742 modrm = getIByte(delta+3);
9743 modrm)) {
9745 assign(f64lo, getXMMRegLane64F(eregOfRM(modrm), 0));
9746 DIP("cvtsd2ss %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9747 nameXMMReg(gregOfRM(modrm)));
9753 nameXMMReg(gregOfRM(modrm)));
9758 gregOfRM(modrm), 0,
9771 modrm = getIByte(delta+3);
9772 if (epartIsReg(modrm)) {
9773 assign( arg32, getIReg(4, eregOfRM(modrm)) );
9775 DIP("cvtsi2sd %s,%s\n", nameIReg(4, eregOfRM(modrm)),
9776 nameXMMReg(gregOfRM(modrm)));
9782 nameXMMReg(gregOfRM(modrm)) );
9786 gregOfRM(modrm), 0,
9798 modrm = getIByte(delta+3);
9799 if (epartIsReg(modrm)) {
9801 assign(f32lo, getXMMRegLane32F(eregOfRM(modrm), 0));
9802 DIP("cvtss2sd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9803 nameXMMReg(gregOfRM(modrm)));
9809 nameXMMReg(gregOfRM(modrm)));
9812 putXMMRegLane64F( gregOfRM(modrm), 0,
9824 modrm = getIByte(delta+2);
9825 if (epartIsReg(modrm)) {
9826 assign( argV, getXMMReg(eregOfRM(modrm)) );
9828 DIP("cvttpd2dq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9829 nameXMMReg(gregOfRM(modrm)));
9835 nameXMMReg(gregOfRM(modrm)) );
9851 putXMMRegLane32( gregOfRM(modrm), 3, mkU32(0) );
9852 putXMMRegLane32( gregOfRM(modrm), 2, mkU32(0) );
9853 putXMMRegLane32( gregOfRM(modrm), 1, CVT(t1) );
9854 putXMMRegLane32( gregOfRM(modrm), 0, CVT(t0) );
9868 modrm = getIByte(delta+3);
9869 if (epartIsReg(modrm)) {
9870 assign( argV, getXMMReg(eregOfRM(modrm)) );
9872 DIP("cvttps2dq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9873 nameXMMReg(gregOfRM(modrm)));
9879 nameXMMReg(gregOfRM(modrm)) );
9893 putXMMRegLane32( gregOfRM(modrm), 3, CVT(t3) );
9894 putXMMRegLane32( gregOfRM(modrm), 2, CVT(t2) );
9895 putXMMRegLane32( gregOfRM(modrm), 1, CVT(t1) );
9896 putXMMRegLane32( gregOfRM(modrm), 0, CVT(t0) );
9963 modrm = getIByte(delta+2);
9964 if (epartIsReg(modrm)) {
9965 putXMMReg( gregOfRM(modrm),
9966 getXMMReg( eregOfRM(modrm) ));
9967 DIP("mov%s %s,%s\n", wot, nameXMMReg(eregOfRM(modrm)),
9968 nameXMMReg(gregOfRM(modrm)));
9974 putXMMReg( gregOfRM(modrm),
9977 nameXMMReg(gregOfRM(modrm)));
9988 modrm = getIByte(delta+2);
9989 if (epartIsReg(modrm)) {
9995 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
9996 DIP("mov%s %s,%s\n", wot, nameXMMReg(gregOfRM(modrm)),
10005 modrm = getIByte(delta+2);
10006 if (epartIsReg(modrm)) {
10009 gregOfRM(modrm),
10010 unop( Iop_32UtoV128, getIReg(4, eregOfRM(modrm)) )
10013 nameIReg(4,eregOfRM(modrm)), nameXMMReg(gregOfRM(modrm)));
10018 gregOfRM(modrm),
10021 DIP("movd %s, %s\n", dis_buf, nameXMMReg(gregOfRM(modrm)));
10028 modrm = getIByte(delta+2);
10029 if (epartIsReg(modrm)) {
10031 putIReg( 4, eregOfRM(modrm),
10032 getXMMRegLane32(gregOfRM(modrm), 0) );
10034 nameXMMReg(gregOfRM(modrm)), nameIReg(4,eregOfRM(modrm)));
10039 getXMMRegLane32(gregOfRM(modrm), 0) );
10040 DIP("movd %s, %s\n", nameXMMReg(gregOfRM(modrm)), dis_buf);
10047 modrm = getIByte(delta+2);
10048 if (epartIsReg(modrm)) {
10050 putXMMReg( eregOfRM(modrm),
10051 getXMMReg(gregOfRM(modrm)) );
10052 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRM(modrm)),
10053 nameXMMReg(eregOfRM(modrm)));
10058 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
10059 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRM(modrm)), dis_buf);
10069 modrm = getIByte(delta+3);
10070 if (epartIsReg(modrm)) {
10071 putXMMReg( gregOfRM(modrm),
10072 getXMMReg( eregOfRM(modrm) ));
10073 DIP("movdqu %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10074 nameXMMReg(gregOfRM(modrm)));
10078 putXMMReg( gregOfRM(modrm),
10081 nameXMMReg(gregOfRM(modrm)));
10092 modrm = getIByte(delta+3);
10093 if (epartIsReg(modrm)) {
10095 putXMMReg( eregOfRM(modrm),
10096 getXMMReg(gregOfRM(modrm)) );
10097 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRM(modrm)),
10098 nameXMMReg(eregOfRM(modrm)));
10102 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
10103 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRM(modrm)), dis_buf);
10111 modrm = getIByte(delta+3);
10112 if (epartIsReg(modrm)) {
10114 putMMXReg( gregOfRM(modrm),
10115 getXMMRegLane64( eregOfRM(modrm), 0 ));
10116 DIP("movdq2q %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10117 nameMMXReg(gregOfRM(modrm)));
10129 modrm = getIByte(delta+2);
10130 if (epartIsReg(modrm)) {
10135 putXMMRegLane64( gregOfRM(modrm), 1/*upper lane*/,
10138 nameXMMReg( gregOfRM(modrm) ));
10163 modrm = getIByte(delta+2);
10164 if (epartIsReg(modrm)) {
10169 putXMMRegLane64( gregOfRM(modrm), 0/*lower lane*/,
10172 dis_buf, nameXMMReg( gregOfRM(modrm) ));
10197 modrm = getIByte(delta+2);
10198 if (sz == 2 && epartIsReg(modrm)) {
10203 src = eregOfRM(modrm);
10210 putIReg(4, gregOfRM(modrm),
10214 nameIReg(4, gregOfRM(modrm)));
10222 modrm = getIByte(delta+2);
10223 if (sz == 2 && epartIsReg(modrm)) {
10231 assign( regD, getXMMReg( gregOfRM(modrm) ));
10240 getXMMRegLane64( eregOfRM(modrm), 1 ),
10243 getXMMRegLane64( eregOfRM(modrm), 0 ),
10257 DIP("maskmovdqu %s,%s\n", nameXMMReg( eregOfRM(modrm) ),
10258 nameXMMReg( gregOfRM(modrm) ) );
10266 modrm = getIByte(delta+2);
10267 if (sz == 2 && !epartIsReg(modrm)) {
10270 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
10272 nameXMMReg(gregOfRM(modrm)));
10282 modrm = getIByte(delta+2);
10283 if (!epartIsReg(modrm)) {
10285 storeLE( mkexpr(addr), getIReg(4, gregOfRM(modrm)) );
10287 nameIReg(4, gregOfRM(modrm)));
10297 modrm = getIByte(delta+2);
10298 if (epartIsReg(modrm)) {
10304 getXMMRegLane64( gregOfRM(modrm), 0 ));
10305 DIP("movq %s,%s\n", nameXMMReg(gregOfRM(modrm)), dis_buf );
10315 modrm = getIByte(delta+3);
10316 if (epartIsReg(modrm)) {
10318 putXMMReg( gregOfRM(modrm),
10319 unop(Iop_64UtoV128, getMMXReg( eregOfRM(modrm) )) );
10320 DIP("movq2dq %s,%s\n", nameMMXReg(eregOfRM(modrm)),
10321 nameXMMReg(gregOfRM(modrm)));
10337 modrm = getIByte(delta+3);
10338 if (epartIsReg(modrm)) {
10339 putXMMRegLane64( gregOfRM(modrm), 0,
10340 getXMMRegLane64( eregOfRM(modrm), 0 ));
10343 putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
10345 DIP("movsd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10346 nameXMMReg(gregOfRM(modrm)));
10351 putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
10353 putXMMRegLane64( gregOfRM(modrm), 0,
10356 nameXMMReg(gregOfRM(modrm)));
10366 modrm = getIByte(delta+3);
10367 if (epartIsReg(modrm)) {
10368 putXMMRegLane64( eregOfRM(modrm), 0,
10369 getXMMRegLane64( gregOfRM(modrm), 0 ));
10370 DIP("movsd %s,%s\n", nameXMMReg(gregOfRM(modrm)),
10371 nameXMMReg(eregOfRM(modrm)));
10376 getXMMRegLane64(gregOfRM(modrm), 0) );
10377 DIP("movsd %s,%s\n", nameXMMReg(gregOfRM(modrm)),
10413 modrm = insn[2];
10414 assign( dV, getXMMReg(gregOfRM(modrm)) );
10416 if (epartIsReg(modrm)) {
10417 assign( sV, getXMMReg(eregOfRM(modrm)) );
10421 nameXMMReg(eregOfRM(modrm)),
10422 nameXMMReg(gregOfRM(modrm)));
10430 nameXMMReg(gregOfRM(modrm)));
10442 gregOfRM(modrm),
10492 modrm = insn[2];
10493 assign( dV, getXMMReg(gregOfRM(modrm)) );
10495 if (epartIsReg(modrm)) {
10496 assign( sV, getXMMReg(eregOfRM(modrm)) );
10499 nameXMMReg(eregOfRM(modrm)),
10500 nameXMMReg(gregOfRM(modrm)));
10507 nameXMMReg(gregOfRM(modrm)));
10516 putXMMReg( gregOfRM(modrm),
10519 putXMMReg( gregOfRM(modrm),
10692 modrm = insn[2];
10693 if (sz == 2 && epartIsReg(modrm)) {
10696 assign(t5, getXMMReg(eregOfRM(modrm)));
10709 putIReg(4, gregOfRM(modrm), unop(Iop_16Uto32, mkexpr(t4)));
10711 (Int)insn[3], nameXMMReg(eregOfRM(modrm)),
10712 nameIReg(4,gregOfRM(modrm)));
10724 modrm = insn[2];
10726 if (epartIsReg(modrm)) {
10727 assign(t4, getIReg(2, eregOfRM(modrm)));
10731 nameIReg(2,eregOfRM(modrm)),
10732 nameXMMReg(gregOfRM(modrm)));
10740 nameXMMReg(gregOfRM(modrm)));
10743 putXMMRegLane16( gregOfRM(modrm), lane & 7, mkexpr(t4) );
10759 modrm = insn[2];
10760 if (epartIsReg(modrm)) {
10761 assign( s1V, getXMMReg(eregOfRM(modrm)) );
10763 DIP("pmaddwd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10764 nameXMMReg(gregOfRM(modrm)));
10770 nameXMMReg(gregOfRM(modrm)));
10772 assign( s2V, getXMMReg(gregOfRM(modrm)) );
10790 putXMMReg(gregOfRM(modrm), mkexpr(dV));
10828 modrm = insn[2];
10829 if (epartIsReg(modrm)) {
10832 assign(t0, getXMMRegLane64(eregOfRM(modrm), 0));
10833 assign(t1, getXMMRegLane64(eregOfRM(modrm), 1));
10840 putIReg(4, gregOfRM(modrm), mkexpr(t5));
10841 DIP("pmovmskb %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10842 nameIReg(4,gregOfRM(modrm)));
10878 modrm = insn[2];
10881 assign( dV, getMMXReg(gregOfRM(modrm)) );
10883 if (epartIsReg(modrm)) {
10884 assign( sV, getMMXReg(eregOfRM(modrm)) );
10886 DIP("pmuludq %s,%s\n", nameMMXReg(eregOfRM(modrm)),
10887 nameMMXReg(gregOfRM(modrm)));
10893 nameMMXReg(gregOfRM(modrm)));
10898 putMMXReg( gregOfRM(modrm),
10916 modrm = insn[2];
10917 assign( dV, getXMMReg(gregOfRM(modrm)) );
10919 if (epartIsReg(modrm)) {
10920 assign( sV, getXMMReg(eregOfRM(modrm)) );
10922 DIP("pmuludq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10923 nameXMMReg(gregOfRM(modrm)));
10929 nameXMMReg(gregOfRM(modrm)));
10936 putXMMRegLane64( gregOfRM(modrm), 0, mkexpr(t0) );
10938 putXMMRegLane64( gregOfRM(modrm), 1, mkexpr(t1) );
10960 modrm = insn[2];
10961 if (epartIsReg(modrm)) {
10962 assign( s1V, getXMMReg(eregOfRM(modrm)) );
10964 DIP("psadbw %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10965 nameXMMReg(gregOfRM(modrm)));
10971 nameXMMReg(gregOfRM(modrm)));
10973 assign( s2V, getXMMReg(gregOfRM(modrm)) );
10991 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11002 modrm = insn[2];
11003 if (epartIsReg(modrm)) {
11004 assign( sV, getXMMReg(eregOfRM(modrm)) );
11008 nameXMMReg(eregOfRM(modrm)),
11009 nameXMMReg(gregOfRM(modrm)));
11017 nameXMMReg(gregOfRM(modrm)));
11027 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11042 modrm = insn[3];
11043 if (epartIsReg(modrm)) {
11044 assign( sV, getXMMReg(eregOfRM(modrm)) );
11048 nameXMMReg(eregOfRM(modrm)),
11049 nameXMMReg(gregOfRM(modrm)));
11057 nameXMMReg(gregOfRM(modrm)));
11071 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11086 modrm = insn[3];
11087 if (epartIsReg(modrm)) {
11088 assign( sV, getXMMReg(eregOfRM(modrm)) );
11092 nameXMMReg(eregOfRM(modrm)),
11093 nameXMMReg(gregOfRM(modrm)));
11101 nameXMMReg(gregOfRM(modrm)));
11115 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11566 modrm = insn[3];
11567 if (epartIsReg(modrm)) {
11568 assign( sV, getXMMReg( eregOfRM(modrm)) );
11570 nameXMMReg(eregOfRM(modrm)),
11571 nameXMMReg(gregOfRM(modrm)));
11579 nameXMMReg(gregOfRM(modrm)));
11584 putXMMReg( gregOfRM(modrm),
11596 modrm = insn[3];
11597 if (epartIsReg(modrm)) {
11598 assign( sV, getXMMReg( eregOfRM(modrm)) );
11599 DIP("movddup %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11600 nameXMMReg(gregOfRM(modrm)));
11607 nameXMMReg(gregOfRM(modrm)));
11611 putXMMReg( gregOfRM(modrm), binop(Iop_64HLtoV128,mkexpr(d0),mkexpr(d0)) );
11624 modrm = insn[3];
11625 if (epartIsReg(modrm)) {
11626 assign( eV, getXMMReg( eregOfRM(modrm)) );
11627 DIP("addsubps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11628 nameXMMReg(gregOfRM(modrm)));
11634 nameXMMReg(gregOfRM(modrm)));
11638 assign( gV, getXMMReg(gregOfRM(modrm)) );
11646 putXMMReg( gregOfRM(modrm), mk128from32s( a3, s2, a1, s0 ));
11659 modrm = insn[2];
11660 if (epartIsReg(modrm)) {
11661 assign( eV, getXMMReg( eregOfRM(modrm)) );
11662 DIP("addsubpd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11663 nameXMMReg(gregOfRM(modrm)));
11669 nameXMMReg(gregOfRM(modrm)));
11673 assign( gV, getXMMReg(gregOfRM(modrm)) );
11681 putXMMReg( gregOfRM(modrm),
11699 modrm = insn[3];
11700 if (epartIsReg(modrm)) {
11701 assign( eV, getXMMReg( eregOfRM(modrm)) );
11702 DIP("h%sps %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
11703 nameXMMReg(gregOfRM(modrm)));
11709 nameXMMReg(gregOfRM(modrm)));
11713 assign( gV, getXMMReg(gregOfRM(modrm)) );
11721 putXMMReg( gregOfRM(modrm),
11741 modrm = insn[2];
11742 if (epartIsReg(modrm)) {
11743 assign( eV, getXMMReg( eregOfRM(modrm)) );
11744 DIP("h%spd %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
11745 nameXMMReg(gregOfRM(modrm)));
11751 nameXMMReg(gregOfRM(modrm)));
11755 assign( gV, getXMMReg(gregOfRM(modrm)) );
11765 putXMMReg( gregOfRM(modrm),
11773 modrm = getIByte(delta+3);
11774 if (epartIsReg(modrm)) {
11778 putXMMReg( gregOfRM(modrm),
11781 nameXMMReg(gregOfRM(modrm)));
11806 modrm = insn[3];
11808 assign( dV, getMMXReg(gregOfRM(modrm)) );
11810 if (epartIsReg(modrm)) {
11811 assign( sV, getMMXReg(eregOfRM(modrm)) );
11813 DIP("pmaddubsw %s,%s\n", nameMMXReg(eregOfRM(modrm)),
11814 nameMMXReg(gregOfRM(modrm)));
11820 nameMMXReg(gregOfRM(modrm)));
11838 gregOfRM(modrm),
11858 modrm = insn[3];
11859 assign( dV, getXMMReg(gregOfRM(modrm)) );
11861 if (epartIsReg(modrm)) {
11862 assign( sV, getXMMReg(eregOfRM(modrm)) );
11864 DIP("pmaddubsw %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11865 nameXMMReg(gregOfRM(modrm)));
11872 nameXMMReg(gregOfRM(modrm)));
11890 gregOfRM(modrm),
11924 modrm = insn[3];
11941 assign( dV, getMMXReg(gregOfRM(modrm)) );
11943 if (epartIsReg(modrm)) {
11944 assign( sV, getMMXReg(eregOfRM(modrm)) );
11946 DIP("ph%s %s,%s\n", str, nameMMXReg(eregOfRM(modrm)),
11947 nameMMXReg(gregOfRM(modrm)));
11953 nameMMXReg(gregOfRM(modrm)));
11957 gregOfRM(modrm),
11994 modrm = insn[3];
12010 assign( dV, getXMMReg(gregOfRM(modrm)) );
12012 if (epartIsReg(modrm)) {
12013 assign( sV, getXMMReg( eregOfRM(modrm)) );
12014 DIP("ph%s %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
12015 nameXMMReg(gregOfRM(modrm)));
12022 nameXMMReg(gregOfRM(modrm)));
12035 gregOfRM(modrm),
12057 modrm = insn[3];
12059 assign( dV, getMMXReg(gregOfRM(modrm)) );
12061 if (epartIsReg(modrm)) {
12062 assign( sV, getMMXReg(eregOfRM(modrm)) );
12064 DIP("pmulhrsw %s,%s\n", nameMMXReg(eregOfRM(modrm)),
12065 nameMMXReg(gregOfRM(modrm)));
12071 nameMMXReg(gregOfRM(modrm)));
12075 gregOfRM(modrm),
12092 modrm = insn[3];
12093 assign( dV, getXMMReg(gregOfRM(modrm)) );
12095 if (epartIsReg(modrm)) {
12096 assign( sV, getXMMReg(eregOfRM(modrm)) );
12098 DIP("pmulhrsw %s,%s\n", nameXMMReg(eregOfRM(modrm)),
12099 nameXMMReg(gregOfRM(modrm)));
12106 nameXMMReg(gregOfRM(modrm)));
12115 gregOfRM(modrm),
12142 modrm = insn[3];
12144 assign( dV, getMMXReg(gregOfRM(modrm)) );
12146 if (epartIsReg(modrm)) {
12147 assign( sV, getMMXReg(eregOfRM(modrm)) );
12149 DIP("psign%s %s,%s\n", str, nameMMXReg(eregOfRM(modrm)),
12150 nameMMXReg(gregOfRM(modrm)));
12156 nameMMXReg(gregOfRM(modrm)));
12160 gregOfRM(modrm),
12188 modrm = insn[3];
12189 assign( dV, getXMMReg(gregOfRM(modrm)) );
12191 if (epartIsReg(modrm)) {
12192 assign( sV, getXMMReg(eregOfRM(modrm)) );
12194 DIP("psign%s %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
12195 nameXMMReg(gregOfRM(modrm)));
12202 nameXMMReg(gregOfRM(modrm)));
12211 gregOfRM(modrm),
12237 modrm = insn[3];
12240 if (epartIsReg(modrm)) {
12241 assign( sV, getMMXReg(eregOfRM(modrm)) );
12243 DIP("pabs%s %s,%s\n", str, nameMMXReg(eregOfRM(modrm)),
12244 nameMMXReg(gregOfRM(modrm)));
12250 nameMMXReg(gregOfRM(modrm)));
12254 gregOfRM(modrm),
12279 modrm = insn[3];
12281 if (epartIsReg(modrm)) {
12282 assign( sV, getXMMReg(eregOfRM(modrm)) );
12284 DIP("pabs%s %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
12285 nameXMMReg(gregOfRM(modrm)));
12292 nameXMMReg(gregOfRM(modrm)));
12299 gregOfRM(modrm),
12315 modrm = insn[3];
12317 assign( dV, getMMXReg(gregOfRM(modrm)) );
12319 if (epartIsReg(modrm)) {
12320 assign( sV, getMMXReg(eregOfRM(modrm)) );
12324 nameMMXReg(eregOfRM(modrm)),
12325 nameMMXReg(gregOfRM(modrm)));
12333 nameMMXReg(gregOfRM(modrm)));
12358 putMMXReg( gregOfRM(modrm), mkexpr(res) );
12374 modrm = insn[3];
12375 assign( dV, getXMMReg(gregOfRM(modrm)) );
12377 if (epartIsReg(modrm)) {
12378 assign( sV, getXMMReg(eregOfRM(modrm)) );
12382 nameXMMReg(eregOfRM(modrm)),
12383 nameXMMReg(gregOfRM(modrm)));
12392 nameXMMReg(gregOfRM(modrm)));
12440 gregOfRM(modrm),
12452 modrm = insn[3];
12454 assign( dV, getMMXReg(gregOfRM(modrm)) );
12456 if (epartIsReg(modrm)) {
12457 assign( sV, getMMXReg(eregOfRM(modrm)) );
12459 DIP("pshufb %s,%s\n", nameMMXReg(eregOfRM(modrm)),
12460 nameMMXReg(gregOfRM(modrm)));
12466 nameMMXReg(gregOfRM(modrm)));
12470 gregOfRM(modrm),
12507 modrm = insn[3];
12508 assign( dV, getXMMReg(gregOfRM(modrm)) );
12510 if (epartIsReg(modrm)) {
12511 assign( sV, getXMMReg(eregOfRM(modrm)) );
12513 DIP("pshufb %s,%s\n", nameXMMReg(eregOfRM(modrm)),
12514 nameXMMReg(gregOfRM(modrm)));
12521 nameXMMReg(gregOfRM(modrm)));
12592 gregOfRM(modrm),
12621 modrm = insn[3];
12623 if (epartIsReg(modrm)) {
12625 isD ? getXMMRegLane64F( eregOfRM(modrm), 0 )
12626 : getXMMRegLane32F( eregOfRM(modrm), 0 ) );
12632 imm, nameXMMReg( eregOfRM(modrm) ),
12633 nameXMMReg( gregOfRM(modrm) ) );
12641 imm, dis_buf, nameXMMReg( gregOfRM(modrm) ) );
12652 putXMMRegLane64F( gregOfRM(modrm), 0, mkexpr(res) );
12654 putXMMRegLane32F( gregOfRM(modrm), 0, mkexpr(res) );
12668 modrm = insn[3];
12669 if (epartIsReg(modrm)) {
12670 assign(src, getIReg(sz, eregOfRM(modrm)));
12673 nameIReg(sz, eregOfRM(modrm)),
12674 nameIReg(sz, gregOfRM(modrm)));
12680 nameIReg(sz, gregOfRM(modrm)));
12684 putIReg(sz, gregOfRM(modrm), mkexpr(res));
13309 modrm = getIByte(delta);
13310 if (epartIsReg(modrm))
13317 putIReg(sz, gregOfRM(modrm), mkexpr(addr));
13319 nameIReg(sz,gregOfRM(modrm)));
13389 modrm = getIByte(delta);
13390 if (epartIsReg(modrm)) {
13393 putIReg(sz, eregOfRM(modrm), mkU(szToITy(sz), d32));
13395 nameIReg(sz,eregOfRM(modrm)));
14059 modrm = getIByte(delta);
14062 if (epartIsReg(modrm)) {
14063 assign(t1, getIReg(sz, eregOfRM(modrm)));
14064 assign(t2, getIReg(sz, gregOfRM(modrm)));
14065 putIReg(sz, gregOfRM(modrm), mkexpr(t1));
14066 putIReg(sz, eregOfRM(modrm), mkexpr(t2));
14069 nameISize(sz), nameIReg(sz,gregOfRM(modrm)),
14070 nameIReg(sz,eregOfRM(modrm)));
14075 assign( t2, getIReg(sz,gregOfRM(modrm)) );
14078 putIReg( sz, gregOfRM(modrm), mkexpr(t1) );
14081 nameIReg(sz,gregOfRM(modrm)), dis_buf);
14217 modrm = getIByte(delta);
14222 delta = dis_Grp1 ( sorb, pfx_lock, delta, modrm, am_sz, d_sz, sz, d32 );
14226 modrm = getIByte(delta);
14230 delta = dis_Grp1 ( sorb, pfx_lock, delta, modrm, am_sz, d_sz, sz, d32 );
14234 modrm = getIByte(delta);
14238 delta = dis_Grp1 ( sorb, pfx_lock, delta, modrm, am_sz, d_sz, sz, d32 );
14245 modrm = getIByte(delta);
14250 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14258 modrm = getIByte(delta);
14262 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14270 modrm = getIByte(delta);
14275 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14283 modrm = getUChar(delta);
14287 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14295 modrm = getUChar(delta);
14299 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14307 modrm = getIByte(delta);
14310 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14364 modrm = getUChar(delta);
14367 delta = dis_Grp8_Imm ( sorb, pfx_lock, delta, modrm,
14481 modrm = getIByte(delta);
14482 if (epartIsReg(modrm)) goto decode_failure;
14483 if (gregOfRM(modrm) != 1) goto decode_failure;
14682 //-- modrm = getUChar(eip);
14683 //-- vg_assert(!epartIsReg(modrm));
14685 //-- uInstr2(cb, GET, 4, ArchReg, gregOfRM(modrm), TempReg, t1);
14690 //-- DIP("movnti %s,%s\n", nameIReg(4,gregOfRM(modrm)), dis_buf);
14702 modrm = getUChar(delta);
14703 if (epartIsReg(modrm)) goto decode_failure;
14831 modrm = getIByte(delta);
14832 if (epartIsReg(modrm)) {
14834 putIReg(1, eregOfRM(modrm), mkexpr(t1));
14836 nameIReg(1,eregOfRM(modrm)));
14848 modrm = getIByte(delta);
14852 sorb, delta, modrm, sz,
14857 modrm = getIByte(delta);
14859 sorb, delta, modrm, sz,
14865 modrm = getIByte(delta);
14869 sorb, delta, modrm, sz,
14874 modrm = getIByte(delta);
14876 sorb, delta, modrm, sz,
15025 modrm = getUChar(delta);
15028 if (epartIsReg(modrm)) goto decode_failure;
15029 if (gregOfRM(modrm) != 0 && gregOfRM(modrm) != 1)
15031 switch (gregOfRM(modrm)) {
15042 mkU32(gregOfRM(modrm)) )