Author: aandrejevic Date: Thu Jun 4 20:25:14 2015 New Revision: 68016
URL: http://svn.reactos.org/svn/reactos?rev=68016&view=rev Log: [FAST486] Fix VERR and VERW.
Modified: trunk/reactos/lib/fast486/opgroups.c
Modified: trunk/reactos/lib/fast486/opgroups.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/opgroups.c?rev=... ============================================================================== --- trunk/reactos/lib/fast486/opgroups.c [iso-8859-1] (original) +++ trunk/reactos/lib/fast486/opgroups.c [iso-8859-1] Thu Jun 4 20:25:14 2015 @@ -2002,13 +2002,6 @@ return; }
- /* This is a privileged instruction */ - if (Fast486GetCurrentPrivLevel(State) != 0) - { - Fast486Exception(State, FAST486_EXCEPTION_GP); - return; - } - if (!Fast486ReadModrmWordOperands(State, &ModRegRm, NULL, @@ -2033,23 +2026,23 @@
/* Set ZF if it is valid and accessible */ State->Flags.Zf = GdtEntry.Present // must be present - && GdtEntry.SystemType // must be a segment - && (((ModRegRm.Register == 4) - /* code segments are only readable if the RW bit is set */ - && (!GdtEntry.Executable || GdtEntry.ReadWrite)) - || ((ModRegRm.Register == 5) - /* code segments are never writable, data segments are writable when RW is set */ - && (!GdtEntry.Executable && GdtEntry.ReadWrite))) - /* - * for segments other than conforming code segments, - * both RPL and CPL must be less than or equal to DPL - */ - && ((!GdtEntry.Executable || !GdtEntry.DirConf) - && ((GET_SEGMENT_RPL(Selector) <= GdtEntry.Dpl) - && (Fast486GetCurrentPrivLevel(State) <= GdtEntry.Dpl))) - /* for conforming code segments, DPL must be less than or equal to CPL */ - && ((GdtEntry.Executable && GdtEntry.DirConf) - && (GdtEntry.Dpl <= Fast486GetCurrentPrivLevel(State))); + && GdtEntry.SystemType // must be a segment + && (((ModRegRm.Register == 4) + /* code segments are only readable if the RW bit is set */ + && (!GdtEntry.Executable || GdtEntry.ReadWrite)) + || ((ModRegRm.Register == 5) + /* code segments are never writable, data segments are writable when RW is set */ + && (!GdtEntry.Executable && GdtEntry.ReadWrite))) + /* + * for segments other than conforming code segments, + * both RPL and CPL must be less than or equal to DPL + */ + && (((!GdtEntry.Executable || !GdtEntry.DirConf) + && (GET_SEGMENT_RPL(Selector) <= GdtEntry.Dpl) + && (Fast486GetCurrentPrivLevel(State) <= GdtEntry.Dpl)) + /* for conforming code segments, DPL must be less than or equal to CPL */ + || ((GdtEntry.Executable && GdtEntry.DirConf) + && (GdtEntry.Dpl <= Fast486GetCurrentPrivLevel(State))));
break;