57 printf(
"%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
58 M.x86.R_CS,
M.x86.R_IP-2, op2);
81 #define SMSW_INITIAL_VALUE 0x10
108 printf(
"%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
109 M.x86.R_CS,
M.x86.R_IP-2, op2);
164 #ifdef __HAS_LONG_LONG__
165 static u64 counter = 0;
167 static u32 counter = 0;
181 #ifdef __HAS_LONG_LONG__
182 M.x86.R_EAX = counter & 0xffffffff;
183 M.x86.R_EDX = counter >> 32;
185 M.x86.R_EAX = counter;
209 #define xorl(a,b) (((a) && !(b)) || (!(a) && (b)))
294 target += (
s16)
M.x86.R_IP;
298 M.x86.R_IP = (
u16)target;
299 JMP_TRACE(
M.x86.saved_cs,
M.x86.saved_ip,
M.x86.R_CS,
M.x86.R_IP,
" LONG COND ");
313 reg = (temp & 0xFF000000) >> 24 |
314 (temp & 0xFF0000) >> 8 |
315 (temp & 0xFF00) << 8 |
454 *destreg = cond ? 0x01 : 0x00;
524 bit = *shiftreg & 0x1F;
535 bit = *shiftreg & 0xF;
542 u32 *srcreg,*shiftreg;
548 bit = *shiftreg & 0x1F;
551 u16 *srcreg,*shiftreg;
557 bit = *shiftreg & 0xF;
591 destval =
shld_long(destval,*shiftreg,shift);
604 destval =
shld_word(destval,*shiftreg,shift);
609 u32 *destreg,*shiftreg;
618 *destreg =
shld_long(*destreg,*shiftreg,shift);
620 u16 *destreg,*shiftreg;
629 *destreg =
shld_word(*destreg,*shiftreg,shift);
659 destval =
shld_long(destval,*shiftreg,
M.x86.R_CL);
670 destval =
shld_word(destval,*shiftreg,
M.x86.R_CL);
675 u32 *destreg,*shiftreg;
682 *destreg =
shld_long(*destreg,*shiftreg,
M.x86.R_CL);
684 u16 *destreg,*shiftreg;
691 *destreg =
shld_word(*destreg,*shiftreg,
M.x86.R_CL);
748 bit = *shiftreg & 0x1F;
761 bit = *shiftreg & 0xF;
770 u32 *srcreg,*shiftreg;
777 bit = *shiftreg & 0x1F;
782 u16 *srcreg,*shiftreg;
789 bit = *shiftreg & 0xF;
825 destval =
shrd_long(destval,*shiftreg,shift);
838 destval =
shrd_word(destval,*shiftreg,shift);
843 u32 *destreg,*shiftreg;
852 *destreg =
shrd_long(*destreg,*shiftreg,shift);
854 u16 *destreg,*shiftreg;
863 *destreg =
shrd_word(*destreg,*shiftreg,shift);
893 destval =
shrd_long(destval,*shiftreg,
M.x86.R_CL);
903 destval =
shrd_word(destval,*shiftreg,
M.x86.R_CL);
908 u32 *destreg,*shiftreg;
915 *destreg =
shrd_long(*destreg,*shiftreg,
M.x86.R_CL);
917 u16 *destreg,*shiftreg;
924 *destreg =
shrd_word(*destreg,*shiftreg,
M.x86.R_CL);
962 *destreg = (
u32)res_lo;
973 res = (
s16)*destreg * (
s16)srcval;
985 u32 *destreg,*srcreg;
1000 *destreg = (
u32)res_lo;
1002 u16 *destreg,*srcreg;
1008 res = (
s16)*destreg * (
s16)*srcreg;
1016 *destreg = (
u16)res;
1074 bit = *shiftreg & 0x1F;
1077 mask = (0x1 << bit);
1086 bit = *shiftreg & 0xF;
1095 u32 *srcreg,*shiftreg;
1102 bit = *shiftreg & 0x1F;
1103 mask = (0x1 << bit);
1107 u16 *srcreg,*shiftreg;
1114 bit = *shiftreg & 0xF;
1309 printf(
"%04x:%04x: %02X%02X ILLEGAL EXTENDED X86 OPCODE EXTENSION!\n",
1310 M.x86.R_CS,
M.x86.R_IP-3,op2, (mod<<6)|(rh<<3)|rl);
1325 mask = (0x1 << bit);
1345 mask = (0x1 << bit);
1371 mask = (0x1 << bit);
1395 mask = (0x1 << bit);
1438 bit = *shiftreg & 0x1F;
1441 mask = (0x1 << bit);
1450 bit = *shiftreg & 0xF;
1459 u32 *srcreg,*shiftreg;
1466 bit = *shiftreg & 0x1F;
1467 mask = (0x1 << bit);
1471 u16 *srcreg,*shiftreg;
1478 bit = *shiftreg & 0xF;
1504 u32 srcval, *dstreg;
1510 for (*dstreg = 0; *dstreg < 32; (*dstreg)++)
1511 if ((srcval >> *dstreg) & 1)
break;
1513 u16 srcval, *dstreg;
1519 for (*dstreg = 0; *dstreg < 16; (*dstreg)++)
1520 if ((srcval >> *dstreg) & 1)
break;
1524 u32 srcval, *dstreg;
1531 for (*dstreg = 0; *dstreg < 32; (*dstreg)++)
1532 if ((srcval >> *dstreg) & 1)
break;
1534 u16 srcval, *dstreg;
1541 for (*dstreg = 0; *dstreg < 16; (*dstreg)++)
1542 if ((srcval >> *dstreg) & 1)
break;
1565 u32 srcval, *dstreg;
1571 for (*dstreg = 31; *dstreg > 0; (*dstreg)--)
1572 if ((srcval >> *dstreg) & 1)
break;
1574 u16 srcval, *dstreg;
1580 for (*dstreg = 15; *dstreg > 0; (*dstreg)--)
1581 if ((srcval >> *dstreg) & 1)
break;
1585 u32 srcval, *dstreg;
1592 for (*dstreg = 31; *dstreg > 0; (*dstreg)--)
1593 if ((srcval >> *dstreg) & 1)
break;
1595 u16 srcval, *dstreg;
1602 for (*dstreg = 15; *dstreg > 0; (*dstreg)--)
1603 if ((srcval >> *dstreg) & 1)
break;
1656 *destreg = (
s32)((
s8)*srcreg);
1666 *destreg = (
s16)((
s8)*srcreg);
1702 *destreg = (
s32)((
s16)*srcreg);
unsigned int decode_rm01_address(int rm)
unsigned int decode_rmXX_address(int mod, int rm)
u16 fetch_data_word(uint offset)
void store_data_byte(uint offset, u8 val)
unsigned int decode_rm10_address(int rm)
u8 fetch_data_byte(uint offset)
unsigned int decode_rm00_address(int rm)
void store_data_long(uint offset, u32 val)
void store_data_word(uint offset, u16 val)
u32 fetch_data_long(uint offset)
#define DECODE_RM_BYTE_REGISTER(r)
#define FETCH_DECODE_MODRM(mod, rh, rl)
#define DECODE_RM_WORD_REGISTER(r)
#define DECODE_RM_LONG_REGISTER(r)
#define DECODE_CLEAR_SEGOVR()
#define JMP_TRACE(u, v, w, x, s)
#define X86EMU_DEBUG_ONLY(x)
#define DECODE_PRINTF2(x, y)
static const struct power_domain_data disp[]
static void x86emuOp2_opc_01(u8 op2)
static void x86emuOp2_bswap(u8 op2)
static void x86emuOp2_lfs_R_IMM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_imul_R_RM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_movzx_word_R_RM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_illegal_op(u8 op2)
static void x86emuOp2_set_byte(u8 op2)
static void x86emuOp2_rdtsc(u8 X86EMU_UNUSED(op2))
void(* x86emu_optab2[256])(u8)
static void x86emuOp2_lgs_R_IMM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_shrd_CL(u8 X86EMU_UNUSED(op2))
#define SMSW_INITIAL_VALUE
static void x86emuOp2_btr_R(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_shld_IMM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_movzx_byte_R_RM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_bts_R(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_pop_GS(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_long_jump(u8 op2)
static void x86emuOp2_push_GS(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_lss_R_IMM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_bsf(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_cpuid(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_btX_I(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_invd(u8 op2)
static void x86emuOp2_wbinvd(u8 op2)
static void x86emuOp2_shld_CL(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_rdmsr(u8 op2)
static void x86emuOp2_push_FS(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_pop_FS(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_movsx_byte_R_RM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_btc_R(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_movsx_word_R_RM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_shrd_IMM(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_bt_R(u8 X86EMU_UNUSED(op2))
static void x86emuOp2_wrmsr(u8 op2)
static void x86emuOp2_bsr(u8 X86EMU_UNUSED(op2))
static s32 x86emu_bswap(s32 reg)
int x86emu_check_jump_condition(u8 op)
u16 shrd_word(u16 d, u16 fill, u8 s)
u16 shld_word(u16 d, u16 fill, u8 s)
u32 shrd_long(u32 d, u32 fill, u8 s)
u32 shld_long(u32 d, u32 fill, u8 s)
void imul_long_direct(u32 *res_lo, u32 *res_hi, u32 d, u32 s)
#define CONDITIONAL_SET_FLAG(COND, FLAG)
#define SYSMODE_PREFIX_DATA
#define ACCESS_FLAG(flag)
typedef void(X86APIP X86EMU_intrFuncs)(int num)