| version 1.1, 2003/12/08 00:55:31 | version 1.8, 2004/03/07 23:04:51 | 
| Line 60  undef_op(void) | Line 60  undef_op(void) | 
 | } | } | 
 |  |  | 
 | static void | static void | 
| undef_op2(DWORD v) | undef_op2(UINT32 v) | 
 | { | { | 
 |  |  | 
| //      UNUSED(v); | (void)v; | 
 | EXCEPTION(UD_EXCEPTION, 0); | EXCEPTION(UD_EXCEPTION, 0); | 
 | } | } | 
 |  |  | 
 |  |  | 
| BYTE insttable_info[256] = { | UINT8 insttable_info[256] = { | 
 | 0,                              /* 00 */ | 0,                              /* 00 */ | 
 | 0, | 0, | 
 | 0, | 0, | 
| Line 557  void (*insttable_1byte[2][256])(void) = | Line 557  void (*insttable_1byte[2][256])(void) = | 
 | LDS_GwMp, | LDS_GwMp, | 
 | MOV_EbIb, | MOV_EbIb, | 
 | MOV_EwIw, | MOV_EwIw, | 
| ENTER_IwIb,             /* C8 */ | ENTER16_IwIb,           /* C8 */ | 
| LEAVE16, | LEAVE, | 
 | RETfar16_Iw, | RETfar16_Iw, | 
 | RETfar16, | RETfar16, | 
 | INT3, | INT3, | 
| Line 768  void (*insttable_1byte[2][256])(void) = | Line 768  void (*insttable_1byte[2][256])(void) = | 
 | MOV_EdGd, | MOV_EdGd, | 
 | MOV_GbEb, | MOV_GbEb, | 
 | MOV_GdEd, | MOV_GdEd, | 
| MOV_EwSw, | MOV_EdSw, | 
 | LEA_GdM, | LEA_GdM, | 
 | MOV_SwEw, | MOV_SwEw, | 
 | POP_Ed, | POP_Ed, | 
| Line 832  void (*insttable_1byte[2][256])(void) = | Line 832  void (*insttable_1byte[2][256])(void) = | 
 | LDS_GdMp, | LDS_GdMp, | 
 | MOV_EbIb, | MOV_EbIb, | 
 | MOV_EdId, | MOV_EdId, | 
| ENTER_IwIb,             /* C8 */ | ENTER32_IwIb,           /* C8 */ | 
| LEAVE32, | LEAVE, | 
 | RETfar32_Iw, | RETfar32_Iw, | 
 | RETfar32, | RETfar32, | 
 | INT3, | INT3, | 
 | INT_Ib, | INT_Ib, | 
 | INTO, | INTO, | 
| IRETD, | IRET, | 
 |  |  | 
 | Grp2_Eb,                /* D0 */ | Grp2_Eb,                /* D0 */ | 
 | Grp2_Ed, | Grp2_Ed, | 
| Line 897  void (*insttable_1byte[2][256])(void) = | Line 897  void (*insttable_1byte[2][256])(void) = | 
 | void (*insttable_2byte[2][256])(void) = { | void (*insttable_2byte[2][256])(void) = { | 
 | /* 16bit */ | /* 16bit */ | 
 | { | { | 
| Grp6_16,                /* 00 */ | Grp6,                   /* 00 */ | 
| Grp7_16, | Grp7, | 
 | LAR_GwEw, | LAR_GwEw, | 
 | LSL_GwEw, | LSL_GwEw, | 
 | undef_op, | undef_op, | 
| Line 1091  void (*insttable_2byte[2][256])(void) = | Line 1091  void (*insttable_2byte[2][256])(void) = | 
 | LFS_GwMp, | LFS_GwMp, | 
 | LGS_GwMp, | LGS_GwMp, | 
 | MOVZX_GwEb, | MOVZX_GwEb, | 
| MOVZX_GdEw, | MOVZX_GwEw, | 
 | undef_op,               /* B8 */ | undef_op,               /* B8 */ | 
 | UD2, | UD2, | 
 | Grp8_EwIb, | Grp8_EwIb, | 
| Line 1099  void (*insttable_2byte[2][256])(void) = | Line 1099  void (*insttable_2byte[2][256])(void) = | 
 | BSF_GwEw, | BSF_GwEw, | 
 | BSR_GwEw, | BSR_GwEw, | 
 | MOVSX_GwEb, | MOVSX_GwEb, | 
| MOVSX_GdEw, | MOVSX_GwEw, | 
 |  |  | 
 | XADD_EbGb,              /* C0 */ | XADD_EbGb,              /* C0 */ | 
 | XADD_EwGw, | XADD_EwGw, | 
| Line 1172  void (*insttable_2byte[2][256])(void) = | Line 1172  void (*insttable_2byte[2][256])(void) = | 
 |  |  | 
 | /* 32bit */ | /* 32bit */ | 
 | { | { | 
| Grp6_32,                /* 00 */ | Grp6,                   /* 00 */ | 
| Grp7_32, | Grp7, | 
 | LAR_GdEw, | LAR_GdEw, | 
 | LSL_GdEw, | LSL_GdEw, | 
 | undef_op, | undef_op, | 
| Line 1452  void (*insttable_2byte[2][256])(void) = | Line 1452  void (*insttable_2byte[2][256])(void) = | 
 | */ | */ | 
 |  |  | 
 | /* group 1 */ | /* group 1 */ | 
| void (*insttable_G1EbIb[])(BYTE *) = { | void (*insttable_G1EbIb[])(UINT8 *, UINT32) = { | 
 | ADD_EbIb, | ADD_EbIb, | 
 | OR_EbIb, | OR_EbIb, | 
 | ADC_EbIb, | ADC_EbIb, | 
| Line 1462  void (*insttable_G1EbIb[])(BYTE *) = { | Line 1462  void (*insttable_G1EbIb[])(BYTE *) = { | 
 | XOR_EbIb, | XOR_EbIb, | 
 | CMP_EbIb, | CMP_EbIb, | 
 | }; | }; | 
| void (*insttable_G1EbIb_ext[])(DWORD) = { | void (*insttable_G1EbIb_ext[])(UINT32, UINT32) = { | 
 | ADD_EbIb_ext, | ADD_EbIb_ext, | 
 | OR_EbIb_ext, | OR_EbIb_ext, | 
 | ADC_EbIb_ext, | ADC_EbIb_ext, | 
| Line 1473  void (*insttable_G1EbIb_ext[])(DWORD) = | Line 1473  void (*insttable_G1EbIb_ext[])(DWORD) = | 
 | CMP_EbIb_ext, | CMP_EbIb_ext, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G1EwIx[])(WORD *, DWORD) = { | void (*insttable_G1EwIx[])(UINT16 *, UINT32) = { | 
 | ADD_EwIx, | ADD_EwIx, | 
 | OR_EwIx, | OR_EwIx, | 
 | ADC_EwIx, | ADC_EwIx, | 
| Line 1483  void (*insttable_G1EwIx[])(WORD *, DWORD | Line 1483  void (*insttable_G1EwIx[])(WORD *, DWORD | 
 | XOR_EwIx, | XOR_EwIx, | 
 | CMP_EwIx, | CMP_EwIx, | 
 | }; | }; | 
| void (*insttable_G1EwIx_ext[])(DWORD, DWORD) = { | void (*insttable_G1EwIx_ext[])(UINT32, UINT32) = { | 
 | ADD_EwIx_ext, | ADD_EwIx_ext, | 
 | OR_EwIx_ext, | OR_EwIx_ext, | 
 | ADC_EwIx_ext, | ADC_EwIx_ext, | 
| Line 1494  void (*insttable_G1EwIx_ext[])(DWORD, DW | Line 1494  void (*insttable_G1EwIx_ext[])(DWORD, DW | 
 | CMP_EwIx_ext, | CMP_EwIx_ext, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G1EdIx[])(DWORD *, DWORD) = { | void (*insttable_G1EdIx[])(UINT32 *, UINT32) = { | 
 | ADD_EdIx, | ADD_EdIx, | 
 | OR_EdIx, | OR_EdIx, | 
 | ADC_EdIx, | ADC_EdIx, | 
| Line 1504  void (*insttable_G1EdIx[])(DWORD *, DWOR | Line 1504  void (*insttable_G1EdIx[])(DWORD *, DWOR | 
 | XOR_EdIx, | XOR_EdIx, | 
 | CMP_EdIx, | CMP_EdIx, | 
 | }; | }; | 
| void (*insttable_G1EdIx_ext[])(DWORD, DWORD) = { | void (*insttable_G1EdIx_ext[])(UINT32, UINT32) = { | 
 | ADD_EdIx_ext, | ADD_EdIx_ext, | 
 | OR_EdIx_ext, | OR_EdIx_ext, | 
 | ADC_EdIx_ext, | ADC_EdIx_ext, | 
| Line 1517  void (*insttable_G1EdIx_ext[])(DWORD, DW | Line 1517  void (*insttable_G1EdIx_ext[])(DWORD, DW | 
 |  |  | 
 |  |  | 
 | /* group 2 */ | /* group 2 */ | 
| void (*insttable_G2Eb[])(BYTE *) = { | void (*insttable_G2Eb[])(UINT8 *) = { | 
 | ROL_Eb, | ROL_Eb, | 
 | ROR_Eb, | ROR_Eb, | 
 | RCL_Eb, | RCL_Eb, | 
| Line 1527  void (*insttable_G2Eb[])(BYTE *) = { | Line 1527  void (*insttable_G2Eb[])(BYTE *) = { | 
 | SHL_Eb, | SHL_Eb, | 
 | SAR_Eb, | SAR_Eb, | 
 | }; | }; | 
| void (*insttable_G2Eb_ext[])(DWORD) = { | void (*insttable_G2Eb_ext[])(UINT32) = { | 
 | ROL_Eb_ext, | ROL_Eb_ext, | 
 | ROR_Eb_ext, | ROR_Eb_ext, | 
 | RCL_Eb_ext, | RCL_Eb_ext, | 
| Line 1538  void (*insttable_G2Eb_ext[])(DWORD) = { | Line 1538  void (*insttable_G2Eb_ext[])(DWORD) = { | 
 | SAR_Eb_ext, | SAR_Eb_ext, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G2Ew[])(WORD *) = { | void (*insttable_G2Ew[])(UINT16 *) = { | 
 | ROL_Ew, | ROL_Ew, | 
 | ROR_Ew, | ROR_Ew, | 
 | RCL_Ew, | RCL_Ew, | 
| Line 1548  void (*insttable_G2Ew[])(WORD *) = { | Line 1548  void (*insttable_G2Ew[])(WORD *) = { | 
 | SHL_Ew, | SHL_Ew, | 
 | SAR_Ew, | SAR_Ew, | 
 | }; | }; | 
| void (*insttable_G2Ew_ext[])(DWORD) = { | void (*insttable_G2Ew_ext[])(UINT32) = { | 
 | ROL_Ew_ext, | ROL_Ew_ext, | 
 | ROR_Ew_ext, | ROR_Ew_ext, | 
 | RCL_Ew_ext, | RCL_Ew_ext, | 
| Line 1559  void (*insttable_G2Ew_ext[])(DWORD) = { | Line 1559  void (*insttable_G2Ew_ext[])(DWORD) = { | 
 | SAR_Ew_ext, | SAR_Ew_ext, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G2Ed[])(DWORD *) = { | void (*insttable_G2Ed[])(UINT32 *) = { | 
 | ROL_Ed, | ROL_Ed, | 
 | ROR_Ed, | ROR_Ed, | 
 | RCL_Ed, | RCL_Ed, | 
| Line 1569  void (*insttable_G2Ed[])(DWORD *) = { | Line 1569  void (*insttable_G2Ed[])(DWORD *) = { | 
 | SHL_Ed, | SHL_Ed, | 
 | SAR_Ed, | SAR_Ed, | 
 | }; | }; | 
| void (*insttable_G2Ed_ext[])(DWORD) = { | void (*insttable_G2Ed_ext[])(UINT32) = { | 
 | ROL_Ed_ext, | ROL_Ed_ext, | 
 | ROR_Ed_ext, | ROR_Ed_ext, | 
 | RCL_Ed_ext, | RCL_Ed_ext, | 
| Line 1580  void (*insttable_G2Ed_ext[])(DWORD) = { | Line 1580  void (*insttable_G2Ed_ext[])(DWORD) = { | 
 | SAR_Ed_ext, | SAR_Ed_ext, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G2EbCL[])(BYTE *, BYTE) = { | void (*insttable_G2EbCL[])(UINT8 *, UINT) = { | 
 | ROL_EbCL, | ROL_EbCL, | 
 | ROR_EbCL, | ROR_EbCL, | 
 | RCL_EbCL, | RCL_EbCL, | 
| Line 1590  void (*insttable_G2EbCL[])(BYTE *, BYTE) | Line 1590  void (*insttable_G2EbCL[])(BYTE *, BYTE) | 
 | SHL_EbCL, | SHL_EbCL, | 
 | SAR_EbCL, | SAR_EbCL, | 
 | }; | }; | 
| void (*insttable_G2EbCL_ext[])(DWORD, BYTE) = { | void (*insttable_G2EbCL_ext[])(UINT32, UINT) = { | 
 | ROL_EbCL_ext, | ROL_EbCL_ext, | 
 | ROR_EbCL_ext, | ROR_EbCL_ext, | 
 | RCL_EbCL_ext, | RCL_EbCL_ext, | 
| Line 1601  void (*insttable_G2EbCL_ext[])(DWORD, BY | Line 1601  void (*insttable_G2EbCL_ext[])(DWORD, BY | 
 | SAR_EbCL_ext, | SAR_EbCL_ext, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G2EwCL[])(WORD *, BYTE) = { | void (*insttable_G2EwCL[])(UINT16 *, UINT) = { | 
 | ROL_EwCL, | ROL_EwCL, | 
 | ROR_EwCL, | ROR_EwCL, | 
 | RCL_EwCL, | RCL_EwCL, | 
| Line 1611  void (*insttable_G2EwCL[])(WORD *, BYTE) | Line 1611  void (*insttable_G2EwCL[])(WORD *, BYTE) | 
 | SHL_EwCL, | SHL_EwCL, | 
 | SAR_EwCL, | SAR_EwCL, | 
 | }; | }; | 
| void (*insttable_G2EwCL_ext[])(DWORD, BYTE) = { | void (*insttable_G2EwCL_ext[])(UINT32, UINT) = { | 
 | ROL_EwCL_ext, | ROL_EwCL_ext, | 
 | ROR_EwCL_ext, | ROR_EwCL_ext, | 
 | RCL_EwCL_ext, | RCL_EwCL_ext, | 
| Line 1622  void (*insttable_G2EwCL_ext[])(DWORD, BY | Line 1622  void (*insttable_G2EwCL_ext[])(DWORD, BY | 
 | SAR_EwCL_ext, | SAR_EwCL_ext, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G2EdCL[])(DWORD *, BYTE) = { | void (*insttable_G2EdCL[])(UINT32 *, UINT) = { | 
 | ROL_EdCL, | ROL_EdCL, | 
 | ROR_EdCL, | ROR_EdCL, | 
 | RCL_EdCL, | RCL_EdCL, | 
| Line 1632  void (*insttable_G2EdCL[])(DWORD *, BYTE | Line 1632  void (*insttable_G2EdCL[])(DWORD *, BYTE | 
 | SHL_EdCL, | SHL_EdCL, | 
 | SAR_EdCL, | SAR_EdCL, | 
 | }; | }; | 
| void (*insttable_G2EdCL_ext[])(DWORD, BYTE) = { | void (*insttable_G2EdCL_ext[])(UINT32, UINT) = { | 
 | ROL_EdCL_ext, | ROL_EdCL_ext, | 
 | ROR_EdCL_ext, | ROR_EdCL_ext, | 
 | RCL_EdCL_ext, | RCL_EdCL_ext, | 
| Line 1644  void (*insttable_G2EdCL_ext[])(DWORD, BY | Line 1644  void (*insttable_G2EdCL_ext[])(DWORD, BY | 
 | }; | }; | 
 |  |  | 
 | /* group 3 */ | /* group 3 */ | 
| void (*insttable_G3Eb[])(DWORD) = { | void (*insttable_G3Eb[])(UINT32) = { | 
 | TEST_EbIb, | TEST_EbIb, | 
 | TEST_EbIb, | TEST_EbIb, | 
 | NOT_Eb, | NOT_Eb, | 
| Line 1655  void (*insttable_G3Eb[])(DWORD) = { | Line 1655  void (*insttable_G3Eb[])(DWORD) = { | 
 | IDIV_ALEb, | IDIV_ALEb, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G3Ew[])(DWORD) = { | void (*insttable_G3Ew[])(UINT32) = { | 
 | TEST_EwIw, | TEST_EwIw, | 
 | TEST_EwIw, | TEST_EwIw, | 
 | NOT_Ew, | NOT_Ew, | 
| Line 1666  void (*insttable_G3Ew[])(DWORD) = { | Line 1666  void (*insttable_G3Ew[])(DWORD) = { | 
 | IDIV_AXEw, | IDIV_AXEw, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G3Ed[])(DWORD) = { | void (*insttable_G3Ed[])(UINT32) = { | 
 | TEST_EdId, | TEST_EdId, | 
 | TEST_EdId, | TEST_EdId, | 
 | NOT_Ed, | NOT_Ed, | 
| Line 1678  void (*insttable_G3Ed[])(DWORD) = { | Line 1678  void (*insttable_G3Ed[])(DWORD) = { | 
 | }; | }; | 
 |  |  | 
 | /* group 4 */ | /* group 4 */ | 
| void (*insttable_G4[])(DWORD) = { | void (*insttable_G4[])(UINT32) = { | 
 | INC_Eb, | INC_Eb, | 
 | DEC_Eb, | DEC_Eb, | 
 | undef_op2, | undef_op2, | 
| Line 1690  void (*insttable_G4[])(DWORD) = { | Line 1690  void (*insttable_G4[])(DWORD) = { | 
 | }; | }; | 
 |  |  | 
 | /* group 5 */ | /* group 5 */ | 
| void (*insttable_G5Ew[])(DWORD) = { | void (*insttable_G5Ew[])(UINT32) = { | 
 | INC_Ew, | INC_Ew, | 
 | DEC_Ew, | DEC_Ew, | 
 | CALL_Ew, | CALL_Ew, | 
| Line 1701  void (*insttable_G5Ew[])(DWORD) = { | Line 1701  void (*insttable_G5Ew[])(DWORD) = { | 
 | undef_op2,      /* POP_Ew_G5 */ | undef_op2,      /* POP_Ew_G5 */ | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G5Ed[])(DWORD) = { | void (*insttable_G5Ed[])(UINT32) = { | 
 | INC_Ed, | INC_Ed, | 
 | DEC_Ed, | DEC_Ed, | 
 | CALL_Ed, | CALL_Ed, | 
| Line 1713  void (*insttable_G5Ed[])(DWORD) = { | Line 1713  void (*insttable_G5Ed[])(DWORD) = { | 
 | }; | }; | 
 |  |  | 
 | /* group 6 */ | /* group 6 */ | 
| void (*insttable_G6_16[])(DWORD) = { | void (*insttable_G6[])(UINT32) = { | 
 | SLDT_Ew, | SLDT_Ew, | 
 | STR_Ew, | STR_Ew, | 
 | LLDT_Ew, | LLDT_Ew, | 
| Line 1724  void (*insttable_G6_16[])(DWORD) = { | Line 1724  void (*insttable_G6_16[])(DWORD) = { | 
 | undef_op2, | undef_op2, | 
 | }; | }; | 
 |  |  | 
 | void (*insttable_G6_32[])(DWORD) = { |  | 
 | SLDT_Ed, |  | 
 | STR_Ed, |  | 
 | LLDT_Ew, |  | 
 | LTR_Ew, |  | 
 | VERR_Ew, |  | 
 | VERW_Ew, |  | 
 | undef_op2, |  | 
 | undef_op2, |  | 
 | }; |  | 
 |  |  | 
 | /* group 7 */ | /* group 7 */ | 
| void (*insttable_G7_16[])(DWORD) = { | void (*insttable_G7[])(UINT32) = { | 
| SGDT16_Ms, | SGDT_Ms, | 
| SIDT16_Ms, | SIDT_Ms, | 
| LGDT16_Ms, | LGDT_Ms, | 
| LIDT16_Ms, | LIDT_Ms, | 
 | SMSW_Ew, | SMSW_Ew, | 
 | undef_op2, | undef_op2, | 
 | LMSW_Ew, | LMSW_Ew, | 
 | INVLPG, | INVLPG, | 
 | }; | }; | 
 |  |  | 
 | void (*insttable_G7_32[])(DWORD) = { |  | 
 | SGDT32_Ms, |  | 
 | SIDT32_Ms, |  | 
 | LGDT32_Ms, |  | 
 | LIDT32_Ms, |  | 
 | SMSW_Ed, |  | 
 | undef_op2, |  | 
 | LMSW_Ew, |  | 
 | INVLPG, |  | 
 | }; |  | 
 |  |  | 
 | /* group 8 */ | /* group 8 */ | 
| void (*insttable_G8EwIb[])(DWORD) = { | void (*insttable_G8EwIb[])(UINT32) = { | 
 | undef_op2, | undef_op2, | 
 | undef_op2, | undef_op2, | 
 | undef_op2, | undef_op2, | 
| Line 1770  void (*insttable_G8EwIb[])(DWORD) = { | Line 1748  void (*insttable_G8EwIb[])(DWORD) = { | 
 | BTC_EwIb, | BTC_EwIb, | 
 | }; | }; | 
 |  |  | 
| void (*insttable_G8EdIb[])(DWORD) = { | void (*insttable_G8EdIb[])(UINT32) = { | 
 | undef_op2, | undef_op2, | 
 | undef_op2, | undef_op2, | 
 | undef_op2, | undef_op2, | 
| Line 1782  void (*insttable_G8EdIb[])(DWORD) = { | Line 1760  void (*insttable_G8EdIb[])(DWORD) = { | 
 | }; | }; | 
 |  |  | 
 | /* group 9 */ | /* group 9 */ | 
| void (*insttable_G9[])(DWORD) = { | void (*insttable_G9[])(UINT32) = { | 
 | undef_op2, | undef_op2, | 
 | CMPXCHG8B, | CMPXCHG8B, | 
 | undef_op2, | undef_op2, |