From: Julian Seward Date: Wed, 8 Dec 2004 17:01:23 +0000 (+0000) Subject: Delete commented-out bits of the old UCode insn decoder. X-Git-Tag: svn/VALGRIND_3_0_1^2~699 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a310e39a1ff022240a4b3b538d435ed8e37a0846;p=thirdparty%2Fvalgrind.git Delete commented-out bits of the old UCode insn decoder. git-svn-id: svn://svn.valgrind.org/vex/trunk@635 --- diff --git a/VEX/priv/guest-x86/toIR.c b/VEX/priv/guest-x86/toIR.c index 987765843e..ef6224f83b 100644 --- a/VEX/priv/guest-x86/toIR.c +++ b/VEX/priv/guest-x86/toIR.c @@ -1355,27 +1355,6 @@ static void helper_SBB ( Int sz, //-- *ecx_ret = ecx; //-- *edx_ret = edx; //-- } -//-- -//-- -//-- /*------------------------------------------------------------*/ -//-- /*--- Here so it can be inlined everywhere. ---*/ -//-- /*------------------------------------------------------------*/ -//-- -//-- /* Allocate a new temp reg number. */ -//-- __inline__ Int VG_(get_new_temp) ( UCodeBlock* cb ) -//-- { -//-- Int t = cb->nextTemp; -//-- cb->nextTemp += 2; -//-- return t; -//-- } -//-- -//-- Int VG_(get_new_shadow) ( UCodeBlock* cb ) -//-- { -//-- Int t = cb->nextTemp; -//-- cb->nextTemp += 2; -//-- return SHADOW(t); -//-- } - static HChar* nameGrp1 ( Int opc_aux ) @@ -1490,47 +1469,6 @@ static Char nameISize ( Int size ) } } -//-- __inline__ static UInt LOW24 ( UInt x ) -//-- { -//-- return x & 0x00FFFFFF; -//-- } -//-- -//-- __inline__ static UInt HI8 ( UInt x ) -//-- { -//-- return x >> 24; -//-- } -//-- -//-- /*------------------------------------------------------------*/ -//-- /*--- Flag-related helpers. ---*/ -//-- /*------------------------------------------------------------*/ -//-- -//-- static void setFlagsFromUOpcode ( UCodeBlock* cb, Int uopc ) -//-- { -//-- switch (uopc) { -//-- case XOR: case OR: case AND: -//-- uFlagsRWU(cb, FlagsEmpty, FlagsOSZCP, FlagA); break; -//-- case ADC: case SBB: -//-- uFlagsRWU(cb, FlagC, FlagsOSZACP, FlagsEmpty); break; -//-- case MUL: case UMUL: -//-- uFlagsRWU(cb, FlagsEmpty, FlagsOC, FlagsSZAP); break; -//-- case ADD: case SUB: case NEG: -//-- uFlagsRWU(cb, FlagsEmpty, FlagsOSZACP, FlagsEmpty); break; -//-- case INC: case DEC: -//-- uFlagsRWU(cb, FlagsEmpty, FlagsOSZAP, FlagsEmpty); break; -//-- case SHR: case SAR: case SHL: -//-- uFlagsRWU(cb, FlagsEmpty, FlagsOSZCP, FlagA); break; -//-- case ROL: case ROR: -//-- uFlagsRWU(cb, FlagsEmpty, FlagsOC, FlagsEmpty); break; -//-- case RCR: case RCL: -//-- uFlagsRWU(cb, FlagC, FlagsOC, FlagsEmpty); break; -//-- case NOT: -//-- uFlagsRWU(cb, FlagsEmpty, FlagsEmpty, FlagsEmpty); break; -//-- default: -//-- VG_(printf)("unhandled case is %s\n", -//-- VG_(name_UOpcode)(True, uopc)); -//-- VG_(core_panic)("setFlagsFromUOpcode: unhandled case"); -//-- } -//-- } /*------------------------------------------------------------*/ /*--- JMP helpers ---*/ @@ -2368,53 +2306,6 @@ void codegen_div ( Int sz, IRTemp t, Bool signed_divide ) default: vpanic("codegen_div(x86)"); } } -//-- Int helper; -//-- Int ta = newTemp(cb); -//-- Int td = newTemp(cb); -//-- -//-- switch (sz) { -//-- case 4: helper = (signed_divide ? VGOFF_(helper_idiv_64_32) -//-- : VGOFF_(helper_div_64_32)); -//-- break; -//-- case 2: helper = (signed_divide ? VGOFF_(helper_idiv_32_16) -//-- : VGOFF_(helper_div_32_16)); -//-- break; -//-- case 1: helper = (signed_divide ? VGOFF_(helper_idiv_16_8) -//-- : VGOFF_(helper_div_16_8)); -//-- break; -//-- default: VG_(core_panic)("codegen_div"); -//-- } -//-- uInstr0(cb, CALLM_S, 0); -//-- if (sz == 4 || sz == 2) { -//-- uInstr1(cb, PUSH, sz, TempReg, t); -//-- uInstr2(cb, GET, sz, ArchReg, R_EAX, TempReg, ta); -//-- uInstr1(cb, PUSH, sz, TempReg, ta); -//-- uInstr2(cb, GET, sz, ArchReg, R_EDX, TempReg, td); -//-- uInstr1(cb, PUSH, sz, TempReg, td); -//-- uInstr1(cb, CALLM, 0, Lit16, helper); -//-- uFlagsRWU(cb, FlagsEmpty, FlagsEmpty, FlagsOSZACP); -//-- uInstr1(cb, POP, sz, TempReg, t); -//-- uInstr2(cb, PUT, sz, TempReg, t, ArchReg, R_EDX); -//-- uInstr1(cb, POP, sz, TempReg, t); -//-- uInstr2(cb, PUT, sz, TempReg, t, ArchReg, R_EAX); -//-- uInstr1(cb, CLEAR, 0, Lit16, 4); -//-- } else { -//-- uInstr1(cb, PUSH, 1, TempReg, t); -//-- uInstr2(cb, GET, 2, ArchReg, R_EAX, TempReg, ta); -//-- uInstr1(cb, PUSH, 2, TempReg, ta); -//-- uInstr2(cb, MOV, 1, Literal, 0, TempReg, td); -//-- uLiteral(cb, 0); -//-- uInstr1(cb, PUSH, 1, TempReg, td); -//-- uInstr1(cb, CALLM, 0, Lit16, helper); -//-- uFlagsRWU(cb, FlagsEmpty, FlagsEmpty, FlagsOSZACP); -//-- uInstr1(cb, POP, 1, TempReg, t); -//-- uInstr2(cb, PUT, 1, TempReg, t, ArchReg, R_AL); -//-- uInstr1(cb, POP, 1, TempReg, t); -//-- uInstr2(cb, PUT, 1, TempReg, t, ArchReg, R_AH); -//-- uInstr1(cb, CLEAR, 0, Lit16, 4); -//-- } -//-- uInstr0(cb, CALLM_E, 0); -//-- } static @@ -6317,552 +6208,6 @@ UInt dis_mov_Sw_Ew ( UChar sorb, } - -//-- /* Simple MMX operations, either -//-- op (src)mmxreg, (dst)mmxreg -//-- or -//-- op (src)address, (dst)mmxreg -//-- opc is the byte following the 0x0F prefix. -//-- */ -//-- static -//-- Addr dis_MMXop_regmem_to_reg ( UCodeBlock* cb, -//-- UChar sorb, -//-- Addr eip, -//-- UChar opc, -//-- Char* name, -//-- Bool show_granularity ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- Bool isReg = epartIsReg(modrm); -//-- -//-- if (isReg) { -//-- eip++; -//-- uInstr1(cb, MMX2, 0, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm) ); -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr2(cb, MMX2_MemRd, 8, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm), -//-- TempReg, tmpa); -//-- } -//-- -//-- DIP("%s%s %s, %s\n", -//-- name, show_granularity ? nameMMXGran(opc & 3) : (Char*)"", -//-- ( isReg ? nameMMXReg(eregOfRM(modrm)) : dis_buf ), -//-- nameMMXReg(gregOfRM(modrm)) ); -//-- -//-- return eip; -//-- } -//-- -//-- -//-- /* Simple MMX operations, either -//-- op (src)mmxreg, (dst)mmxreg -//-- or -//-- op (src)address, (dst)mmxreg -//-- opc is the byte following the 0x0F prefix. -//-- */ -//-- static -//-- Addr dis_MMXop_regmem_to_reg_Imm8 ( UCodeBlock* cb, -//-- UChar sorb, -//-- Addr eip, -//-- UChar opc, -//-- Char* name, -//-- Bool show_granularity ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- UChar imm8; -//-- Bool isReg = epartIsReg(modrm); -//-- -//-- if (isReg) { -//-- eip++; -//-- imm8 = getUChar(eip); -//-- eip++; -//-- uInstr2(cb, MMX3, 0, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm), -//-- Lit16, -//-- ((UShort)imm8)); -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- imm8 = getUChar(eip); -//-- eip++; -//-- uInstr3(cb, MMX2a1_MemRd, 8, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm), -//-- Lit16, -//-- ((UShort)imm8), -//-- TempReg, tmpa); -//-- } -//-- -//-- DIP("%s%s %s, %s, $%d\n", -//-- name, show_granularity ? nameMMXGran(opc & 3) : (Char*)"", -//-- ( isReg ? nameMMXReg(eregOfRM(modrm)) : dis_buf ), -//-- nameMMXReg(gregOfRM(modrm)), (Int)imm8 ); -//-- -//-- return eip; -//-- } -//-- -//-- -//-- -//-- /* Simple SSE operations, either -//-- op (src)xmmreg, (dst)xmmreg -//-- or -//-- op (src)address, (dst)xmmreg -//-- 3 opcode bytes. -//-- Supplied eip points to the first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE3_reg_or_mem ( UCodeBlock* cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Char* name, -//-- UChar opc1, -//-- UChar opc2, -//-- UChar opc3 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- Bool isReg = epartIsReg(modrm); -//-- -//-- if (isReg) { -//-- /* Completely internal SSE insn. */ -//-- uInstr2(cb, SSE4, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)opc1) << 8) | (UShort)opc2, -//-- Lit16, (((UShort)opc3) << 8) | (UShort)modrm ); -//-- eip++; -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr3(cb, SSE3a_MemRd, sz, -//-- Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2), -//-- Lit16, (((UShort)(opc3)) << 8) | ((UShort)modrm), -//-- TempReg, tmpa); -//-- } -//-- -//-- DIP("%s %s, %s\n", -//-- name, -//-- ( isReg ? nameXMMReg(eregOfRM(modrm)) : dis_buf ), -//-- nameXMMReg(gregOfRM(modrm)) ); -//-- -//-- return eip; -//-- } -//-- -//-- -//-- /* Simple SSE operations, either -//-- op (src)xmmreg, (dst)xmmreg -//-- or -//-- op (src)address, (dst)xmmreg -//-- 2 opcode bytes. -//-- Supplied eip points to the first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE2_reg_or_mem ( UCodeBlock* cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Char* name, -//-- UChar opc1, -//-- UChar opc2 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- Bool isReg = epartIsReg(modrm); -//-- -//-- if (isReg) { -//-- /* Completely internal SSE insn. */ -//-- uInstr2(cb, SSE3, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)opc1) << 8) | (UShort)opc2, -//-- Lit16, (UShort)modrm ); -//-- eip++; -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr3(cb, SSE2a_MemRd, sz, -//-- Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2), -//-- Lit16, (UShort)modrm, -//-- TempReg, tmpa); -//-- } -//-- DIP("%s %s, %s\n", -//-- name, -//-- ( isReg ? nameXMMReg(eregOfRM(modrm)) : dis_buf ), -//-- nameXMMReg(gregOfRM(modrm)) ); -//-- -//-- return eip; -//-- } -//-- -//-- -//-- /* Simple SSE operations, either -//-- op (src)xmmreg, (dst)xmmreg -//-- or -//-- op (src)address, (dst)xmmreg -//-- 2 opcode bytes and an 8-bit immediate after the amode. -//-- Supplied eip points to the first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE2_reg_or_mem_Imm8 ( UCodeBlock* cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Char* name, -//-- UChar opc1, -//-- UChar opc2 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- UChar imm8; -//-- Bool isReg = epartIsReg(modrm); -//-- -//-- if (isReg) { -//-- /* Completely internal SSE insn. */ -//-- eip++; -//-- imm8 = getUChar(eip); -//-- uInstr2(cb, SSE4, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)opc1) << 8) | (UShort)opc2, -//-- Lit16, (((UShort)modrm) << 8) | (UShort)imm8 ); -//-- eip++; -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- imm8 = getUChar(eip); -//-- eip++; -//-- uInstr3(cb, SSE2a1_MemRd, sz, -//-- Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2), -//-- Lit16, (((UShort)(modrm)) << 8) | ((UShort)imm8), -//-- TempReg, tmpa); -//-- } -//-- DIP("%s %s, %s, $%d\n", -//-- name, ( isReg ? nameXMMReg(eregOfRM(modrm)) : dis_buf ), -//-- nameXMMReg(gregOfRM(modrm)), (Int)imm8 ); -//-- return eip; -//-- } -//-- -//-- -//-- /* Simple SSE operations, either -//-- op (src)xmmreg, (dst)xmmreg -//-- or -//-- op (src)address, (dst)xmmreg -//-- 3 opcode bytes and an 8-bit immediate after the amode. -//-- Supplied eip points to the first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE3_reg_or_mem_Imm8 ( UCodeBlock* cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Char* name, -//-- UChar opc1, -//-- UChar opc2, -//-- UChar opc3 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- UChar imm8; -//-- Bool isReg = epartIsReg(modrm); -//-- -//-- if (isReg) { -//-- /* Completely internal SSE insn. */ -//-- eip++; -//-- imm8 = getUChar(eip); -//-- uInstr3(cb, SSE5, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)opc1) << 8) | (UShort)opc2, -//-- Lit16, (((UShort)opc3) << 8) | (UShort)modrm, -//-- Lit16, (UShort)imm8 ); -//-- eip++; -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- imm8 = getUChar(eip); -//-- eip++; -//-- uInstr3(cb, SSE3a1_MemRd, sz, -//-- Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2), -//-- Lit16, (((UShort)(opc3)) << 8) | ((UShort)modrm), -//-- TempReg, tmpa); -//-- uLiteral(cb, imm8); -//-- } -//-- DIP("%s %s, %s, $%d\n", -//-- name, ( isReg ? nameXMMReg(eregOfRM(modrm)) : dis_buf ), -//-- nameXMMReg(gregOfRM(modrm)), (Int)imm8 ); -//-- return eip; -//-- } -//-- -//-- -//-- /* Disassemble an SSE insn which is either a simple reg-reg move or a -//-- move between registers and memory. Supplied eip points to the -//-- first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE3_load_store_or_mov ( UCodeBlock* cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Bool is_store, -//-- Char* name, -//-- UChar insn0, -//-- UChar insn1, -//-- UChar insn2 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- Bool isReg = epartIsReg(modrm); -//-- UInt pair; -//-- Int t1; -//-- -//-- if (isReg) { -//-- /* Completely internal; we can issue SSE4. */ -//-- eip++; -//-- uInstr2(cb, SSE4, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)insn0) << 8) | (UShort)insn1, -//-- Lit16, (((UShort)insn2) << 8) | (UShort)modrm ); -//-- } else { -//-- pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- t1 = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr3(cb, is_store ? SSE3a_MemWr : SSE3a_MemRd, sz, -//-- Lit16, (((UShort)insn0) << 8) | (UShort)insn1, -//-- Lit16, (((UShort)insn2) << 8) | (UShort)modrm, -//-- TempReg, t1 ); -//-- } -//-- -//-- if (is_store) { -//-- DIP("%s %s, %s\n", -//-- name, -//-- nameXMMReg(gregOfRM(modrm)), -//-- ( isReg ? nameXMMReg(eregOfRM(modrm)) : dis_buf ) ); -//-- } else { -//-- DIP("%s %s, %s\n", -//-- name, -//-- ( isReg ? nameXMMReg(eregOfRM(modrm)) : dis_buf ), -//-- nameXMMReg(gregOfRM(modrm)) ); -//-- } -//-- return eip; -//-- } -//-- -//-- -//-- /* Disassemble an SSE insn which is either a simple reg-reg move or a -//-- move between registers and memory. Supplied eip points to the -//-- first address mode byte. */ -//-- static -//-- Addr dis_SSE2_load_store_or_mov ( UCodeBlock* cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Bool is_store, -//-- Char* name, -//-- UChar insn0, -//-- UChar insn1 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- Bool isReg = epartIsReg(modrm); -//-- UInt pair; -//-- Int t1; -//-- -//-- if (isReg) { -//-- /* Completely internal; we can issue SSE3. */ -//-- eip++; -//-- uInstr2(cb, SSE3, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)insn0) << 8) | (UShort)insn1, -//-- Lit16, (UShort)modrm ); -//-- } else { -//-- pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- t1 = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr3(cb, is_store ? SSE2a_MemWr : SSE2a_MemRd, sz, -//-- Lit16, (((UShort)insn0) << 8) | (UShort)insn1, -//-- Lit16, (UShort)modrm, -//-- TempReg, t1 ); -//-- } -//-- -//-- if (is_store) { -//-- DIP("%s %s, %s\n", -//-- name, -//-- nameXMMReg(gregOfRM(modrm)), -//-- ( isReg ? nameXMMReg(eregOfRM(modrm)) : dis_buf ) ); -//-- } else { -//-- DIP("%s %s, %s\n", -//-- name, -//-- ( isReg ? nameXMMReg(eregOfRM(modrm)) : dis_buf ), -//-- nameXMMReg(gregOfRM(modrm)) ); -//-- } -//-- return eip; -//-- } -//-- -//-- -//-- /* Simple SSE operations, either -//-- op (src)xmmreg, (dst)mmxreg -//-- or -//-- op (src)address, (dst)mmxreg -//-- 2 opcode bytes. -//-- Supplied eip points to the first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE2_to_MMX ( UCodeBlock *cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Char* name, -//-- UChar opc1, -//-- UChar opc2 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- if (epartIsReg(modrm)) { -//-- /* Completely internal SSE insn. */ -//-- uInstr2(cb, SSE3, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)opc1) << 8) | (UShort)opc2, -//-- Lit16, (UShort)modrm ); -//-- DIP("%s %s, %s\n", -//-- name, nameXMMReg(eregOfRM(modrm)), nameMMXReg(gregOfRM(modrm)) ); -//-- eip++; -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr3(cb, SSE2a_MemRd, sz, -//-- Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2), -//-- Lit16, ((UShort)modrm), -//-- TempReg, tmpa); -//-- DIP("%s %s, %s\n", name, dis_buf, nameMMXReg(gregOfRM(modrm))); -//-- } -//-- return eip; -//-- } -//-- -//-- -//-- /* Simple SSE operations, either -//-- op (src)mmxreg, (dst)xmmreg -//-- or -//-- op (src)address, (dst)xmmreg -//-- 2 opcode bytes. -//-- Supplied eip points to the first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE2_from_MMX ( UCodeBlock *cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Char* name, -//-- UChar opc1, -//-- UChar opc2 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- if (epartIsReg(modrm)) { -//-- /* Completely internal SSE insn. */ -//-- uInstr2(cb, SSE3, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)opc1) << 8) | (UShort)opc2, -//-- Lit16, (UShort)modrm ); -//-- DIP("%s %s, %s\n", -//-- name, nameMMXReg(eregOfRM(modrm)), nameXMMReg(gregOfRM(modrm)) ); -//-- eip++; -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr3(cb, SSE2a_MemRd, sz, -//-- Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2), -//-- Lit16, ((UShort)modrm), -//-- TempReg, tmpa); -//-- DIP("%s %s, %s\n", name, dis_buf, nameXMMReg(gregOfRM(modrm))); -//-- } -//-- return eip; -//-- } -//-- -//-- -//-- /* Simple SSE operations, either -//-- op (src)xmmreg, (dst)mmxreg -//-- or -//-- op (src)address, (dst)mmxreg -//-- 3 opcode bytes. -//-- Supplied eip points to the first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE3_to_MMX ( UCodeBlock *cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Char* name, -//-- UChar opc1, -//-- UChar opc2, -//-- UChar opc3 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- if (epartIsReg(modrm)) { -//-- /* Completely internal SSE insn. */ -//-- uInstr2(cb, SSE4, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)opc1) << 8) | (UShort)opc2, -//-- Lit16, (((UShort)opc3) << 8) | (UShort)modrm ); -//-- DIP("%s %s, %s\n", -//-- name, nameXMMReg(eregOfRM(modrm)), nameMMXReg(gregOfRM(modrm)) ); -//-- eip++; -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr3(cb, SSE3a_MemRd, sz, -//-- Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2), -//-- Lit16, (((UShort)(opc3)) << 8) | ((UShort)modrm), -//-- TempReg, tmpa); -//-- DIP("%s %s, %s\n", name, dis_buf, nameMMXReg(gregOfRM(modrm))); -//-- } -//-- return eip; -//-- } -//-- -//-- -//-- /* Simple SSE operations, either -//-- op (src)mmxreg, (dst)xmmreg -//-- or -//-- op (src)address, (dst)xmmreg -//-- 3 opcode bytes. -//-- Supplied eip points to the first address mode byte. -//-- */ -//-- static -//-- Addr dis_SSE3_from_MMX ( UCodeBlock *cb, -//-- UChar sorb, -//-- Addr eip, -//-- Int sz, -//-- Char* name, -//-- UChar opc1, -//-- UChar opc2, -//-- UChar opc3 ) -//-- { -//-- HChar dis_buf[50]; -//-- UChar modrm = getUChar(eip); -//-- if (epartIsReg(modrm)) { -//-- /* Completely internal SSE insn. */ -//-- uInstr2(cb, SSE4, 0, /* ignore sz for internal ops */ -//-- Lit16, (((UShort)opc1) << 8) | (UShort)opc2, -//-- Lit16, (((UShort)opc3) << 8) | (UShort)modrm ); -//-- DIP("%s %s, %s\n", -//-- name, nameMMXReg(eregOfRM(modrm)), nameXMMReg(gregOfRM(modrm)) ); -//-- eip++; -//-- } else { -//-- UInt pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- Int tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr3(cb, SSE3a_MemRd, sz, -//-- Lit16, (((UShort)(opc1)) << 8) | ((UShort)opc2), -//-- Lit16, (((UShort)(opc3)) << 8) | ((UShort)modrm), -//-- TempReg, tmpa); -//-- DIP("%s %s, %s\n", name, dis_buf, nameXMMReg(gregOfRM(modrm))); -//-- } -//-- return eip; -//-- } -//-- -//-- //-- static //-- void dis_push_segreg ( UCodeBlock* cb, UInt sreg, Int sz ) //-- { @@ -12570,146 +11915,7 @@ static DisResult disInstr ( /*IN*/ Bool resteerOK, delta = dis_xadd_G_E ( sorb, sz, delta ); break; -//-- /* =-=-=-=-=-=-=-=-=- MMXery =-=-=-=-=-=-=-=-=-=-= */ -//-- -//-- case 0x0D: /* PREFETCH / PREFETCHW - 3Dnow!ery*/ -//-- case 0x18: /* PREFETCHT0/PREFETCHT1/PREFETCHT2/PREFETCHNTA */ -//-- -//-- vg_assert(sz == 4); -//-- modrm = getUChar(eip); -//-- if (epartIsReg(modrm)) { -//-- goto decode_failure; -//-- } -//-- if (gregOfRM(modrm) > 3) { -//-- goto decode_failure; -//-- } -//-- eip += lengthAMode(eip); -//-- if (VG_(print_codegen)) { -//-- UChar* hintstr; -//-- if (opc == 0x0D) { -//-- switch (gregOfRM(modrm)) { -//-- case 0: hintstr = ""; break; -//-- case 1: hintstr = "w"; break; -//-- default: goto decode_failure; -//-- } -//-- } -//-- else { -//-- switch (gregOfRM(modrm)) { -//-- case 0: hintstr = "nta"; break; -//-- case 1: hintstr = "t0"; break; -//-- case 2: hintstr = "t1"; break; -//-- case 3: hintstr = "t2"; break; -//-- default: goto decode_failure; -//-- } -//-- } -//-- VG_(printf)("prefetch%s ...\n", hintstr); -//-- } -//-- break; -//-- -//-- case 0x71: case 0x72: case 0x73: { -//-- /* (sz==4): PSLL/PSRA/PSRL mmxreg by imm8 */ -//-- /* (sz==2): PSLL/PSRA/PSRL xmmreg by imm8 */ -//-- UChar byte1, byte2, byte3, subopc, mmreg; -//-- vg_assert(sz == 4 || sz == 2); -//-- byte1 = opc; /* 0x71/72/73 */ -//-- byte2 = getUChar(eip); eip++; /* amode / sub-opcode */ -//-- byte3 = getUChar(eip); eip++; /* imm8 */ -//-- mmreg = byte2 & 7; -//-- subopc = (byte2 >> 3) & 7; -//-- if (subopc == 2 || subopc == 6 || subopc == 4) { -//-- /* 2 == 010 == SRL, 6 == 110 == SLL, 4 == 100 == SRA */ -//-- /* ok */ -//-- } else -//-- if (sz == 2 && opc == 0x73 && (subopc == 7 || subopc == 3)) { -//-- /* 3 == PSRLDQ, 7 == PSLLDQ */ -//-- /* This is allowable in SSE. Because sz==2 we fall thru to -//-- SSE5 below. */ -//-- } else { -//-- eip -= (sz==2 ? 3 : 2); -//-- goto decode_failure; -//-- } -//-- if (sz == 4) { -//-- /* The leading 0x0F is implied for MMX*, so we don't -//-- include it. */ -//-- uInstr2(cb, MMX3, 0, -//-- Lit16, (((UShort)byte1) << 8) | ((UShort)byte2), -//-- Lit16, ((UShort)byte3) ); -//-- DIP("ps%s%s $%d, %s\n", -//-- ( subopc == 2 ? "rl" -//-- : subopc == 6 ? "ll" -//-- : subopc == 4 ? "ra" -//-- : "??"), -//-- nameMMXGran(opc & 3), (Int)byte3, nameMMXReg(mmreg) ); -//-- } else { -//-- /* Whereas we have to include it for SSE. */ -//-- uInstr3(cb, SSE5, 0, -//-- Lit16, (((UShort)0x66) << 8) | ((UShort)0x0F), -//-- Lit16, (((UShort)byte1) << 8) | ((UShort)byte2), -//-- Lit16, ((UShort)byte3) ); -//-- DIP("ps%s%s $%d, %s\n", -//-- ( subopc == 2 ? "rl" -//-- : subopc == 6 ? "ll" -//-- : subopc == 4 ? "ra" -//-- : subopc == 3 ? "(PSRLDQ)" -//-- : subopc == 7 ? "(PSLLDQ)" -//-- : "??"), -//-- nameMMXGran(opc & 3), (Int)byte3, nameXMMReg(mmreg) ); -//-- } -//-- break; -//-- } -//-- -//-- case 0x7E: /* MOVD (src)mmxreg, (dst)ireg-or-mem */ -//-- vg_assert(sz == 4); -//-- modrm = getUChar(eip); -//-- if (epartIsReg(modrm)) { -//-- eip++; -//-- t1 = newTemp(cb); -//-- uInstr2(cb, MMX2_ERegWr, 4, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm), -//-- TempReg, t1 ); -//-- uInstr2(cb, PUT, 4, TempReg, t1, ArchReg, eregOfRM(modrm)); -//-- DIP("movd %s, %s\n", -//-- nameMMXReg(gregOfRM(modrm)), nameIReg(4,eregOfRM(modrm))); -//-- } else { -//-- Int tmpa; -//-- pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr2(cb, MMX2_MemWr, 4, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm), -//-- TempReg, tmpa); -//-- DIP("movd %s, %s\n", nameMMXReg(gregOfRM(modrm)), dis_buf); -//-- } -//-- break; -//-- -//-- case 0x6E: /* MOVD (src)ireg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- modrm = getUChar(eip); -//-- if (epartIsReg(modrm)) { -//-- eip++; -//-- t1 = newTemp(cb); -//-- uInstr2(cb, GET, 4, ArchReg, eregOfRM(modrm), TempReg, t1); -//-- uInstr2(cb, MMX2_ERegRd, 4, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm), -//-- TempReg, t1 ); -//-- DIP("movd %s, %s\n", -//-- nameIReg(4,eregOfRM(modrm)), nameMMXReg(gregOfRM(modrm))); -//-- } else { -//-- Int tmpa; -//-- pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr2(cb, MMX2_MemRd, 4, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm), -//-- TempReg, tmpa); -//-- DIP("movd %s, %s\n", dis_buf, nameMMXReg(gregOfRM(modrm))); -//-- } -//-- break; -//-- + /* =-=-=-=-=-=-=-=-=- MMXery =-=-=-=-=-=-=-=-=-=-= */ case 0x71: case 0x72: @@ -12800,284 +12006,6 @@ static DisResult disInstr ( /*IN*/ Bool resteerOK, DIP("emms\n"); break; -//-- case 0x7F: /* MOVQ (src)mmxreg, (dst)mmxreg-or-mem */ -//-- case 0xE7: /* MOVNTQ (src)mmxreg, (dst)mmxreg-or-mem */ -//-- vg_assert(sz == 4); -//-- modrm = getUChar(eip); -//-- if (epartIsReg(modrm)) { -//-- eip++; -//-- uInstr1(cb, MMX2, 0, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm) ); -//-- DIP("movq %s, %s\n", -//-- nameMMXReg(gregOfRM(modrm)), nameMMXReg(eregOfRM(modrm))); -//-- } else { -//-- Int tmpa; -//-- pair = disAMode ( cb, sorb, eip, dis_buf ); -//-- tmpa = LOW24(pair); -//-- eip += HI8(pair); -//-- uInstr2(cb, MMX2_MemWr, 8, -//-- Lit16, -//-- (((UShort)(opc)) << 8) | ((UShort)modrm), -//-- TempReg, tmpa); -//-- DIP("mov(nt)q %s, %s\n", -//-- nameMMXReg(gregOfRM(modrm)), dis_buf); -//-- } -//-- break; -//-- -//-- case 0xFC: case 0xFD: case 0xFE: -//-- /* PADDgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "padd", True ); -//-- break; -//-- -//-- case 0xD4: -//-- /* PADDQ (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "paddq", False ); -//-- break; -//-- -//-- case 0xEC: case 0xED: -//-- /* PADDSgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "padds", True ); -//-- break; -//-- -//-- case 0xDC: case 0xDD: -//-- /* PADDUSgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "paddus", True ); -//-- break; -//-- -//-- case 0xF8: case 0xF9: case 0xFA: case 0xFB: -//-- /* PSUBgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "psub", True ); -//-- break; -//-- -//-- case 0xE8: case 0xE9: -//-- /* PSUBSgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "psubs", True ); -//-- break; -//-- -//-- case 0xD8: case 0xD9: -//-- /* PSUBUSgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "psubus", True ); -//-- break; -//-- -//-- case 0xE4: /* PMULHUW (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmulhuw", False ); -//-- break; -//-- -//-- case 0xE5: /* PMULHW (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmulhw", False ); -//-- break; -//-- -//-- case 0xD5: /* PMULLW (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmullw", False ); -//-- break; -//-- -//-- case 0xF4: /* PMULUDQ (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmuludq", False ); -//-- break; -//-- -//-- case 0xF5: /* PMADDWD (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmaddwd", False ); -//-- break; -//-- -//-- case 0x74: case 0x75: case 0x76: -//-- /* PCMPEQgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pcmpeq", True ); -//-- break; -//-- -//-- case 0x64: case 0x65: case 0x66: -//-- /* PCMPGTgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pcmpgt", True ); -//-- break; -//-- -//-- case 0x6B: /* PACKSSDW (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "packssdw", False ); -//-- break; -//-- -//-- case 0x63: /* PACKSSWB (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "packsswb", False ); -//-- break; -//-- -//-- case 0x67: /* PACKUSWB (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "packuswb", False ); -//-- break; -//-- -//-- case 0x68: case 0x69: case 0x6A: -//-- /* PUNPCKHgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "punpckh", True ); -//-- break; -//-- -//-- case 0x60: case 0x61: case 0x62: -//-- /* PUNPCKLgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "punpckl", True ); -//-- break; -//-- -//-- case 0xDB: /* PAND (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pand", False ); -//-- break; -//-- -//-- case 0xDF: /* PANDN (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pandn", False ); -//-- break; -//-- -//-- case 0xEB: /* POR (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "por", False ); -//-- break; -//-- -//-- case 0xEF: /* PXOR (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pxor", False ); -//-- break; -//-- -//-- case 0xF1: case 0xF2: case 0xF3: -//-- /* PSLLgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "psll", True ); -//-- break; -//-- -//-- case 0xD1: case 0xD2: case 0xD3: -//-- /* PSRLgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "psrl", True ); -//-- break; -//-- -//-- case 0xE1: case 0xE2: -//-- /* PSRAgg (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "psra", True ); -//-- break; -//-- -//-- case 0xDA: -//-- /* PMINUB (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pminub", False ); -//-- break; -//-- -//-- case 0xDE: -//-- /* PMAXUB (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmaxub", False ); -//-- break; -//-- -//-- case 0xEA: -//-- /* PMINSW (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pminsw", False ); -//-- break; -//-- -//-- case 0xEE: -//-- /* PMAXSW (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pmaxsw", False ); -//-- break; -//-- -//-- case 0xE0: -//-- /* PAVGB (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pavgb", False ); -//-- break; -//-- -//-- case 0xE3: -//-- /* PAVGW (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "pavgw", False ); -//-- break; -//-- -//-- case 0xF6: -//-- /* PSADBW (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg ( cb, sorb, eip, opc, "psadbw", False ); -//-- break; -//-- -//-- case 0x70: -//-- /* PSHUFW imm8, (src)mmxreg-or-mem, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- eip = dis_MMXop_regmem_to_reg_Imm8 ( cb, sorb, eip, opc, "pshufw", False ); -//-- break; -//-- -//-- case 0xD7: -//-- /* PMOVMSKB (src)mmxreg, (dst)ireg */ -//-- vg_assert(sz == 4); -//-- modrm = getUChar(eip); -//-- vg_assert(epartIsReg(modrm)); -//-- t1 = newTemp(cb); -//-- uInstr3(cb, SSE2g_RegWr, 4, -//-- Lit16, (((UShort)(0x0F)) << 8) | (UShort)(opc), -//-- Lit16, (UShort)modrm, -//-- TempReg, t1 ); -//-- uInstr2(cb, PUT, 4, TempReg, t1, ArchReg, gregOfRM(modrm)); -//-- DIP("pmovmskb %s, %s\n", -//-- nameMMXReg(eregOfRM(modrm)), nameIReg(4,gregOfRM(modrm))); -//-- eip++; -//-- break; -//-- -//-- case 0xC5: -//-- /* PEXTRW (src)mmxreg, (dst)ireg */ -//-- vg_assert(sz == 4); -//-- t1 = newTemp(cb); -//-- modrm = getUChar(eip); eip++; -//-- abyte = getUChar(eip); eip++; -//-- vg_assert(epartIsReg(modrm)); -//-- uInstr3(cb, SSE2g1_RegWr, 4, -//-- Lit16, (((UShort)(0x0F)) << 8) | (UShort)(opc), -//-- Lit16, (UShort)modrm, -//-- TempReg, t1 ); -//-- uLiteral(cb, abyte); -//-- uInstr2(cb, PUT, 4, TempReg, t1, ArchReg, gregOfRM(modrm)); -//-- DIP("pextrw %s, %d, %s\n", -//-- nameMMXReg(eregOfRM(modrm)), (Int)abyte, -//-- nameIReg(4, gregOfRM(modrm))); -//-- break; -//-- -//-- case 0xC4: -//-- /* PINSRW (src)ireg, (dst)mmxreg */ -//-- vg_assert(sz == 4); -//-- t1 = newTemp(cb); -//-- modrm = getUChar(eip); eip++; -//-- abyte = getUChar(eip); eip++; -//-- vg_assert(epartIsReg(modrm)); -//-- uInstr2(cb, GET, 2, ArchReg, eregOfRM(modrm), TempReg, t1); -//-- uInstr3(cb, SSE2e1_RegRd, 2, -//-- Lit16, (((UShort)(0x0F)) << 8) | (UShort)(opc), -//-- Lit16, (UShort)modrm, -//-- TempReg, t1 ); -//-- uLiteral(cb, abyte); -//-- DIP("pinsrw %s, %d, %s\n", nameIReg(2, eregOfRM(modrm)), -//-- (Int)abyte, nameMMXReg(gregOfRM(modrm))); -//-- break; -//-- -//-- case 0xA1: /* POP %FS */ -//-- dis_pop_segreg( cb, R_FS, sz ); break; -//-- case 0xA9: /* POP %GS */ -//-- dis_pop_segreg( cb, R_GS, sz ); break; -//-- -//-- case 0xA0: /* PUSH %FS */ -//-- dis_push_segreg( cb, R_FS, sz ); break; -//-- case 0xA8: /* PUSH %GS */ -//-- dis_push_segreg( cb, R_GS, sz ); break; - /* =-=-=-=-=-=-=-=-=- unimp2 =-=-=-=-=-=-=-=-=-=-= */ default: