/[qemu]/qemu/cpu-exec.c
ViewVC logotype

Diff of /qemu/cpu-exec.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by bellard, Sat Jul 26 12:06:08 2003 UTC revision 1.9 by bellard, Sat Jul 26 18:01:40 2003 UTC
# Line 244  int cpu_exec(CPUState *env1) Line 244  int cpu_exec(CPUState *env1)
244                             (unsigned long)env->segs[R_ES].base |                             (unsigned long)env->segs[R_ES].base |
245                             (unsigned long)env->segs[R_SS].base) != 0) <<                             (unsigned long)env->segs[R_SS].base) != 0) <<
246                      GEN_FLAG_ADDSEG_SHIFT;                      GEN_FLAG_ADDSEG_SHIFT;
247                  if (!(env->eflags & VM_MASK)) {                  if (env->cr[0] & CR0_PE_MASK) {
248                      flags |= (env->segs[R_CS].selector & 3) << GEN_FLAG_CPL_SHIFT;                      if (!(env->eflags & VM_MASK))
249                  } else {                          flags |= (env->segs[R_CS].selector & 3) <<
250                      /* NOTE: a dummy CPL is kept */                              GEN_FLAG_CPL_SHIFT;
251                      flags |= (1 << GEN_FLAG_VM_SHIFT);                      else
252                      flags |= (3 << GEN_FLAG_CPL_SHIFT);                          flags |= (1 << GEN_FLAG_VM_SHIFT);
253                  }                  }
254                  flags |= (env->eflags & (IOPL_MASK | TF_MASK));                  flags |= (env->eflags & (IOPL_MASK | TF_MASK));
255                  cs_base = env->segs[R_CS].base;                  cs_base = env->segs[R_CS].base;
# Line 396  void cpu_x86_load_seg(CPUX86State *s, in Line 396  void cpu_x86_load_seg(CPUX86State *s, in
396    
397      saved_env = env;      saved_env = env;
398      env = s;      env = s;
399      if (env->eflags & VM_MASK) {      if (!(env->cr[0] & CR0_PE_MASK) || (env->eflags & VM_MASK)) {
400          SegmentCache *sc;          SegmentCache *sc;
401          selector &= 0xffff;          selector &= 0xffff;
402          sc = &env->segs[seg_reg];          sc = &env->segs[seg_reg];
         /* NOTE: in VM86 mode, limit and flags are never reloaded,  
            so we must load them here */  
403          sc->base = (void *)(selector << 4);          sc->base = (void *)(selector << 4);
404          sc->limit = 0xffff;          sc->limit = 0xffff;
405          sc->flags = 0;          sc->flags = 0;

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26