|
|
| version 1.10, 2005/03/12 12:32:54 | version 1.14, 2012/01/29 03:22:24 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ */ | |
| /* | /* |
| * Copyright (c) 2002-2003 NONAKA Kimihiro | * Copyright (c) 2002-2003 NONAKA Kimihiro |
| * All rights reserved. | * All rights reserved. |
| Line 44 | Line 42 |
| #include "string_inst.h" | #include "string_inst.h" |
| #include "system_inst.h" | #include "system_inst.h" |
| #include "fp.h" | #include "instructions/fpu/fp.h" |
| /* | /* |
| Line 57 undef_op(void) | Line 55 undef_op(void) |
| EXCEPTION(UD_EXCEPTION, 0); | EXCEPTION(UD_EXCEPTION, 0); |
| } | } |
| static void | static void CPUCALL |
| undef_op2(UINT32 v) | undef_op2(UINT32 v) |
| { | { |
| (void)v; | |
| EXCEPTION(UD_EXCEPTION, 0); | EXCEPTION(UD_EXCEPTION, 0); |
| } | } |
| Line 1450 void (*insttable_2byte[2][256])(void) = | Line 1447 void (*insttable_2byte[2][256])(void) = |
| */ | */ |
| /* group 1 */ | /* group 1 */ |
| void (*insttable_G1EbIb[])(UINT8 *, UINT32) = { | void (CPUCALL *insttable_G1EbIb[])(UINT8 *, UINT32) = { |
| ADD_EbIb, | ADD_EbIb, |
| OR_EbIb, | OR_EbIb, |
| ADC_EbIb, | ADC_EbIb, |
| Line 1460 void (*insttable_G1EbIb[])(UINT8 *, UINT | Line 1457 void (*insttable_G1EbIb[])(UINT8 *, UINT |
| XOR_EbIb, | XOR_EbIb, |
| CMP_EbIb, | CMP_EbIb, |
| }; | }; |
| void (*insttable_G1EbIb_ext[])(UINT32, UINT32) = { | void (CPUCALL *insttable_G1EbIb_ext[])(UINT32, UINT32) = { |
| ADD_EbIb_ext, | ADD_EbIb_ext, |
| OR_EbIb_ext, | OR_EbIb_ext, |
| ADC_EbIb_ext, | ADC_EbIb_ext, |
| Line 1471 void (*insttable_G1EbIb_ext[])(UINT32, U | Line 1468 void (*insttable_G1EbIb_ext[])(UINT32, U |
| CMP_EbIb_ext, | CMP_EbIb_ext, |
| }; | }; |
| void (*insttable_G1EwIx[])(UINT16 *, UINT32) = { | void (CPUCALL *insttable_G1EwIx[])(UINT16 *, UINT32) = { |
| ADD_EwIx, | ADD_EwIx, |
| OR_EwIx, | OR_EwIx, |
| ADC_EwIx, | ADC_EwIx, |
| Line 1481 void (*insttable_G1EwIx[])(UINT16 *, UIN | Line 1478 void (*insttable_G1EwIx[])(UINT16 *, UIN |
| XOR_EwIx, | XOR_EwIx, |
| CMP_EwIx, | CMP_EwIx, |
| }; | }; |
| void (*insttable_G1EwIx_ext[])(UINT32, UINT32) = { | void (CPUCALL *insttable_G1EwIx_ext[])(UINT32, UINT32) = { |
| ADD_EwIx_ext, | ADD_EwIx_ext, |
| OR_EwIx_ext, | OR_EwIx_ext, |
| ADC_EwIx_ext, | ADC_EwIx_ext, |
| Line 1492 void (*insttable_G1EwIx_ext[])(UINT32, U | Line 1489 void (*insttable_G1EwIx_ext[])(UINT32, U |
| CMP_EwIx_ext, | CMP_EwIx_ext, |
| }; | }; |
| void (*insttable_G1EdIx[])(UINT32 *, UINT32) = { | void (CPUCALL *insttable_G1EdIx[])(UINT32 *, UINT32) = { |
| ADD_EdIx, | ADD_EdIx, |
| OR_EdIx, | OR_EdIx, |
| ADC_EdIx, | ADC_EdIx, |
| Line 1502 void (*insttable_G1EdIx[])(UINT32 *, UIN | Line 1499 void (*insttable_G1EdIx[])(UINT32 *, UIN |
| XOR_EdIx, | XOR_EdIx, |
| CMP_EdIx, | CMP_EdIx, |
| }; | }; |
| void (*insttable_G1EdIx_ext[])(UINT32, UINT32) = { | void (CPUCALL *insttable_G1EdIx_ext[])(UINT32, UINT32) = { |
| ADD_EdIx_ext, | ADD_EdIx_ext, |
| OR_EdIx_ext, | OR_EdIx_ext, |
| ADC_EdIx_ext, | ADC_EdIx_ext, |
| Line 1515 void (*insttable_G1EdIx_ext[])(UINT32, U | Line 1512 void (*insttable_G1EdIx_ext[])(UINT32, U |
| /* group 2 */ | /* group 2 */ |
| void (*insttable_G2Eb[])(UINT8 *) = { | void (CPUCALL *insttable_G2Eb[])(UINT8 *) = { |
| ROL_Eb, | ROL_Eb, |
| ROR_Eb, | ROR_Eb, |
| RCL_Eb, | RCL_Eb, |
| Line 1525 void (*insttable_G2Eb[])(UINT8 *) = { | Line 1522 void (*insttable_G2Eb[])(UINT8 *) = { |
| SHL_Eb, | SHL_Eb, |
| SAR_Eb, | SAR_Eb, |
| }; | }; |
| void (*insttable_G2Eb_ext[])(UINT32) = { | void (CPUCALL *insttable_G2Eb_ext[])(UINT32) = { |
| ROL_Eb_ext, | ROL_Eb_ext, |
| ROR_Eb_ext, | ROR_Eb_ext, |
| RCL_Eb_ext, | RCL_Eb_ext, |
| Line 1536 void (*insttable_G2Eb_ext[])(UINT32) = { | Line 1533 void (*insttable_G2Eb_ext[])(UINT32) = { |
| SAR_Eb_ext, | SAR_Eb_ext, |
| }; | }; |
| void (*insttable_G2Ew[])(UINT16 *) = { | void (CPUCALL *insttable_G2Ew[])(UINT16 *) = { |
| ROL_Ew, | ROL_Ew, |
| ROR_Ew, | ROR_Ew, |
| RCL_Ew, | RCL_Ew, |
| Line 1546 void (*insttable_G2Ew[])(UINT16 *) = { | Line 1543 void (*insttable_G2Ew[])(UINT16 *) = { |
| SHL_Ew, | SHL_Ew, |
| SAR_Ew, | SAR_Ew, |
| }; | }; |
| void (*insttable_G2Ew_ext[])(UINT32) = { | void (CPUCALL *insttable_G2Ew_ext[])(UINT32) = { |
| ROL_Ew_ext, | ROL_Ew_ext, |
| ROR_Ew_ext, | ROR_Ew_ext, |
| RCL_Ew_ext, | RCL_Ew_ext, |
| Line 1557 void (*insttable_G2Ew_ext[])(UINT32) = { | Line 1554 void (*insttable_G2Ew_ext[])(UINT32) = { |
| SAR_Ew_ext, | SAR_Ew_ext, |
| }; | }; |
| void (*insttable_G2Ed[])(UINT32 *) = { | void (CPUCALL *insttable_G2Ed[])(UINT32 *) = { |
| ROL_Ed, | ROL_Ed, |
| ROR_Ed, | ROR_Ed, |
| RCL_Ed, | RCL_Ed, |
| Line 1567 void (*insttable_G2Ed[])(UINT32 *) = { | Line 1564 void (*insttable_G2Ed[])(UINT32 *) = { |
| SHL_Ed, | SHL_Ed, |
| SAR_Ed, | SAR_Ed, |
| }; | }; |
| void (*insttable_G2Ed_ext[])(UINT32) = { | void (CPUCALL *insttable_G2Ed_ext[])(UINT32) = { |
| ROL_Ed_ext, | ROL_Ed_ext, |
| ROR_Ed_ext, | ROR_Ed_ext, |
| RCL_Ed_ext, | RCL_Ed_ext, |
| Line 1578 void (*insttable_G2Ed_ext[])(UINT32) = { | Line 1575 void (*insttable_G2Ed_ext[])(UINT32) = { |
| SAR_Ed_ext, | SAR_Ed_ext, |
| }; | }; |
| void (*insttable_G2EbCL[])(UINT8 *, UINT) = { | void (CPUCALL *insttable_G2EbCL[])(UINT8 *, UINT) = { |
| ROL_EbCL, | ROL_EbCL, |
| ROR_EbCL, | ROR_EbCL, |
| RCL_EbCL, | RCL_EbCL, |
| Line 1588 void (*insttable_G2EbCL[])(UINT8 *, UINT | Line 1585 void (*insttable_G2EbCL[])(UINT8 *, UINT |
| SHL_EbCL, | SHL_EbCL, |
| SAR_EbCL, | SAR_EbCL, |
| }; | }; |
| void (*insttable_G2EbCL_ext[])(UINT32, UINT) = { | void (CPUCALL *insttable_G2EbCL_ext[])(UINT32, UINT) = { |
| ROL_EbCL_ext, | ROL_EbCL_ext, |
| ROR_EbCL_ext, | ROR_EbCL_ext, |
| RCL_EbCL_ext, | RCL_EbCL_ext, |
| Line 1599 void (*insttable_G2EbCL_ext[])(UINT32, U | Line 1596 void (*insttable_G2EbCL_ext[])(UINT32, U |
| SAR_EbCL_ext, | SAR_EbCL_ext, |
| }; | }; |
| void (*insttable_G2EwCL[])(UINT16 *, UINT) = { | void (CPUCALL *insttable_G2EwCL[])(UINT16 *, UINT) = { |
| ROL_EwCL, | ROL_EwCL, |
| ROR_EwCL, | ROR_EwCL, |
| RCL_EwCL, | RCL_EwCL, |
| Line 1609 void (*insttable_G2EwCL[])(UINT16 *, UIN | Line 1606 void (*insttable_G2EwCL[])(UINT16 *, UIN |
| SHL_EwCL, | SHL_EwCL, |
| SAR_EwCL, | SAR_EwCL, |
| }; | }; |
| void (*insttable_G2EwCL_ext[])(UINT32, UINT) = { | void (CPUCALL *insttable_G2EwCL_ext[])(UINT32, UINT) = { |
| ROL_EwCL_ext, | ROL_EwCL_ext, |
| ROR_EwCL_ext, | ROR_EwCL_ext, |
| RCL_EwCL_ext, | RCL_EwCL_ext, |
| Line 1620 void (*insttable_G2EwCL_ext[])(UINT32, U | Line 1617 void (*insttable_G2EwCL_ext[])(UINT32, U |
| SAR_EwCL_ext, | SAR_EwCL_ext, |
| }; | }; |
| void (*insttable_G2EdCL[])(UINT32 *, UINT) = { | void (CPUCALL *insttable_G2EdCL[])(UINT32 *, UINT) = { |
| ROL_EdCL, | ROL_EdCL, |
| ROR_EdCL, | ROR_EdCL, |
| RCL_EdCL, | RCL_EdCL, |
| Line 1630 void (*insttable_G2EdCL[])(UINT32 *, UIN | Line 1627 void (*insttable_G2EdCL[])(UINT32 *, UIN |
| SHL_EdCL, | SHL_EdCL, |
| SAR_EdCL, | SAR_EdCL, |
| }; | }; |
| void (*insttable_G2EdCL_ext[])(UINT32, UINT) = { | void (CPUCALL *insttable_G2EdCL_ext[])(UINT32, UINT) = { |
| ROL_EdCL_ext, | ROL_EdCL_ext, |
| ROR_EdCL_ext, | ROR_EdCL_ext, |
| RCL_EdCL_ext, | RCL_EdCL_ext, |
| Line 1642 void (*insttable_G2EdCL_ext[])(UINT32, U | Line 1639 void (*insttable_G2EdCL_ext[])(UINT32, U |
| }; | }; |
| /* group 3 */ | /* group 3 */ |
| void (*insttable_G3Eb[])(UINT32) = { | void (CPUCALL *insttable_G3Eb[])(UINT32) = { |
| TEST_EbIb, | TEST_EbIb, |
| TEST_EbIb, | TEST_EbIb, |
| NOT_Eb, | NOT_Eb, |
| Line 1653 void (*insttable_G3Eb[])(UINT32) = { | Line 1650 void (*insttable_G3Eb[])(UINT32) = { |
| IDIV_ALEb, | IDIV_ALEb, |
| }; | }; |
| void (*insttable_G3Ew[])(UINT32) = { | void (CPUCALL *insttable_G3Ew[])(UINT32) = { |
| TEST_EwIw, | TEST_EwIw, |
| TEST_EwIw, | TEST_EwIw, |
| NOT_Ew, | NOT_Ew, |
| Line 1664 void (*insttable_G3Ew[])(UINT32) = { | Line 1661 void (*insttable_G3Ew[])(UINT32) = { |
| IDIV_AXEw, | IDIV_AXEw, |
| }; | }; |
| void (*insttable_G3Ed[])(UINT32) = { | void (CPUCALL *insttable_G3Ed[])(UINT32) = { |
| TEST_EdId, | TEST_EdId, |
| TEST_EdId, | TEST_EdId, |
| NOT_Ed, | NOT_Ed, |
| Line 1676 void (*insttable_G3Ed[])(UINT32) = { | Line 1673 void (*insttable_G3Ed[])(UINT32) = { |
| }; | }; |
| /* group 4 */ | /* group 4 */ |
| void (*insttable_G4[])(UINT32) = { | void (CPUCALL *insttable_G4[])(UINT32) = { |
| INC_Eb, | INC_Eb, |
| DEC_Eb, | DEC_Eb, |
| undef_op2, | undef_op2, |
| Line 1688 void (*insttable_G4[])(UINT32) = { | Line 1685 void (*insttable_G4[])(UINT32) = { |
| }; | }; |
| /* group 5 */ | /* group 5 */ |
| void (*insttable_G5Ew[])(UINT32) = { | void (CPUCALL *insttable_G5Ew[])(UINT32) = { |
| INC_Ew, | INC_Ew, |
| DEC_Ew, | DEC_Ew, |
| CALL_Ew, | CALL_Ew, |
| Line 1699 void (*insttable_G5Ew[])(UINT32) = { | Line 1696 void (*insttable_G5Ew[])(UINT32) = { |
| undef_op2, /* POP_Ew_G5 */ | undef_op2, /* POP_Ew_G5 */ |
| }; | }; |
| void (*insttable_G5Ed[])(UINT32) = { | void (CPUCALL *insttable_G5Ed[])(UINT32) = { |
| INC_Ed, | INC_Ed, |
| DEC_Ed, | DEC_Ed, |
| CALL_Ed, | CALL_Ed, |
| Line 1711 void (*insttable_G5Ed[])(UINT32) = { | Line 1708 void (*insttable_G5Ed[])(UINT32) = { |
| }; | }; |
| /* group 6 */ | /* group 6 */ |
| void (*insttable_G6[])(UINT32) = { | void (CPUCALL *insttable_G6[])(UINT32) = { |
| SLDT_Ew, | SLDT_Ew, |
| STR_Ew, | STR_Ew, |
| LLDT_Ew, | LLDT_Ew, |
| Line 1723 void (*insttable_G6[])(UINT32) = { | Line 1720 void (*insttable_G6[])(UINT32) = { |
| }; | }; |
| /* group 7 */ | /* group 7 */ |
| void (*insttable_G7[])(UINT32) = { | void (CPUCALL *insttable_G7[])(UINT32) = { |
| SGDT_Ms, | SGDT_Ms, |
| SIDT_Ms, | SIDT_Ms, |
| LGDT_Ms, | LGDT_Ms, |
| Line 1735 void (*insttable_G7[])(UINT32) = { | Line 1732 void (*insttable_G7[])(UINT32) = { |
| }; | }; |
| /* group 8 */ | /* group 8 */ |
| void (*insttable_G8EwIb[])(UINT32) = { | void (CPUCALL *insttable_G8EwIb[])(UINT32) = { |
| undef_op2, | undef_op2, |
| undef_op2, | undef_op2, |
| undef_op2, | undef_op2, |
| Line 1746 void (*insttable_G8EwIb[])(UINT32) = { | Line 1743 void (*insttable_G8EwIb[])(UINT32) = { |
| BTC_EwIb, | BTC_EwIb, |
| }; | }; |
| void (*insttable_G8EdIb[])(UINT32) = { | void (CPUCALL *insttable_G8EdIb[])(UINT32) = { |
| undef_op2, | undef_op2, |
| undef_op2, | undef_op2, |
| undef_op2, | undef_op2, |
| Line 1758 void (*insttable_G8EdIb[])(UINT32) = { | Line 1755 void (*insttable_G8EdIb[])(UINT32) = { |
| }; | }; |
| /* group 9 */ | /* group 9 */ |
| void (*insttable_G9[])(UINT32) = { | void (CPUCALL *insttable_G9[])(UINT32) = { |
| undef_op2, | undef_op2, |
| CMPXCHG8B, | CMPXCHG8B, |
| undef_op2, | undef_op2, |