/[qemu]/qemu/helper-i386.c
ViewVC logotype

Diff of /qemu/helper-i386.c

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

revision 1.8 by bellard, Mon Jul 7 11:30:46 2003 UTC revision 1.9 by bellard, Sat Jul 26 17:59:00 2003 UTC
# Line 788  static inline void load_seg_vm(int seg, Line 788  static inline void load_seg_vm(int seg,
788      sc->limit = 0xffff;      sc->limit = 0xffff;
789  }  }
790    
791    /* real mode iret */
792    void helper_iret_real(int shift)
793    {
794        uint32_t sp, new_cs, new_eip, new_eflags, new_esp;
795        uint8_t *ssp;
796        int eflags_mask;
797        
798        sp = env->regs[R_ESP] & 0xffff;
799        ssp = env->segs[R_SS].base + sp;
800        if (shift == 1) {
801            /* 32 bits */
802            new_eflags = ldl(ssp + 8);
803            new_cs = ldl(ssp + 4) & 0xffff;
804            new_eip = ldl(ssp) & 0xffff;
805        } else {
806            /* 16 bits */
807            new_eflags = lduw(ssp + 4);
808            new_cs = lduw(ssp + 2);
809            new_eip = lduw(ssp);
810        }
811        new_esp = sp + (6 << shift);
812        env->regs[R_ESP] = (env->regs[R_ESP] & 0xffff0000) |
813            (new_esp & 0xffff);
814        load_seg_vm(R_CS, new_cs);
815        env->eip = new_eip;
816        eflags_mask = FL_UPDATE_CPL0_MASK;
817        if (shift == 0)
818            eflags_mask &= 0xffff;
819        load_eflags(new_eflags, eflags_mask);
820    }
821    
822  /* protected mode iret */  /* protected mode iret */
823  void helper_iret_protected(int shift)  void helper_iret_protected(int shift)
824  {  {

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