mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
fixed 16 bit segment optimisations
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@922 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
2a2820560d
commit
dc196a57e3
2 changed files with 13 additions and 9 deletions
|
@ -116,7 +116,7 @@
|
|||
/* 16 or 32 segments */
|
||||
#define HF_CS32_SHIFT 4
|
||||
#define HF_SS32_SHIFT 5
|
||||
/* zero base for DS, ES and SS */
|
||||
/* zero base for DS, ES and SS : can be '0' only in 32 bit CS segment */
|
||||
#define HF_ADDSEG_SHIFT 6
|
||||
/* copy of CR0.PE (protected mode) */
|
||||
#define HF_PE_SHIFT 7
|
||||
|
@ -398,7 +398,9 @@ static inline void cpu_x86_load_seg_cache(CPUX86State *env,
|
|||
>> (DESC_B_SHIFT - HF_CS32_SHIFT);
|
||||
new_hflags |= (env->segs[R_SS].flags & DESC_B_MASK)
|
||||
>> (DESC_B_SHIFT - HF_SS32_SHIFT);
|
||||
if (!(env->cr[0] & CR0_PE_MASK) || (env->eflags & VM_MASK)) {
|
||||
if (!(env->cr[0] & CR0_PE_MASK) ||
|
||||
(env->eflags & VM_MASK) ||
|
||||
!(new_hflags & HF_CS32_MASK)) {
|
||||
/* XXX: try to avoid this test. The problem comes from the
|
||||
fact that is real mode or vm86 mode we only modify the
|
||||
'base' and 'selector' fields of the segment cache to go
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue