Author: aandrejevic Date: Sat Sep 21 02:18:41 2013 New Revision: 60260
URL: http://svn.reactos.org/svn/reactos?rev=60260&view=rev Log: [SOFT386] Fix prefix handling.
Modified: branches/ntvdm/lib/soft386/opcodes.c
Modified: branches/ntvdm/lib/soft386/opcodes.c URL: http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/soft386/opcodes.c?rev=... ============================================================================== --- branches/ntvdm/lib/soft386/opcodes.c [iso-8859-1] (original) +++ branches/ntvdm/lib/soft386/opcodes.c [iso-8859-1] Sat Sep 21 02:18:41 2013 @@ -1425,16 +1425,17 @@ /* Make sure this is the right instruction */ ASSERT(Opcode == 0x05);
- if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (State->PrefixFlags & SOFT386_PREFIX_OPSIZE) { /* The OPSIZE prefix toggles the size */ Size = !Size; - } - else - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; }
if (Size) @@ -1695,16 +1696,17 @@ /* Make sure this is the right instruction */ ASSERT(Opcode == 0x0D);
- if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (State->PrefixFlags & SOFT386_PREFIX_OPSIZE) { /* The OPSIZE prefix toggles the size */ Size = !Size; - } - else - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; }
if (Size) @@ -1925,9 +1927,9 @@ /* Make sure this is the right instruction */ ASSERT(Opcode == 0x24);
- if (State->PrefixFlags) - { - /* This opcode doesn't take any prefixes */ + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ Soft386Exception(State, SOFT386_EXCEPTION_UD); return FALSE; } @@ -1961,16 +1963,17 @@ /* Make sure this is the right instruction */ ASSERT(Opcode == 0x25);
- if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (State->PrefixFlags & SOFT386_PREFIX_OPSIZE) { /* The OPSIZE prefix toggles the size */ Size = !Size; - } - else - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; }
if (Size) @@ -2227,16 +2230,17 @@ /* Make sure this is the right instruction */ ASSERT(Opcode == 0x35);
- if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (State->PrefixFlags & SOFT386_PREFIX_OPSIZE) { /* The OPSIZE prefix toggles the size */ Size = !Size; - } - else - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; }
if (Size) @@ -2478,16 +2482,17 @@ /* Make sure this is the right instruction */ ASSERT(Opcode == 0xA9);
- if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (State->PrefixFlags & SOFT386_PREFIX_OPSIZE) { /* The OPSIZE prefix toggles the size */ Size = !Size; - } - else - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; }
if (Size) @@ -2965,16 +2970,17 @@ /* Make sure this is the right instruction */ ASSERT(Opcode == 0x15);
- if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (State->PrefixFlags & SOFT386_PREFIX_OPSIZE) { /* The OPSIZE prefix toggles the size */ Size = !Size; - } - else - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; }
if (Size) @@ -3418,16 +3424,17 @@ /* Make sure this is the right instruction */ ASSERT((Opcode & 0xEF) == 0x2D);
- if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (State->PrefixFlags & SOFT386_PREFIX_OPSIZE) { /* The OPSIZE prefix toggles the size */ Size = !Size; - } - else - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; }
if (Size)