//-- *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 )
}
}
-//-- __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 ---*/
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
}
-
-//-- /* 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 )
//-- {
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:
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: