diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2012-01-07 02:15:35 -0800 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2012-01-07 02:15:35 -0800 |
commit | ec936364b7238cddea7734ea79c6e04b52a683c6 (patch) | |
tree | 788fc19c3ba599d6f39d3990769888a0650be5ff /src/arch/x86 | |
parent | 36a822f08e88483b41af214ace4fd3dccf3aa8cb (diff) | |
parent | 9b52717a92ed9592bd98a41683509f538262a5c7 (diff) | |
download | gem5-ec936364b7238cddea7734ea79c6e04b52a683c6.tar.xz |
Merge with the main repository again.
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/isa/microops/regop.isa | 11 | ||||
-rw-r--r-- | src/arch/x86/predecoder.cc | 2 |
2 files changed, 6 insertions, 7 deletions
diff --git a/src/arch/x86/isa/microops/regop.isa b/src/arch/x86/isa/microops/regop.isa index a6e0564ba..bc139a609 100644 --- a/src/arch/x86/isa/microops/regop.isa +++ b/src/arch/x86/isa/microops/regop.isa @@ -1335,16 +1335,15 @@ let {{ if (selector.si || selector.ti) { if (!desc.p) { fault = new StackFault(selector); - } - } else { - if ((m5reg.submode != SixtyFourBitMode || - m5reg.cpl == 3) || - !(desc.s == 1 && - desc.type.codeOrData == 0 && desc.type.w) || + } else if (!(desc.s == 1 && desc.type.codeOrData == 0 && + desc.type.w) || (desc.dpl != m5reg.cpl) || (selector.rpl != m5reg.cpl)) { fault = new GeneralProtection(selector); } + } else if (m5reg.submode != SixtyFourBitMode || + m5reg.cpl == 3) { + fault = new GeneralProtection(selector); } break; case SegIretCheck: diff --git a/src/arch/x86/predecoder.cc b/src/arch/x86/predecoder.cc index 429b91687..a4aa93b48 100644 --- a/src/arch/x86/predecoder.cc +++ b/src/arch/x86/predecoder.cc @@ -186,7 +186,7 @@ namespace X86ISA DPRINTF(Predecoder, "Found two byte opcode.\n"); emi.opcode.prefixA = nextByte; } - else if(emi.opcode.num == 2 && (nextByte == 0x38 || nextByte == 0x3F)) + else if(emi.opcode.num == 2 && (nextByte == 0x38 || nextByte == 0x3A)) { nextState = OpcodeState; DPRINTF(Predecoder, "Found three byte opcode.\n"); |