diff --git a/src/cpu/core_normal/prefix_none.h b/src/cpu/core_normal/prefix_none.h index d0e73555..24e6c177 100644 --- a/src/cpu/core_normal/prefix_none.h +++ b/src/cpu/core_normal/prefix_none.h @@ -433,11 +433,13 @@ if (rm >= 0xc0 ) {GetEArb;*earb=*rmrb;} else { if (cpu.pmode) { - Descriptor desc; - cpu.gdt.GetDescriptor(SegValue(core.base_val_ds),desc); - if ((desc.Type()==DESC_CODE_R_NC_A) || (desc.Type()==DESC_CODE_R_NC_NA)) { - CPU_Exception(EXCEPTION_GP,SegValue(core.base_val_ds) & 0xfffc); - continue; + if (GCC_UNLIKELY((rm==0x05) && (!cpu.code.big))) { + Descriptor desc; + cpu.gdt.GetDescriptor(SegValue(core.base_val_ds),desc); + if ((desc.Type()==DESC_CODE_R_NC_A) || (desc.Type()==DESC_CODE_R_NC_NA)) { + CPU_Exception(EXCEPTION_GP,SegValue(core.base_val_ds) & 0xfffc); + continue; + } } } GetEAa;SaveMb(eaa,*rmrb);