Author: hbelusca
Date: Tue Oct 14 21:51:00 2014
New Revision: 64745
URL:
http://svn.reactos.org/svn/reactos?rev=64745&view=rev
Log:
[FAST486]
- Invalid extended opcodes get a special handler, so that we are not anymore obliged to
check for NULL before running an extended opcode.
- To quickly retrieve extended opcode numbers, add their numbers in regard to their
handlers.
Modified:
trunk/reactos/lib/fast486/extraops.c
Modified: trunk/reactos/lib/fast486/extraops.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/extraops.c?rev…
==============================================================================
--- trunk/reactos/lib/fast486/extraops.c [iso-8859-1] (original)
+++ trunk/reactos/lib/fast486/extraops.c [iso-8859-1] Tue Oct 14 21:51:00 2014
@@ -37,134 +37,135 @@
FAST486_OPCODE_HANDLER_PROC
Fast486ExtendedHandlers[FAST486_NUM_OPCODE_HANDLERS] =
{
- Fast486OpcodeGroup0F00,
+ Fast486OpcodeGroup0F00, /* 0x00 - 0x01 */
Fast486OpcodeGroup0F01,
- Fast486ExtOpcodeLar,
- Fast486ExtOpcodeLsl,
- NULL, // Invalid
- NULL, // Invalid
- Fast486ExtOpcodeClts,
- NULL, // Invalid
- NULL, // TODO: OPCODE 0x08 NOT IMPLEMENTED
- NULL, // TODO: OPCODE 0x09 NOT IMPLEMENTED
- NULL, // Invalid
- NULL, // Reserved (UD1)
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- Fast486ExtOpcodeStoreControlReg,
- Fast486ExtOpcodeStoreDebugReg,
- Fast486ExtOpcodeLoadControlReg,
- Fast486ExtOpcodeLoadDebugReg,
- NULL, // TODO: OPCODE 0x24 NOT IMPLEMENTED
- NULL, // Invalid
- NULL, // TODO: OPCODE 0x26 NOT IMPLEMENTED
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
+ Fast486ExtOpcodeLar, /* 0x02 */
+ Fast486ExtOpcodeLsl, /* 0x03 */
+ Fast486ExtOpcodeInvalid, /* 0x04 - 0x05 */ // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeClts, /* 0x06 */
+ Fast486ExtOpcodeInvalid, /* 0x07 */ // Invalid
+ Fast486ExtOpcodeUnimplemented, // TODO: OPCODE 0x08 NOT IMPLEMENTED
+ Fast486ExtOpcodeUnimplemented, // TODO: OPCODE 0x09 NOT IMPLEMENTED
+ Fast486ExtOpcodeInvalid, /* 0x0A */ // Invalid
+ Fast486ExtOpcode0F0B, /* 0x0B */ // Reserved (UD2)
+ Fast486ExtOpcodeInvalid, /* 0x0C - 0x1F */ // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeStoreControlReg, /* 0x20 */
+ Fast486ExtOpcodeStoreDebugReg, /* 0x21 */
+ Fast486ExtOpcodeLoadControlReg, /* 0x22 */
+ Fast486ExtOpcodeLoadDebugReg, /* 0x23 */
+ Fast486ExtOpcodeUnimplemented, // TODO: OPCODE 0x24 NOT IMPLEMENTED
+ Fast486ExtOpcodeInvalid, /* 0x25 */ // Invalid
+ Fast486ExtOpcodeUnimplemented, // TODO: OPCODE 0x26 NOT IMPLEMENTED
+ Fast486ExtOpcodeInvalid, /* 0x27 - 0x7F */ // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeConditionalJmp, /* 0x80 - 0x8F */
Fast486ExtOpcodeConditionalJmp,
Fast486ExtOpcodeConditionalJmp,
Fast486ExtOpcodeConditionalJmp,
@@ -180,7 +181,7 @@
Fast486ExtOpcodeConditionalJmp,
Fast486ExtOpcodeConditionalJmp,
Fast486ExtOpcodeConditionalJmp,
- Fast486ExtOpcodeConditionalJmp,
+ Fast486ExtOpcodeConditionalSet, /* 0x90 - 0x9F */
Fast486ExtOpcodeConditionalSet,
Fast486ExtOpcodeConditionalSet,
Fast486ExtOpcodeConditionalSet,
@@ -196,47 +197,47 @@
Fast486ExtOpcodeConditionalSet,
Fast486ExtOpcodeConditionalSet,
Fast486ExtOpcodeConditionalSet,
- Fast486ExtOpcodeConditionalSet,
- Fast486ExtOpcodePushFs,
- Fast486ExtOpcodePopFs,
- NULL, // Invalid
- Fast486ExtOpcodeBitTest,
+ Fast486ExtOpcodePushFs, /* 0xA0 */
+ Fast486ExtOpcodePopFs, /* 0xA1 */
+ Fast486ExtOpcodeInvalid, /* 0xA2 */ // Invalid
+ Fast486ExtOpcodeBitTest, /* 0xA3 */
+ Fast486ExtOpcodeShld, /* 0xA4 - 0xA5 */
Fast486ExtOpcodeShld,
- Fast486ExtOpcodeShld,
- NULL, // Invalid
- NULL, // Invalid
- Fast486ExtOpcodePushGs,
+ Fast486ExtOpcodeInvalid, /* 0xA6 - 0xA7 */ // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodePushGs, /* 0xA8 - 0xA9 */
Fast486ExtOpcodePopGs,
- NULL, // Invalid
- Fast486ExtOpcodeBts,
+ Fast486ExtOpcodeInvalid, /* 0xAA */ // Invalid
+ Fast486ExtOpcodeBts, /* 0xAB */
+ Fast486ExtOpcodeShrd, /* 0xAC - 0xAD */
Fast486ExtOpcodeShrd,
- Fast486ExtOpcodeShrd,
- NULL, // Invalid
- Fast486ExtOpcodeImul,
- Fast486ExtOpcodeCmpXchgByte,
- Fast486ExtOpcodeCmpXchg,
- Fast486ExtOpcodeLss,
- Fast486ExtOpcodeBtr,
+ Fast486ExtOpcodeInvalid, /* 0xAE */ // Invalid
+ Fast486ExtOpcodeImul, /* 0xAF */
+ Fast486ExtOpcodeCmpXchgByte, /* 0xB0 */
+ Fast486ExtOpcodeCmpXchg, /* 0xB1 */
+ Fast486ExtOpcodeLss, /* 0xB2 */
+ Fast486ExtOpcodeBtr, /* 0xB3 */
+ Fast486ExtOpcodeLfsLgs, /* 0xB4 - 0xB5 */
Fast486ExtOpcodeLfsLgs,
- Fast486ExtOpcodeLfsLgs,
- Fast486ExtOpcodeMovzxByte,
+ Fast486ExtOpcodeMovzxByte, /* 0xB6 - 0xB7 */
Fast486ExtOpcodeMovzxWord,
- NULL, // Invalid
- Fast486OpcodeGroup0FB9,
- Fast486OpcodeGroup0FBA,
- Fast486ExtOpcodeBtc,
- Fast486ExtOpcodeBsf,
- Fast486ExtOpcodeBsr,
- Fast486ExtOpcodeMovsxByte,
+ Fast486ExtOpcodeInvalid, /* 0xB8 */ // Invalid
+ Fast486OpcodeGroup0FB9, /* 0xB9 */
+ Fast486OpcodeGroup0FBA, /* 0xBA */
+ Fast486ExtOpcodeBtc, /* 0xBB */
+ Fast486ExtOpcodeBsf, /* 0xBC */
+ Fast486ExtOpcodeBsr, /* 0xBD */
+ Fast486ExtOpcodeMovsxByte, /* 0xBE - 0xBF */
Fast486ExtOpcodeMovsxWord,
- Fast486ExtOpcodeXaddByte,
+ Fast486ExtOpcodeXaddByte, /* 0xC0 - 0xC1 */
Fast486ExtOpcodeXadd,
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
+ Fast486ExtOpcodeInvalid, /* 0xC2 - 0xC7 */ // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeBswap, /* 0xC8 - 0xCF */
Fast486ExtOpcodeBswap,
Fast486ExtOpcodeBswap,
Fast486ExtOpcodeBswap,
@@ -244,58 +245,78 @@
Fast486ExtOpcodeBswap,
Fast486ExtOpcodeBswap,
Fast486ExtOpcodeBswap,
- Fast486ExtOpcodeBswap,
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
- NULL, // Invalid
+ Fast486ExtOpcodeInvalid, /* 0xD0 - 0xFF */ // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
+ Fast486ExtOpcodeInvalid, // Invalid
};
/* PUBLIC FUNCTIONS ***********************************************************/
+
+FAST486_OPCODE_HANDLER(Fast486ExtOpcodeInvalid)
+{
+ DPRINT1("FAST486 -- Extended opcode 0x%02X is INVALID!\n", Opcode);
+ Fast486Exception(State, FAST486_EXCEPTION_UD);
+ return FALSE;
+}
+
+FAST486_OPCODE_HANDLER(Fast486ExtOpcodeUnimplemented)
+{
+ DPRINT1("FAST486 -- Extended opcode 0x%02X is UNIMPLEMENTED\n", Opcode);
+ // Fast486Exception(State, FAST486_EXCEPTION_UD);
+ return FALSE;
+}
+
+FAST486_OPCODE_HANDLER(Fast486ExtOpcode0F0B)
+{
+ /* Reserved opcode (UD2) */
+ Fast486Exception(State, FAST486_EXCEPTION_UD);
+ return FALSE;
+}
FAST486_OPCODE_HANDLER(Fast486ExtOpcodeLar)
{
@@ -2372,17 +2393,8 @@
return FALSE;
}
- if (Fast486ExtendedHandlers[SecondOpcode] != NULL)
- {
- /* Call the extended opcode handler */
- return Fast486ExtendedHandlers[SecondOpcode](State, SecondOpcode);
- }
- else
- {
- /* This is not a valid opcode */
- Fast486Exception(State, FAST486_EXCEPTION_UD);
- return FALSE;
- }
+ /* Call the extended opcode handler */
+ return Fast486ExtendedHandlers[SecondOpcode](State, SecondOpcode);
}
/* EOF */