Home | History | Annotate | Download | only in priv

Lines Matching refs:modrm

343 /* Extract the reg field from a modRM byte. */
349 /* Figure out whether the mod and rm parts of a modRM byte refer to a
1487 /* Generate IR to calculate an address indicated by a ModRM and
1801 Is passed the a ptr to the modRM byte, the actual operation, and the
1921 Is passed the a ptr to the modRM byte, the actual operation, and the
2056 Is passed the a ptr to the modRM byte, and the data size. Returns
2100 Is passed the a ptr to the modRM byte, and the data size. Returns
2285 Int delta, UChar modrm,
2298 switch (gregOfRM(modrm)) {
2308 if (epartIsReg(modrm)) {
2311 assign(dst0, getIReg(sz,eregOfRM(modrm)));
2314 if (gregOfRM(modrm) == 2 /* ADC */) {
2318 if (gregOfRM(modrm) == 3 /* SBB */) {
2329 if (gregOfRM(modrm) < 7)
2330 putIReg(sz, eregOfRM(modrm), mkexpr(dst1));
2333 DIP("%s%c $0x%x, %s\n", nameGrp1(gregOfRM(modrm)), nameISize(sz), d32,
2334 nameIReg(sz,eregOfRM(modrm)));
2341 if (gregOfRM(modrm) == 2 /* ADC */) {
2352 if (gregOfRM(modrm) == 3 /* SBB */) {
2364 if (gregOfRM(modrm) < 7) {
2380 DIP("%s%c $0x%x, %s\n", nameGrp1(gregOfRM(modrm)), nameISize(sz),
2392 Int delta, UChar modrm,
2396 /* delta on entry points at the modrm byte. */
2410 if (epartIsReg(modrm)) {
2411 assign(dst0, getIReg(sz, eregOfRM(modrm)));
2420 switch (gregOfRM(modrm)) { case 4: case 5: case 6: case 7: isShift = True; }
2423 switch (gregOfRM(modrm)) { case 0: case 1: isRotate = True; }
2426 switch (gregOfRM(modrm)) { case 2: case 3: isRotateC = True; }
2436 Bool left = toBool(gregOfRM(modrm) == 2);
2469 switch (gregOfRM(modrm)) {
2518 Bool left = toBool(gregOfRM(modrm) == 0);
2600 if (epartIsReg(modrm)) {
2601 putIReg(sz, eregOfRM(modrm), mkexpr(dst1));
2604 nameGrp2(gregOfRM(modrm)), nameISize(sz) );
2609 vex_printf(", %s\n", nameIReg(sz,eregOfRM(modrm)));
2615 nameGrp2(gregOfRM(modrm)), nameISize(sz) );
2631 Int delta, UChar modrm,
2636 And delta on entry points at the modrm byte. */
2658 switch (gregOfRM(modrm)) {
2672 if (epartIsReg(modrm)) {
2674 assign( t2, widenUto32(getIReg(sz, eregOfRM(modrm))) );
2676 DIP("%s%c $0x%x, %s\n", nameGrp8(gregOfRM(modrm)), nameISize(sz),
2677 src_val, nameIReg(sz,eregOfRM(modrm)));
2683 DIP("%s%c $0x%x, %s\n", nameGrp8(gregOfRM(modrm)), nameISize(sz),
2688 switch (gregOfRM(modrm)) {
2708 if (gregOfRM(modrm) != 4 /* BT */) {
2709 if (epartIsReg(modrm)) {
2710 putIReg(sz, eregOfRM(modrm), narrowTo(ty, mkexpr(t2m)));
2807 UChar modrm;
2817 modrm = getIByte(delta);
2819 if (locked && (gregOfRM(modrm) != 2 && gregOfRM(modrm) != 3)) {
2825 if (epartIsReg(modrm)) {
2826 switch (gregOfRM(modrm)) {
2831 getIReg(sz,eregOfRM(modrm)),
2835 nameIReg(sz, eregOfRM(modrm)));
2847 putIReg(sz, eregOfRM(modrm),
2849 getIReg(sz, eregOfRM(modrm))));
2850 DIP("not%c %s\n", nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
2858 assign(src, getIReg(sz,eregOfRM(modrm)));
2861 putIReg(sz, eregOfRM(modrm), mkexpr(dst1));
2862 DIP("neg%c %s\n", nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
2867 assign(src, getIReg(sz,eregOfRM(modrm)));
2868 codegen_mulL_A_D ( sz, False, src, nameIReg(sz,eregOfRM(modrm)) );
2873 assign(src, getIReg(sz,eregOfRM(modrm)));
2874 codegen_mulL_A_D ( sz, True, src, nameIReg(sz,eregOfRM(modrm)) );
2878 assign( t1, getIReg(sz, eregOfRM(modrm)) );
2880 DIP("div%c %s\n", nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
2884 assign( t1, getIReg(sz, eregOfRM(modrm)) );
2886 DIP("idiv%c %s\n", nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
2897 switch (gregOfRM(modrm)) {
2967 UChar modrm;
2975 modrm = getIByte(delta);
2977 if (locked && (gregOfRM(modrm) != 0 && gregOfRM(modrm) != 1)) {
2983 if (epartIsReg(modrm)) {
2984 assign(t1, getIReg(1, eregOfRM(modrm)));
2985 switch (gregOfRM(modrm)) {
2988 putIReg(1, eregOfRM(modrm), mkexpr(t2));
2993 putIReg(1, eregOfRM(modrm), mkexpr(t2));
3001 DIP("%sb %s\n", nameGrp4(gregOfRM(modrm)),
3002 nameIReg(1, eregOfRM(modrm)));
3006 switch (gregOfRM(modrm)) {
3032 DIP("%sb %s\n", nameGrp4(gregOfRM(modrm)), dis_buf);
3044 UChar modrm;
3053 modrm = getIByte(delta);
3055 if (locked && (gregOfRM(modrm) != 0 && gregOfRM(modrm) != 1)) {
3061 if (epartIsReg(modrm)) {
3062 assign(t1, getIReg(sz,eregOfRM(modrm)));
3063 switch (gregOfRM(modrm)) {
3070 putIReg(sz,eregOfRM(modrm),mkexpr(t2));
3078 putIReg(sz,eregOfRM(modrm),mkexpr(t2));
3106 DIP("%s%c %s\n", nameGrp5(gregOfRM(modrm)),
3107 nameISize(sz), nameIReg(sz, eregOfRM(modrm)));
3111 switch (gregOfRM(modrm)) {
3162 DIP("%s%c %s\n", nameGrp5(gregOfRM(modrm)),
3855 /* On entry, delta points at the second byte of the insn (the modrm
3858 UChar modrm = getIByte(delta+0);
3863 if (modrm < 0xC0) {
3865 /* bits 5,4,3 are an opcode extension, and the modRM also
3870 switch (gregOfRM(modrm)) {
3928 vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
3934 switch (modrm) {
3937 fp_do_op_ST_ST ( "add", Iop_AddF64, modrm - 0xC0, 0, False );
3941 fp_do_op_ST_ST ( "mul", Iop_MulF64, modrm - 0xC8, 0, False );
3946 r_dst = (UInt)modrm - 0xD0;
3960 r_dst = (UInt)modrm - 0xD8;
3974 fp_do_op_ST_ST ( "sub", Iop_SubF64, modrm - 0xE0, 0, False );
3978 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, modrm - 0xE8, 0, False );
3982 fp_do_op_ST_ST ( "div", Iop_DivF64, modrm - 0xF0, 0, False );
3986 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, modrm - 0xF8, 0, False );
3998 if (modrm < 0xC0) {
4000 /* bits 5,4,3 are an opcode extension, and the modRM also
4005 switch (gregOfRM(modrm)) {
4183 vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
4190 switch (modrm) {
4193 r_src = (UInt)modrm - 0xC0;
4202 r_src = (UInt)modrm - 0xC8;
4509 Bool isSIN = modrm == 0xFE;
4540 if (modrm < 0xC0) {
4542 /* bits 5,4,3 are an opcode extension, and the modRM also
4547 switch (gregOfRM(modrm)) {
4629 vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
4637 switch (modrm) {
4640 r_src = (UInt)modrm - 0xC0;
4649 r_src = (UInt)modrm - 0xC8;
4658 r_src = (UInt)modrm - 0xD0;
4667 r_src = (UInt)modrm - 0xD8;
4699 if (modrm < 0xC0) {
4701 /* bits 5,4,3 are an opcode extension, and the modRM also
4706 switch (gregOfRM(modrm)) {
4790 vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
4798 switch (modrm) {
4801 r_src = (UInt)modrm - 0xC0;
4810 r_src = (UInt)modrm - 0xC8;
4819 r_src = (UInt)modrm - 0xD0;
4828 r_src = (UInt)modrm - 0xD8;
4881 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xE8, False );
4885 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xF0, False );
4897 if (modrm < 0xC0) {
4899 /* bits 5,4,3 are an opcode extension, and the modRM also
4904 switch (gregOfRM(modrm)) {
4960 vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
4968 switch (modrm) {
4971 fp_do_op_ST_ST ( "add", Iop_AddF64, 0, modrm - 0xC0, False );
4975 fp_do_op_ST_ST ( "mul", Iop_MulF64, 0, modrm - 0xC8, False );
4979 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, 0, modrm - 0xE0, False );
4983 fp_do_op_ST_ST ( "sub", Iop_SubF64, 0, modrm - 0xE8, False );
4987 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, 0, modrm - 0xF0, False );
4991 fp_do_op_ST_ST ( "div", Iop_DivF64, 0, modrm - 0xF8, False );
5005 if (modrm < 0xC0) {
5007 /* bits 5,4,3 are an opcode extension, and the modRM also
5012 switch (gregOfRM(modrm)) {
5151 vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
5157 switch (modrm) {
5160 r_dst = (UInt)modrm - 0xC0;
5166 r_dst = (UInt)modrm - 0xD0;
5175 r_dst = (UInt)modrm - 0xD8;
5185 r_dst = (UInt)modrm - 0xE0;
5198 r_dst = (UInt)modrm - 0xE8;
5221 if (modrm < 0xC0) {
5223 /* bits 5,4,3 are an opcode extension, and the modRM also
5229 switch (gregOfRM(modrm)) {
5315 vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
5323 switch (modrm) {
5326 fp_do_op_ST_ST ( "add", Iop_AddF64, 0, modrm - 0xC0, True );
5330 fp_do_op_ST_ST ( "mul", Iop_MulF64, 0, modrm - 0xC8, True );
5348 fp_do_oprev_ST_ST ( "subr", Iop_SubF64, 0, modrm - 0xE0, True );
5352 fp_do_op_ST_ST ( "sub", Iop_SubF64, 0, modrm - 0xE8, True );
5356 fp_do_oprev_ST_ST ( "divr", Iop_DivF64, 0, modrm - 0xF0, True );
5360 fp_do_op_ST_ST ( "div", Iop_DivF64, 0, modrm - 0xF8, True );
5374 if (modrm < 0xC0) {
5376 /* bits 5,4,3 are an opcode extension, and the modRM also
5381 switch (gregOfRM(modrm)) {
5427 vex_printf("unhandled opc_aux = 0x%2x\n", (UInt)gregOfRM(modrm));
5435 switch (modrm) {
5468 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xE8, True );
5473 fp_do_ucomi_ST0_STi( (UInt)modrm - 0xF0, True );
5563 UChar modrm = getIByte(delta);
5564 Bool isReg = epartIsReg(modrm);
5653 argG = getMMXReg(gregOfRM(modrm));
5659 argE = getMMXReg(eregOfRM(modrm));
5691 putMMXReg( gregOfRM(modrm), mkexpr(res) );
5695 ( isReg ? nameMMXReg(eregOfRM(modrm)) : dis_buf ),
5696 nameMMXReg(gregOfRM(modrm)) );
5841 UChar modrm;
5855 modrm = getIByte(delta);
5856 if (epartIsReg(modrm)) {
5859 gregOfRM(modrm),
5862 getIReg(4, eregOfRM(modrm)) ) );
5864 nameIReg(4,eregOfRM(modrm)), nameMMXReg(gregOfRM(modrm)));
5869 gregOfRM(modrm),
5873 DIP("movd %s, %s\n", dis_buf, nameMMXReg(gregOfRM(modrm)));
5880 modrm = getIByte(delta);
5881 if (epartIsReg(modrm)) {
5883 putIReg( 4, eregOfRM(modrm),
5884 unop(Iop_64to32, getMMXReg(gregOfRM(modrm)) ) );
5886 nameMMXReg(gregOfRM(modrm)), nameIReg(4,eregOfRM(modrm)));
5891 unop(Iop_64to32, getMMXReg(gregOfRM(modrm)) ) );
5892 DIP("movd %s, %s\n", nameMMXReg(gregOfRM(modrm)), dis_buf);
5900 modrm = getIByte(delta);
5901 if (epartIsReg(modrm)) {
5903 putMMXReg( gregOfRM(modrm), getMMXReg(eregOfRM(modrm)) );
5905 nameMMXReg(eregOfRM(modrm)), nameMMXReg(gregOfRM(modrm)));
5909 putMMXReg( gregOfRM(modrm), loadLE(Ity_I64, mkexpr(addr)) );
5911 dis_buf, nameMMXReg(gregOfRM(modrm)));
5919 modrm = getIByte(delta);
5920 if (epartIsReg(modrm)) {
5922 putMMXReg( eregOfRM(modrm), getMMXReg(gregOfRM(modrm)) );
5924 nameMMXReg(gregOfRM(modrm)), nameMMXReg(eregOfRM(modrm)));
5928 storeLE( mkexpr(addr), getMMXReg(gregOfRM(modrm)) );
5930 nameMMXReg(gregOfRM(modrm)), dis_buf);
6136 modrm = getIByte(delta);
6137 if (sz != 4 || (!epartIsReg(modrm)))
6142 assign( regM, getMMXReg( eregOfRM(modrm) ));
6143 assign( regD, getMMXReg( gregOfRM(modrm) ));
6155 DIP("maskmovq %s,%s\n", nameMMXReg( eregOfRM(modrm) ),
6156 nameMMXReg( gregOfRM(modrm) ) );
6181 Int delta, UChar modrm,
6189 for printing it. And eip on entry points at the modrm byte. */
6222 assign( gsrc, getIReg(sz, gregOfRM(modrm)) );
6224 if (epartIsReg(modrm)) {
6226 assign( esrc, getIReg(sz, eregOfRM(modrm)) );
6230 nameIReg(sz, gregOfRM(modrm)), nameIReg(sz, eregOfRM(modrm)));
6238 nameIReg(sz, gregOfRM(modrm)), dis_buf);
6286 if (epartIsReg(modrm)) {
6287 putIReg(sz, eregOfRM(modrm), mkexpr(tmpRes));
6319 UChar modrm;
6336 modrm = getIByte(delta);
6338 assign( t_bitno0, widenSto32(getIReg(sz, gregOfRM(modrm))) );
6340 if (epartIsReg(modrm)) {
6354 storeLE( mkexpr(t_esp), getIReg(sz, eregOfRM(modrm)) );
6417 if (locked && !epartIsReg(modrm)) {
6443 if (epartIsReg(modrm)) {
6445 putIReg(sz, eregOfRM(modrm), loadLE(szToITy(sz), mkexpr(t_esp)) );
6450 nameBtOp(op), nameISize(sz), nameIReg(sz, gregOfRM(modrm)),
6451 ( epartIsReg(modrm) ? nameIReg(sz, eregOfRM(modrm)) : dis_buf ) );
6463 UChar modrm;
6476 modrm = getIByte(delta);
6478 isReg = epartIsReg(modrm);
6481 assign( src, getIReg(sz, eregOfRM(modrm)) );
6491 ( isReg ? nameIReg(sz, eregOfRM(modrm)) : dis_buf ),
6492 nameIReg(sz, gregOfRM(modrm)));
6553 widenUto32( getIReg( sz, gregOfRM(modrm) ) )
6563 putIReg( sz, gregOfRM(modrm), mkexpr(dst) );
8087 UChar opc, modrm, abyte, pre;
8236 // with any prefix and ModRM, SIB and disp combination:
8270 modrm = getUChar(delta);
8271 if (epartIsReg(modrm)) {
8375 modrm = getIByte(delta+2);
8377 vassert(!epartIsReg(modrm));
8446 modrm = getIByte(delta+2);
8448 vassert(!epartIsReg(modrm));
8580 modrm = getIByte(delta+2);
8581 if (epartIsReg(modrm)) {
8582 assign( argR, getXMMRegLane32F( eregOfRM(modrm), 0/*lowest lane*/ ) );
8584 DIP("[u]comiss %s,%s\n", nameXMMReg(eregOfRM(modrm)),
8585 nameXMMReg(gregOfRM(modrm)) );
8591 nameXMMReg(gregOfRM(modrm)) );
8593 assign( argL, getXMMRegLane32F( gregOfRM(modrm), 0/*lowest lane*/ ) );
8618 modrm = getIByte(delta+2);
8619 if (epartIsReg(modrm)) {
8623 assign( arg64, getMMXReg(eregOfRM(modrm)) );
8625 DIP("cvtpi2ps %s,%s\n", nameMMXReg(eregOfRM(modrm)),
8626 nameXMMReg(gregOfRM(modrm)));
8632 nameXMMReg(gregOfRM(modrm)) );
8638 gregOfRM(modrm), 0,
8645 gregOfRM(modrm), 1,
8661 modrm = getIByte(delta+3);
8662 if (epartIsReg(modrm)) {
8663 assign( arg32, getIReg(4, eregOfRM(modrm)) );
8665 DIP("cvtsi2ss %s,%s\n", nameIReg(4, eregOfRM(modrm)),
8666 nameXMMReg(gregOfRM(modrm)));
8672 nameXMMReg(gregOfRM(modrm)) );
8678 gregOfRM(modrm), 0,
8698 modrm = getIByte(delta+2);
8700 if (epartIsReg(modrm)) {
8702 assign(f32lo, getXMMRegLane32F(eregOfRM(modrm), 0));
8703 assign(f32hi, getXMMRegLane32F(eregOfRM(modrm), 1));
8705 nameXMMReg(eregOfRM(modrm)),
8706 nameMMXReg(gregOfRM(modrm)));
8716 nameMMXReg(gregOfRM(modrm)));
8737 putMMXReg(gregOfRM(modrm), mkexpr(dst64));
8752 modrm = getIByte(delta+3);
8753 if (epartIsReg(modrm)) {
8755 assign(f32lo, getXMMRegLane32F(eregOfRM(modrm), 0));
8757 nameXMMReg(eregOfRM(modrm)),
8758 nameIReg(4, gregOfRM(modrm)));
8765 nameIReg(4, gregOfRM(modrm)));
8774 putIReg(4, gregOfRM(modrm),
8803 modrm = getIByte(delta+2);
8804 vassert(!epartIsReg(modrm));
8866 modrm = getIByte(delta+2);
8867 if (sz == 4 && !epartIsReg(modrm)) {
8870 storeLE( mkexpr(addr), getMMXReg(gregOfRM(modrm)) );
8872 nameMMXReg(gregOfRM(modrm)));
8901 modrm = insn[2];
8902 if (sz == 4 && epartIsReg(modrm)) {
8906 assign(sV, getMMXReg(eregOfRM(modrm)));
8915 putIReg(4, gregOfRM(modrm), unop(Iop_16Uto32, mkexpr(t5)));
8917 (Int)insn[3], nameMMXReg(eregOfRM(modrm)),
8918 nameIReg(4,gregOfRM(modrm)));
8936 modrm = insn[2];
8939 assign(t5, getMMXReg(gregOfRM(modrm)));
8942 if (epartIsReg(modrm)) {
8943 assign(t4, getIReg(2, eregOfRM(modrm)));
8947 nameIReg(2,eregOfRM(modrm)),
8948 nameMMXReg(gregOfRM(modrm)));
8956 nameMMXReg(gregOfRM(modrm)));
8966 putMMXReg(gregOfRM(modrm), mkexpr(t6));
9011 modrm = insn[2];
9012 if (epartIsReg(modrm)) {
9016 assign(t0, getMMXReg(eregOfRM(modrm)));
9018 putIReg(4, gregOfRM(modrm), mkexpr(t1));
9019 DIP("pmovmskb %s,%s\n", nameMMXReg(eregOfRM(modrm)),
9020 nameIReg(4,gregOfRM(modrm)));
9045 modrm = getIByte(delta+2);
9046 vassert(!epartIsReg(modrm));
9051 switch (gregOfRM(modrm)) {
9070 modrm = getIByte(delta+2);
9071 vassert(!epartIsReg(modrm));
9076 switch (gregOfRM(modrm)) {
9104 modrm = insn[2];
9105 if (epartIsReg(modrm)) {
9106 assign( sV, getMMXReg(eregOfRM(modrm)) );
9110 nameMMXReg(eregOfRM(modrm)),
9111 nameMMXReg(gregOfRM(modrm)));
9119 nameMMXReg(gregOfRM(modrm)));
9129 putMMXReg(gregOfRM(modrm), mkexpr(dV));
9180 modrm = getIByte(delta+2);
9181 if (epartIsReg(modrm)) {
9182 putXMMReg( gregOfRM(modrm),
9183 getXMMReg( eregOfRM(modrm) ));
9184 DIP("mov[ua]ps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9185 nameXMMReg(gregOfRM(modrm)));
9191 putXMMReg( gregOfRM(modrm),
9194 nameXMMReg(gregOfRM(modrm)));
9204 modrm = getIByte(delta+2);
9205 if (epartIsReg(modrm)) {
9211 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
9212 DIP("mov[ua]ps %s,%s\n", nameXMMReg(gregOfRM(modrm)),
9222 modrm = getIByte(delta+2);
9223 if (epartIsReg(modrm)) {
9225 putXMMRegLane64( gregOfRM(modrm), 1/*upper lane*/,
9226 getXMMRegLane64( eregOfRM(modrm), 0 ) );
9227 DIP("movhps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9228 nameXMMReg(gregOfRM(modrm)));
9232 putXMMRegLane64( gregOfRM(modrm), 1/*upper lane*/,
9235 nameXMMReg( gregOfRM(modrm) ));
9259 modrm = getIByte(delta+2);
9260 if (epartIsReg(modrm)) {
9262 putXMMRegLane64( gregOfRM(modrm),
9264 getXMMRegLane64( eregOfRM(modrm), 1 ));
9265 DIP("movhlps %s, %s\n", nameXMMReg(eregOfRM(modrm)),
9266 nameXMMReg(gregOfRM(modrm)));
9270 putXMMRegLane64( gregOfRM(modrm), 0/*lower lane*/,
9273 dis_buf, nameXMMReg( gregOfRM(modrm) ));
9297 modrm = getIByte(delta+2);
9298 if (sz == 4 && epartIsReg(modrm)) {
9305 src = eregOfRM(modrm);
9318 putIReg(4, gregOfRM(modrm),
9325 nameIReg(4, gregOfRM(modrm)));
9334 modrm = getIByte(delta+2);
9335 if (!epartIsReg(modrm)) {
9338 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
9341 nameXMMReg(gregOfRM(modrm)));
9352 modrm = getIByte(delta+3);
9353 if (epartIsReg(modrm)) {
9354 putXMMRegLane32( gregOfRM(modrm), 0,
9355 getXMMRegLane32( eregOfRM(modrm), 0 ));
9356 DIP("movss %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9357 nameXMMReg(gregOfRM(modrm)));
9362 putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
9364 putXMMRegLane32( gregOfRM(modrm), 1, mkU32(0) );
9366 putXMMRegLane32( gregOfRM(modrm), 0,
9369 nameXMMReg(gregOfRM(modrm)));
9379 modrm = getIByte(delta+3);
9380 if (epartIsReg(modrm)) {
9385 getXMMRegLane32(gregOfRM(modrm), 0) );
9386 DIP("movss %s,%s\n", nameXMMReg(gregOfRM(modrm)),
9452 modrm = insn[2];
9453 assign( dV, getXMMReg(gregOfRM(modrm)) );
9455 if (epartIsReg(modrm)) {
9456 assign( sV, getXMMReg(eregOfRM(modrm)) );
9460 nameXMMReg(eregOfRM(modrm)),
9461 nameXMMReg(gregOfRM(modrm)));
9469 nameXMMReg(gregOfRM(modrm)));
9479 gregOfRM(modrm),
9508 modrm = getIByte(delta+2);
9510 vassert(!epartIsReg(modrm));
9553 modrm = insn[2];
9554 assign( dV, getXMMReg(gregOfRM(modrm)) );
9556 if (epartIsReg(modrm)) {
9557 assign( sV, getXMMReg(eregOfRM(modrm)) );
9560 nameXMMReg(eregOfRM(modrm)),
9561 nameXMMReg(gregOfRM(modrm)));
9568 nameXMMReg(gregOfRM(modrm)));
9575 putXMMReg( gregOfRM(modrm), mk128from32s( s3, d3, s2, d2 ) );
9577 putXMMReg( gregOfRM(modrm), mk128from32s( s1, d1, s0, d0 ) );
9647 modrm = getIByte(delta+2);
9648 if (epartIsReg(modrm)) {
9649 assign( argR, getXMMRegLane64F( eregOfRM(modrm), 0/*lowest lane*/ ) );
9651 DIP("[u]comisd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9652 nameXMMReg(gregOfRM(modrm)) );
9658 nameXMMReg(gregOfRM(modrm)) );
9660 assign( argL, getXMMRegLane64F( gregOfRM(modrm), 0/*lowest lane*/ ) );
9682 modrm = getIByte(delta+3);
9683 if (epartIsReg(modrm)) {
9684 assign( arg64, getXMMRegLane64(eregOfRM(modrm), 0) );
9686 DIP("cvtdq2pd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9687 nameXMMReg(gregOfRM(modrm)));
9693 nameXMMReg(gregOfRM(modrm)) );
9697 gregOfRM(modrm), 0,
9702 gregOfRM(modrm), 1,
9715 modrm = getIByte(delta+2);
9716 if (epartIsReg(modrm)) {
9717 assign( argV, getXMMReg(eregOfRM(modrm)) );
9719 DIP("cvtdq2ps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9720 nameXMMReg(gregOfRM(modrm)));
9726 nameXMMReg(gregOfRM(modrm)) );
9736 putXMMRegLane32F( gregOfRM(modrm), 3, CVT(t3) );
9737 putXMMRegLane32F( gregOfRM(modrm), 2, CVT(t2) );
9738 putXMMRegLane32F( gregOfRM(modrm), 1, CVT(t1) );
9739 putXMMRegLane32F( gregOfRM(modrm), 0, CVT(t0) );
9753 modrm = getIByte(delta+3);
9754 if (epartIsReg(modrm)) {
9755 assign( argV, getXMMReg(eregOfRM(modrm)) );
9757 DIP("cvtpd2dq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9758 nameXMMReg(gregOfRM(modrm)));
9764 nameXMMReg(gregOfRM(modrm)) );
9779 putXMMRegLane32( gregOfRM(modrm), 3, mkU32(0) );
9780 putXMMRegLane32( gregOfRM(modrm), 2, mkU32(0) );
9781 putXMMRegLane32( gregOfRM(modrm), 1, CVT(t1) );
9782 putXMMRegLane32( gregOfRM(modrm), 0, CVT(t0) );
9801 modrm = getIByte(delta+2);
9803 if (epartIsReg(modrm)) {
9805 assign(f64lo, getXMMRegLane64F(eregOfRM(modrm), 0));
9806 assign(f64hi, getXMMRegLane64F(eregOfRM(modrm), 1));
9808 nameXMMReg(eregOfRM(modrm)),
9809 nameMMXReg(gregOfRM(modrm)));
9819 nameMMXReg(gregOfRM(modrm)));
9836 putMMXReg(gregOfRM(modrm), mkexpr(dst64));
9849 modrm = getIByte(delta+2);
9850 if (epartIsReg(modrm)) {
9851 assign( argV, getXMMReg(eregOfRM(modrm)) );
9853 DIP("cvtpd2ps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9854 nameXMMReg(gregOfRM(modrm)));
9860 nameXMMReg(gregOfRM(modrm)) );
9875 putXMMRegLane32( gregOfRM(modrm), 3, mkU32(0) );
9876 putXMMRegLane32( gregOfRM(modrm), 2, mkU32(0) );
9877 putXMMRegLane32F( gregOfRM(modrm), 1, CVT(t1) );
9878 putXMMRegLane32F( gregOfRM(modrm), 0, CVT(t0) );
9890 modrm = getIByte(delta+2);
9891 if (epartIsReg(modrm)) {
9899 assign( arg64, getMMXReg(eregOfRM(modrm)) );
9901 DIP("cvtpi2pd %s,%s\n", nameMMXReg(eregOfRM(modrm)),
9902 nameXMMReg(gregOfRM(modrm)));
9908 nameXMMReg(gregOfRM(modrm)) );
9912 gregOfRM(modrm), 0,
9917 gregOfRM(modrm), 1,
9930 modrm = getIByte(delta+2);
9931 if (epartIsReg(modrm)) {
9932 assign( argV, getXMMReg(eregOfRM(modrm)) );
9934 DIP("cvtps2dq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9935 nameXMMReg(gregOfRM(modrm)));
9941 nameXMMReg(gregOfRM(modrm)) );
9955 putXMMRegLane32( gregOfRM(modrm), 3, CVT(t3) );
9956 putXMMRegLane32( gregOfRM(modrm), 2, CVT(t2) );
9957 putXMMRegLane32( gregOfRM(modrm), 1, CVT(t1) );
9958 putXMMRegLane32( gregOfRM(modrm), 0, CVT(t0) );
9971 modrm = getIByte(delta+2);
9972 if (epartIsReg(modrm)) {
9973 assign( f32lo, getXMMRegLane32F(eregOfRM(modrm), 0) );
9974 assign( f32hi, getXMMRegLane32F(eregOfRM(modrm), 1) );
9976 DIP("cvtps2pd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
9977 nameXMMReg(gregOfRM(modrm)));
9985 nameXMMReg(gregOfRM(modrm)) );
9988 putXMMRegLane64F( gregOfRM(modrm), 1,
9990 putXMMRegLane64F( gregOfRM(modrm), 0,
10007 modrm = getIByte(delta+3);
10008 if (epartIsReg(modrm)) {
10010 assign(f64lo, getXMMRegLane64F(eregOfRM(modrm), 0));
10012 nameXMMReg(eregOfRM(modrm)),
10013 nameIReg(4, gregOfRM(modrm)));
10020 nameIReg(4, gregOfRM(modrm)));
10029 putIReg(4, gregOfRM(modrm),
10042 modrm = getIByte(delta+3);
10043 if (epartIsReg(modrm)) {
10045 assign(f64lo, getXMMRegLane64F(eregOfRM(modrm), 0));
10046 DIP("cvtsd2ss %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10047 nameXMMReg(gregOfRM(modrm)));
10053 nameXMMReg(gregOfRM(modrm)));
10058 gregOfRM(modrm), 0,
10071 modrm = getIByte(delta+3);
10072 if (epartIsReg(modrm)) {
10073 assign( arg32, getIReg(4, eregOfRM(modrm)) );
10075 DIP("cvtsi2sd %s,%s\n", nameIReg(4, eregOfRM(modrm)),
10076 nameXMMReg(gregOfRM(modrm)));
10082 nameXMMReg(gregOfRM(modrm)) );
10086 gregOfRM(modrm), 0,
10098 modrm = getIByte(delta+3);
10099 if (epartIsReg(modrm)) {
10101 assign(f32lo, getXMMRegLane32F(eregOfRM(modrm), 0));
10102 DIP("cvtss2sd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10103 nameXMMReg(gregOfRM(modrm)));
10109 nameXMMReg(gregOfRM(modrm)));
10112 putXMMRegLane64F( gregOfRM(modrm), 0,
10124 modrm = getIByte(delta+2);
10125 if (epartIsReg(modrm)) {
10126 assign( argV, getXMMReg(eregOfRM(modrm)) );
10128 DIP("cvttpd2dq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10129 nameXMMReg(gregOfRM(modrm)));
10135 nameXMMReg(gregOfRM(modrm)) );
10151 putXMMRegLane32( gregOfRM(modrm), 3, mkU32(0) );
10152 putXMMRegLane32( gregOfRM(modrm), 2, mkU32(0) );
10153 putXMMRegLane32( gregOfRM(modrm), 1, CVT(t1) );
10154 putXMMRegLane32( gregOfRM(modrm), 0, CVT(t0) );
10168 modrm = getIByte(delta+3);
10169 if (epartIsReg(modrm)) {
10170 assign( argV, getXMMReg(eregOfRM(modrm)) );
10172 modrm)),
10173 nameXMMReg(gregOfRM(modrm)));
10179 nameXMMReg(gregOfRM(modrm)) );
10193 putXMMRegLane32( gregOfRM(modrm), 3, CVT(t3) );
10194 putXMMRegLane32( gregOfRM(modrm), 2, CVT(t2) );
10195 putXMMRegLane32( gregOfRM(modrm), 1, CVT(t1) );
10196 putXMMRegLane32( gregOfRM(modrm), 0, CVT(t0) );
10263 modrm = getIByte(delta+2);
10264 if (epartIsReg(modrm)) {
10265 putXMMReg( gregOfRM(modrm),
10266 getXMMReg( eregOfRM(modrm) ));
10267 DIP("mov%s %s,%s\n", wot, nameXMMReg(eregOfRM(modrm)),
10268 nameXMMReg(gregOfRM(modrm)));
10274 putXMMReg( gregOfRM(modrm),
10277 nameXMMReg(gregOfRM(modrm)));
10288 modrm = getIByte(delta+2);
10289 if (epartIsReg(modrm)) {
10295 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
10296 DIP("mov%s %s,%s\n", wot, nameXMMReg(gregOfRM(modrm)),
10305 modrm = getIByte(delta+2);
10306 if (epartIsReg(modrm)) {
10309 gregOfRM(modrm),
10310 unop( Iop_32UtoV128, getIReg(4, eregOfRM(modrm)) )
10313 nameIReg(4,eregOfRM(modrm)), nameXMMReg(gregOfRM(modrm)));
10318 gregOfRM(modrm),
10321 DIP("movd %s, %s\n", dis_buf, nameXMMReg(gregOfRM(modrm)));
10328 modrm = getIByte(delta+2);
10329 if (epartIsReg(modrm)) {
10331 putIReg( 4, eregOfRM(modrm),
10332 getXMMRegLane32(gregOfRM(modrm), 0) );
10334 nameXMMReg(gregOfRM(modrm)), nameIReg(4,eregOfRM(modrm)));
10339 getXMMRegLane32(gregOfRM(modrm), 0) );
10340 DIP("movd %s, %s\n", nameXMMReg(gregOfRM(modrm)), dis_buf);
10347 modrm = getIByte(delta+2);
10348 if (epartIsReg(modrm)) {
10350 putXMMReg( eregOfRM(modrm),
10351 getXMMReg(gregOfRM(modrm)) );
10352 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRM(modrm)),
10353 nameXMMReg(eregOfRM(modrm)));
10358 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
10359 DIP("movdqa %s, %s\n", nameXMMReg(gregOfRM(modrm)), dis_buf);
10369 modrm = getIByte(delta+3);
10370 if (epartIsReg(modrm)) {
10371 putXMMReg( gregOfRM(modrm),
10372 getXMMReg( eregOfRM(modrm) ));
10373 DIP("movdqu %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10374 nameXMMReg(gregOfRM(modrm)));
10378 putXMMReg( gregOfRM(modrm),
10381 nameXMMReg(gregOfRM(modrm)));
10392 modrm = getIByte(delta+3);
10393 if (epartIsReg(modrm)) {
10395 putXMMReg( eregOfRM(modrm),
10396 getXMMReg(gregOfRM(modrm)) );
10397 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRM(modrm)),
10398 nameXMMReg(eregOfRM(modrm)));
10402 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
10403 DIP("movdqu %s, %s\n", nameXMMReg(gregOfRM(modrm)), dis_buf);
10411 modrm = getIByte(delta+3);
10412 if (epartIsReg(modrm)) {
10414 putMMXReg( gregOfRM(modrm),
10415 getXMMRegLane64( eregOfRM(modrm), 0 ));
10416 DIP("movdq2q %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10417 nameMMXReg(gregOfRM(modrm)));
10429 modrm = getIByte(delta+2);
10430 if (epartIsReg(modrm)) {
10435 putXMMRegLane64( gregOfRM(modrm), 1/*upper lane*/,
10438 nameXMMReg( gregOfRM(modrm) ));
10463 modrm = getIByte(delta+2);
10464 if (epartIsReg(modrm)) {
10469 putXMMRegLane64( gregOfRM(modrm), 0/*lower lane*/,
10472 dis_buf, nameXMMReg( gregOfRM(modrm) ));
10497 modrm = getIByte(delta+2);
10498 if (sz == 2 && epartIsReg(modrm)) {
10503 src = eregOfRM(modrm);
10510 putIReg(4, gregOfRM(modrm),
10514 nameIReg(4, gregOfRM(modrm)));
10522 modrm = getIByte(delta+2);
10523 if (sz == 2 && epartIsReg(modrm)) {
10531 assign( regD, getXMMReg( gregOfRM(modrm) ));
10540 getXMMRegLane64( eregOfRM(modrm), 1 ),
10543 getXMMRegLane64( eregOfRM(modrm), 0 ),
10557 DIP("maskmovdqu %s,%s\n", nameXMMReg( eregOfRM(modrm) ),
10558 nameXMMReg( gregOfRM(modrm) ) );
10566 modrm = getIByte(delta+2);
10567 if (sz == 2 && !epartIsReg(modrm)) {
10570 storeLE( mkexpr(addr), getXMMReg(gregOfRM(modrm)) );
10572 nameXMMReg(gregOfRM(modrm)));
10582 modrm = getIByte(delta+2);
10583 if (!epartIsReg(modrm)) {
10585 storeLE( mkexpr(addr), getIReg(4, gregOfRM(modrm)) );
10587 nameIReg(4, gregOfRM(modrm)));
10597 modrm = getIByte(delta+2);
10598 if (epartIsReg(modrm)) {
10604 getXMMRegLane64( gregOfRM(modrm), 0 ));
10605 DIP("movq %s,%s\n", nameXMMReg(gregOfRM(modrm)), dis_buf );
10615 modrm = getIByte(delta+3);
10616 if (epartIsReg(modrm)) {
10618 putXMMReg( gregOfRM(modrm),
10619 unop(Iop_64UtoV128, getMMXReg( eregOfRM(modrm) )) );
10620 DIP("movq2dq %s,%s\n", nameMMXReg(eregOfRM(modrm)),
10621 nameXMMReg(gregOfRM(modrm)));
10637 modrm = getIByte(delta+3);
10638 if (epartIsReg(modrm)) {
10639 putXMMRegLane64( gregOfRM(modrm), 0,
10640 getXMMRegLane64( eregOfRM(modrm), 0 ));
10643 putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
10645 DIP("movsd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
10646 nameXMMReg(gregOfRM(modrm)));
10651 putXMMRegLane64( gregOfRM(modrm), 1, mkU64(0) );
10653 putXMMRegLane64( gregOfRM(modrm), 0,
10656 nameXMMReg(gregOfRM(modrm)));
10666 modrm = getIByte(delta+3);
10667 if (epartIsReg(modrm)) {
10668 putXMMRegLane64( eregOfRM(modrm), 0,
10669 getXMMRegLane64( gregOfRM(modrm), 0 ));
10670 DIP("movsd %s,%s\n", nameXMMReg(gregOfRM(modrm)),
10671 nameXMMReg(eregOfRM(modrm)));
10676 getXMMRegLane64(gregOfRM(modrm), 0) );
10677 DIP("movsd %s,%s\n", nameXMMReg(gregOfRM(modrm)),
10713 modrm = insn[2];
10714 assign( dV, getXMMReg(gregOfRM(modrm)) );
10716 if (epartIsReg(modrm)) {
10717 assign( sV, getXMMReg(eregOfRM(modrm)) );
10721 nameXMMReg(eregOfRM(modrm)),
10722 nameXMMReg(gregOfRM(modrm)));
10730 nameXMMReg(gregOfRM(modrm)));
10742 gregOfRM(modrm),
10792 modrm = insn[2];
10793 assign( dV, getXMMReg(gregOfRM(modrm)) );
10795 if (epartIsReg(modrm)) {
10796 assign( sV, getXMMReg(eregOfRM(modrm)) );
10799 nameXMMReg(eregOfRM(modrm)),
10800 nameXMMReg(gregOfRM(modrm)));
10807 nameXMMReg(gregOfRM(modrm)));
10816 putXMMReg( gregOfRM(modrm),
10819 putXMMReg( gregOfRM(modrm),
10992 modrm = insn[2];
10993 if (sz == 2 && epartIsReg(modrm)) {
10996 assign(t5, getXMMReg(eregOfRM(modrm)));
11009 putIReg(4, gregOfRM(modrm), unop(Iop_16Uto32, mkexpr(t4)));
11011 (Int)insn[3], nameXMMReg(eregOfRM(modrm)),
11012 nameIReg(4,gregOfRM(modrm)));
11024 modrm = insn[2];
11026 if (epartIsReg(modrm)) {
11027 assign(t4, getIReg(2, eregOfRM(modrm)));
11031 nameIReg(2,eregOfRM(modrm)),
11032 nameXMMReg(gregOfRM(modrm)));
11040 nameXMMReg(gregOfRM(modrm)));
11043 putXMMRegLane16( gregOfRM(modrm), lane & 7, mkexpr(t4) );
11059 modrm = insn[2];
11060 if (epartIsReg(modrm)) {
11061 assign( s1V, getXMMReg(eregOfRM(modrm)) );
11063 DIP("pmaddwd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11064 nameXMMReg(gregOfRM(modrm)));
11070 nameXMMReg(gregOfRM(modrm)));
11072 assign( s2V, getXMMReg(gregOfRM(modrm)) );
11090 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11126 modrm = insn[2];
11127 if (epartIsReg(modrm)) {
11130 assign(t0, getXMMRegLane64(eregOfRM(modrm), 0));
11131 assign(t1, getXMMRegLane64(eregOfRM(modrm), 1));
11138 putIReg(4, gregOfRM(modrm), mkexpr(t5));
11139 DIP("pmovmskb %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11140 nameIReg(4,gregOfRM(modrm)));
11176 modrm = insn[2];
11179 assign( dV, getMMXReg(gregOfRM(modrm)) );
11181 if (epartIsReg(modrm)) {
11182 assign( sV, getMMXReg(eregOfRM(modrm)) );
11184 DIP("pmuludq %s,%s\n", nameMMXReg(eregOfRM(modrm)),
11185 nameMMXReg(gregOfRM(modrm)));
11191 nameMMXReg(gregOfRM(modrm)));
11196 putMMXReg( gregOfRM(modrm),
11214 modrm = insn[2];
11215 assign( dV, getXMMReg(gregOfRM(modrm)) );
11217 if (epartIsReg(modrm)) {
11218 assign( sV, getXMMReg(eregOfRM(modrm)) );
11220 DIP("pmuludq %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11221 nameXMMReg(gregOfRM(modrm)));
11227 nameXMMReg(gregOfRM(modrm)));
11234 putXMMRegLane64( gregOfRM(modrm), 0, mkexpr(t0) );
11236 putXMMRegLane64( gregOfRM(modrm), 1, mkexpr(t1) );
11258 modrm = insn[2];
11259 if (epartIsReg(modrm)) {
11260 assign( s1V, getXMMReg(eregOfRM(modrm)) );
11262 DIP("psadbw %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11263 nameXMMReg(gregOfRM(modrm)));
11269 nameXMMReg(gregOfRM(modrm)));
11271 assign( s2V, getXMMReg(gregOfRM(modrm)) );
11289 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11300 modrm = insn[2];
11301 if (epartIsReg(modrm)) {
11302 assign( sV, getXMMReg(eregOfRM(modrm)) );
11306 nameXMMReg(eregOfRM(modrm)),
11307 nameXMMReg(gregOfRM(modrm)));
11315 nameXMMReg(gregOfRM(modrm)));
11325 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11340 modrm = insn[3];
11341 if (epartIsReg(modrm)) {
11342 assign( sV, getXMMReg(eregOfRM(modrm)) );
11346 nameXMMReg(eregOfRM(modrm)),
11347 nameXMMReg(gregOfRM(modrm)));
11355 nameXMMReg(gregOfRM(modrm)));
11369 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11384 modrm = insn[3];
11385 if (epartIsReg(modrm)) {
11386 assign( sV, getXMMReg(eregOfRM(modrm)) );
11390 nameXMMReg(eregOfRM(modrm)),
11391 nameXMMReg(gregOfRM(modrm)));
11399 nameXMMReg(gregOfRM(modrm)));
11413 putXMMReg(gregOfRM(modrm), mkexpr(dV));
11858 modrm = insn[3];
11859 if (epartIsReg(modrm)) {
11860 assign( sV, getXMMReg( eregOfRM(modrm)) );
11862 nameXMMReg(eregOfRM(modrm)),
11863 nameXMMReg(gregOfRM(modrm)));
11871 nameXMMReg(gregOfRM(modrm)));
11876 putXMMReg( gregOfRM(modrm),
11888 modrm = insn[3];
11889 if (epartIsReg(modrm)) {
11890 assign( sV, getXMMReg( eregOfRM(modrm)) );
11891 DIP("movddup %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11892 nameXMMReg(gregOfRM(modrm)));
11899 nameXMMReg(gregOfRM(modrm)));
11903 putXMMReg( gregOfRM(modrm), binop(Iop_64HLtoV128,mkexpr(d0),mkexpr(d0)) );
11917 modrm = insn[3];
11918 if (epartIsReg(modrm)) {
11919 assign( eV, getXMMReg( eregOfRM(modrm)) );
11920 DIP("addsubps %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11921 nameXMMReg(gregOfRM(modrm)));
11927 nameXMMReg(gregOfRM(modrm)));
11931 assign( gV, getXMMReg(gregOfRM(modrm)) );
11940 putXMMReg( gregOfRM(modrm), mk128from32s( a3, s2, a1, s0 ));
11954 modrm = insn[2];
11955 if (epartIsReg(modrm)) {
11956 assign( eV, getXMMReg( eregOfRM(modrm)) );
11957 DIP("addsubpd %s,%s\n", nameXMMReg(eregOfRM(modrm)),
11958 nameXMMReg(gregOfRM(modrm)));
11964 nameXMMReg(gregOfRM(modrm)));
11968 assign( gV, getXMMReg(gregOfRM(modrm)) );
11977 putXMMReg( gregOfRM(modrm),
11996 modrm = insn[3];
11997 if (epartIsReg(modrm)) {
11998 assign( eV, getXMMReg( eregOfRM(modrm)) );
11999 DIP("h%sps %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
12000 nameXMMReg(gregOfRM(modrm)));
12006 nameXMMReg(gregOfRM(modrm)));
12010 assign( gV, getXMMReg(gregOfRM(modrm)) );
12019 putXMMReg( gregOfRM(modrm),
12040 modrm = insn[2];
12041 if (epartIsReg(modrm)) {
12042 assign( eV, getXMMReg( eregOfRM(modrm)) );
12043 DIP("h%spd %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
12044 nameXMMReg(gregOfRM(modrm)));
12050 nameXMMReg(gregOfRM(modrm)));
12054 assign( gV, getXMMReg(gregOfRM(modrm)) );
12065 putXMMReg( gregOfRM(modrm),
12073 modrm = getIByte(delta+3);
12074 if (epartIsReg(modrm)) {
12078 putXMMReg( gregOfRM(modrm),
12081 nameXMMReg(gregOfRM(modrm)));
12106 modrm = insn[3];
12108 assign( dV, getMMXReg(gregOfRM(modrm)) );
12110 if (epartIsReg(modrm)) {
12111 assign( sV, getMMXReg(eregOfRM(modrm)) );
12113 DIP("pmaddubsw %s,%s\n", nameMMXReg(eregOfRM(modrm)),
12114 nameMMXReg(gregOfRM(modrm)));
12120 nameMMXReg(gregOfRM(modrm)));
12138 gregOfRM(modrm),
12158 modrm = insn[3];
12159 assign( dV, getXMMReg(gregOfRM(modrm)) );
12161 if (epartIsReg(modrm)) {
12162 assign( sV, getXMMReg(eregOfRM(modrm)) );
12164 DIP("pmaddubsw %s,%s\n", nameXMMReg(eregOfRM(modrm)),
12165 nameXMMReg(gregOfRM(modrm)));
12172 nameXMMReg(gregOfRM(modrm)));
12190 gregOfRM(modrm),
12224 modrm = insn[3];
12241 assign( dV, getMMXReg(gregOfRM(modrm)) );
12243 if (epartIsReg(modrm)) {
12244 assign( sV, getMMXReg(eregOfRM(modrm)) );
12246 DIP("ph%s %s,%s\n", str, nameMMXReg(eregOfRM(modrm)),
12247 nameMMXReg(gregOfRM(modrm)));
12253 nameMMXReg(gregOfRM(modrm)));
12257 gregOfRM(modrm),
12294 modrm = insn[3];
12310 assign( dV, getXMMReg(gregOfRM(modrm)) );
12312 if (epartIsReg(modrm)) {
12313 assign( sV, getXMMReg( eregOfRM(modrm)) );
12314 DIP("ph%s %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
12315 nameXMMReg(gregOfRM(modrm)));
12322 nameXMMReg(gregOfRM(modrm)));
12335 gregOfRM(modrm),
12357 modrm = insn[3];
12359 assign( dV, getMMXReg(gregOfRM(modrm)) );
12361 if (epartIsReg(modrm)) {
12362 assign( sV, getMMXReg(eregOfRM(modrm)) );
12364 DIP("pmulhrsw %s,%s\n", nameMMXReg(eregOfRM(modrm)),
12365 nameMMXReg(gregOfRM(modrm)));
12371 nameMMXReg(gregOfRM(modrm)));
12375 gregOfRM(modrm),
12392 modrm = insn[3];
12393 assign( dV, getXMMReg(gregOfRM(modrm)) );
12395 if (epartIsReg(modrm)) {
12396 assign( sV, getXMMReg(eregOfRM(modrm)) );
12398 DIP("pmulhrsw %s,%s\n", nameXMMReg(eregOfRM(modrm)),
12399 nameXMMReg(gregOfRM(modrm)));
12406 nameXMMReg(gregOfRM(modrm)));
12415 gregOfRM(modrm),
12442 modrm = insn[3];
12444 assign( dV, getMMXReg(gregOfRM(modrm)) );
12446 if (epartIsReg(modrm)) {
12447 assign( sV, getMMXReg(eregOfRM(modrm)) );
12449 DIP("psign%s %s,%s\n", str, nameMMXReg(eregOfRM(modrm)),
12450 nameMMXReg(gregOfRM(modrm)));
12456 nameMMXReg(gregOfRM(modrm)));
12460 gregOfRM(modrm),
12488 modrm = insn[3];
12489 assign( dV, getXMMReg(gregOfRM(modrm)) );
12491 if (epartIsReg(modrm)) {
12492 assign( sV, getXMMReg(eregOfRM(modrm)) );
12494 DIP("psign%s %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
12495 nameXMMReg(gregOfRM(modrm)));
12502 nameXMMReg(gregOfRM(modrm)));
12511 gregOfRM(modrm),
12537 modrm = insn[3];
12540 if (epartIsReg(modrm)) {
12541 assign( sV, getMMXReg(eregOfRM(modrm)) );
12543 DIP("pabs%s %s,%s\n", str, nameMMXReg(eregOfRM(modrm)),
12544 nameMMXReg(gregOfRM(modrm)));
12550 nameMMXReg(gregOfRM(modrm)));
12554 gregOfRM(modrm),
12579 modrm = insn[3];
12581 if (epartIsReg(modrm)) {
12582 assign( sV, getXMMReg(eregOfRM(modrm)) );
12584 DIP("pabs%s %s,%s\n", str, nameXMMReg(eregOfRM(modrm)),
12585 nameXMMReg(gregOfRM(modrm)));
12592 nameXMMReg(gregOfRM(modrm)));
12599 gregOfRM(modrm),
12615 modrm = insn[3];
12617 assign( dV, getMMXReg(gregOfRM(modrm)) );
12619 if (epartIsReg(modrm)) {
12620 assign( sV, getMMXReg(eregOfRM(modrm)) );
12624 nameMMXReg(eregOfRM(modrm)),
12625 nameMMXReg(gregOfRM(modrm)));
12633 nameMMXReg(gregOfRM(modrm)));
12658 putMMXReg( gregOfRM(modrm), mkexpr(res) );
12674 modrm = insn[3];
12675 assign( dV, getXMMReg(gregOfRM(modrm)) );
12677 if (epartIsReg(modrm)) {
12678 assign( sV, getXMMReg(eregOfRM(modrm)) );
12682 nameXMMReg(eregOfRM(modrm)),
12683 nameXMMReg(gregOfRM(modrm)));
12692 nameXMMReg(gregOfRM(modrm)));
12740 gregOfRM(modrm),
12752 modrm = insn[3];
12754 assign( dV, getMMXReg(gregOfRM(modrm)) );
12756 if (epartIsReg(modrm)) {
12757 assign( sV, getMMXReg(eregOfRM(modrm)) );
12759 DIP("pshufb %s,%s\n", nameMMXReg(eregOfRM(modrm)),
12760 nameMMXReg(gregOfRM(modrm)));
12766 nameMMXReg(gregOfRM(modrm)));
12770 gregOfRM(modrm),
12807 modrm = insn[3];
12808 assign( dV, getXMMReg(gregOfRM(modrm)) );
12810 if (epartIsReg(modrm)) {
12811 assign( sV, getXMMReg(eregOfRM(modrm)) );
12813 DIP("pshufb %s,%s\n", nameXMMReg(eregOfRM(modrm)),
12814 nameXMMReg(gregOfRM(modrm)));
12821 nameXMMReg(gregOfRM(modrm)));
12892 gregOfRM(modrm),
12905 modrm = insn[3];
12914 putIReg(sz, gregOfRM(modrm), mkexpr(dst));
12915 DIP("movbe %s,%s\n", dis_buf, nameIReg(sz, gregOfRM(modrm)));
12917 assign(src, getIReg(sz, gregOfRM(modrm)));
12920 DIP("movbe %s,%s\n", nameIReg(sz, gregOfRM(modrm)), dis_buf);
12948 modrm = insn[3];
12950 if (epartIsReg(modrm)) {
12952 isD ? getXMMRegLane64F( eregOfRM(modrm), 0 )
12953 : getXMMRegLane32F( eregOfRM(modrm), 0 ) );
12959 imm, nameXMMReg( eregOfRM(modrm) ),
12960 nameXMMReg( gregOfRM(modrm) ) );
12968 imm, dis_buf, nameXMMReg( gregOfRM(modrm) ) );
12979 putXMMRegLane64F( gregOfRM(modrm), 0, mkexpr(res) );
12981 putXMMRegLane32F( gregOfRM(modrm), 0, mkexpr(res) );
12995 modrm = insn[3];
12996 if (epartIsReg(modrm)) {
12997 assign(src, getIReg(sz, eregOfRM(modrm)));
13000 nameIReg(sz, eregOfRM(modrm)),
13001 nameIReg(sz, gregOfRM(modrm)));
13007 nameIReg(sz, gregOfRM(modrm)));
13011 putIReg(sz, gregOfRM(modrm), mkexpr(res));
13642 modrm = getIByte(delta);
13643 if (epartIsReg(modrm))
13650 putIReg(sz, gregOfRM(modrm), mkexpr(addr));
13652 nameIReg(sz,gregOfRM(modrm)));
13722 modrm = getIByte(delta);
13723 if (gregOfRM(modrm) == 0) {
13724 if (epartIsReg(modrm)) {
13727 putIReg(sz, eregOfRM(modrm), mkU(szToITy(sz), d32));
13729 nameIReg(sz,eregOfRM(modrm)));
14408 modrm = getIByte(delta);
14411 if (epartIsReg(modrm)) {
14412 assign(t1, getIReg(sz, eregOfRM(modrm)));
14413 assign(t2, getIReg(sz, gregOfRM(modrm)));
14414 putIReg(sz, gregOfRM(modrm), mkexpr(t1));
14415 putIReg(sz, eregOfRM(modrm), mkexpr(t2));
14418 nameISize(sz), nameIReg(sz,gregOfRM(modrm)),
14419 nameIReg(sz,eregOfRM(modrm)));
14424 assign( t2, getIReg(sz,gregOfRM(modrm)) );
14427 putIReg( sz, gregOfRM(modrm), mkexpr(t1) );
14430 nameIReg(sz,gregOfRM(modrm)), dis_buf);
14566 modrm = getIByte(delta);
14571 delta = dis_Grp1 ( sorb, pfx_lock, delta, modrm, am_sz, d_sz, sz, d32 );
14575 modrm = getIByte(delta);
14579 delta = dis_Grp1 ( sorb, pfx_lock, delta, modrm, am_sz, d_sz, sz, d32 );
14583 modrm = getIByte(delta);
14587 delta = dis_Grp1 ( sorb, pfx_lock, delta, modrm, am_sz, d_sz, sz, d32 );
14594 modrm = getIByte(delta);
14599 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14607 modrm = getIByte(delta);
14611 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14619 modrm = getIByte(delta);
14624 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14632 modrm = getUChar(delta);
14636 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14644 modrm = getUChar(delta);
14648 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14656 modrm = getIByte(delta);
14659 delta = dis_Grp2 ( sorb, delta, modrm, am_sz, d_sz, sz,
14713 modrm = getUChar(delta);
14716 delta = dis_Grp8_Imm ( sorb, pfx_lock, delta, modrm,
14817 modrm = getIByte(delta);
14818 if (epartIsReg(modrm)) goto decode_failure;
14819 if (gregOfRM(modrm) != 1) goto decode_failure;
15026 //-- modrm = getUChar(eip);
15027 //-- vg_assert(!epartIsReg(modrm));
15029 //-- uInstr2(cb, GET, 4, ArchReg, gregOfRM(modrm), TempReg, t1);
15034 //-- DIP("movnti %s,%s\n", nameIReg(4,gregOfRM(modrm)), dis_buf);
15046 modrm = getUChar(delta);
15047 if (epartIsReg(modrm)) goto decode_failure;
15177 modrm = getIByte(delta);
15178 if (epartIsReg(modrm)) {
15180 putIReg(1, eregOfRM(modrm), mkexpr(t1));
15182 nameIReg(1,eregOfRM(modrm)));
15194 modrm = getIByte(delta);
15198 sorb, delta, modrm, sz,
15203 modrm = getIByte(delta);
15205 sorb, delta, modrm, sz,
15211 modrm = getIByte(delta);
15215 sorb, delta, modrm, sz,
15220 modrm = getIByte(delta);
15222 sorb, delta, modrm, sz,
15371 modrm = getUChar(delta);
15372 if (epartIsReg(modrm)) goto decode_failure;
15373 if (gregOfRM(modrm) != 0 && gregOfRM(modrm) != 1)
15377 switch (gregOfRM(modrm)) {
15388 mkU32(gregOfRM(modrm)) )