VirtualBox

Changeset 9415 in vbox


Ignore:
Timestamp:
Jun 5, 2008 12:27:51 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
31654
Message:

Sync 64 bits register state.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/recompiler/VBoxRecompiler.c

    r9276 r9415  
    15991599
    16001600    /*
    1601      * Copy the registers which requires no special handling.
    1602      */
     1601     * Copy the registers which require no special handling.
     1602     */
     1603#ifdef TARGET_X86_64
     1604    Assert(R_EAX == 0);
     1605    pVM->rem.s.Env.regs[R_EAX]  = pCtx->rax;
     1606    Assert(R_ECX == 1);
     1607    pVM->rem.s.Env.regs[R_ECX]  = pCtx->rcx;
     1608    Assert(R_EDX == 2);
     1609    pVM->rem.s.Env.regs[R_EDX]  = pCtx->rdx;
     1610    Assert(R_EBX == 3);
     1611    pVM->rem.s.Env.regs[R_EBX]  = pCtx->rbx;
     1612    Assert(R_ESP == 4);
     1613    pVM->rem.s.Env.regs[R_ESP]  = pCtx->rsp;
     1614    Assert(R_EBP == 5);
     1615    pVM->rem.s.Env.regs[R_EBP]  = pCtx->rbp;
     1616    Assert(R_ESI == 6);
     1617    pVM->rem.s.Env.regs[R_ESI]  = pCtx->rsi;
     1618    Assert(R_EDI == 7);
     1619    pVM->rem.s.Env.regs[R_EDI]  = pCtx->rdi;
     1620    pVM->rem.s.Env.regs[8]      = pCtx->r8;
     1621    pVM->rem.s.Env.regs[9]      = pCtx->r9;
     1622    pVM->rem.s.Env.regs[10]     = pCtx->r10;
     1623    pVM->rem.s.Env.regs[11]     = pCtx->r11;
     1624    pVM->rem.s.Env.regs[12]     = pCtx->r12;
     1625    pVM->rem.s.Env.regs[13]     = pCtx->r13;
     1626    pVM->rem.s.Env.regs[14]     = pCtx->r14;
     1627    pVM->rem.s.Env.regs[15]     = pCtx->r15;
     1628
     1629    pVM->rem.s.Env.eip          = pCtx->rip;
     1630
     1631    pVM->rem.s.Env.eflags       = pCtx->rflags.u64;
     1632#else
    16031633    Assert(R_EAX == 0);
    16041634    pVM->rem.s.Env.regs[R_EAX]  = pCtx->eax;
     
    16201650
    16211651    pVM->rem.s.Env.eflags       = pCtx->eflags.u32;
     1652#endif
    16221653
    16231654    pVM->rem.s.Env.cr[2]        = pCtx->cr2;
     
    20172048////    dprintf2(("FPU state CW=%04X TT=%04X SW=%04X (%04X)\n", env->fpuc, env->fpstt, env->fpus, pVMCtx->fpu.FSW));
    20182049
     2050#ifdef TARGET_X86_64
     2051    pCtx->rdi           = pVM->rem.s.Env.regs[R_EDI];
     2052    pCtx->rsi           = pVM->rem.s.Env.regs[R_ESI];
     2053    pCtx->rbp           = pVM->rem.s.Env.regs[R_EBP];
     2054    pCtx->rax           = pVM->rem.s.Env.regs[R_EAX];
     2055    pCtx->rbx           = pVM->rem.s.Env.regs[R_EBX];
     2056    pCtx->rdx           = pVM->rem.s.Env.regs[R_EDX];
     2057    pCtx->rcx           = pVM->rem.s.Env.regs[R_ECX];
     2058    pCtx->r8            = pVM->rem.s.Env.regs[8];
     2059    pCtx->r9            = pVM->rem.s.Env.regs[9];
     2060    pCtx->r10           = pVM->rem.s.Env.regs[10];
     2061    pCtx->r11           = pVM->rem.s.Env.regs[11];
     2062    pCtx->r12           = pVM->rem.s.Env.regs[12];
     2063    pCtx->r13           = pVM->rem.s.Env.regs[13];
     2064    pCtx->r14           = pVM->rem.s.Env.regs[14];
     2065    pCtx->r15           = pVM->rem.s.Env.regs[15];
     2066
     2067    pCtx->rsp           = pVM->rem.s.Env.regs[R_ESP];
     2068
     2069#else
    20192070    pCtx->edi           = pVM->rem.s.Env.regs[R_EDI];
    20202071    pCtx->esi           = pVM->rem.s.Env.regs[R_ESI];
     
    20262077
    20272078    pCtx->esp           = pVM->rem.s.Env.regs[R_ESP];
     2079#endif
     2080
    20282081    pCtx->ss            = pVM->rem.s.Env.segs[R_SS].selector;
    20292082
     
    20602113    pCtx->cs            = pVM->rem.s.Env.segs[R_CS].selector;
    20612114
     2115#ifdef TARGET_X86_64
     2116    pCtx->rip           = pVM->rem.s.Env.eip;
     2117    pCtx->rflags.u64    = pVM->rem.s.Env.eflags;
     2118#else
    20622119    pCtx->eip           = pVM->rem.s.Env.eip;
    20632120    pCtx->eflags.u32    = pVM->rem.s.Env.eflags;
     2121#endif
    20642122
    20652123    pCtx->cr0           = pVM->rem.s.Env.cr[0];
     
    22192277////    dprintf2(("FPU state CW=%04X TT=%04X SW=%04X (%04X)\n", env->fpuc, env->fpstt, env->fpus, pVMCtx->fpu.FSW));
    22202278
     2279#ifdef TARGET_X86_64
     2280    pCtx->rdi           = pVM->rem.s.Env.regs[R_EDI];
     2281    pCtx->rsi           = pVM->rem.s.Env.regs[R_ESI];
     2282    pCtx->rbp           = pVM->rem.s.Env.regs[R_EBP];
     2283    pCtx->rax           = pVM->rem.s.Env.regs[R_EAX];
     2284    pCtx->rbx           = pVM->rem.s.Env.regs[R_EBX];
     2285    pCtx->rdx           = pVM->rem.s.Env.regs[R_EDX];
     2286    pCtx->rcx           = pVM->rem.s.Env.regs[R_ECX];
     2287    pCtx->r8            = pVM->rem.s.Env.regs[8];
     2288    pCtx->r9            = pVM->rem.s.Env.regs[9];
     2289    pCtx->r10           = pVM->rem.s.Env.regs[10];
     2290    pCtx->r11           = pVM->rem.s.Env.regs[11];
     2291    pCtx->r12           = pVM->rem.s.Env.regs[12];
     2292    pCtx->r13           = pVM->rem.s.Env.regs[13];
     2293    pCtx->r14           = pVM->rem.s.Env.regs[14];
     2294    pCtx->r15           = pVM->rem.s.Env.regs[15];
     2295
     2296    pCtx->rsp           = pVM->rem.s.Env.regs[R_ESP];
     2297#else
    22212298    pCtx->edi           = pVM->rem.s.Env.regs[R_EDI];
    22222299    pCtx->esi           = pVM->rem.s.Env.regs[R_ESI];
     
    22282305
    22292306    pCtx->esp           = pVM->rem.s.Env.regs[R_ESP];
     2307#endif
     2308
    22302309    pCtx->ss            = pVM->rem.s.Env.segs[R_SS].selector;
    22312310
     
    22362315    pCtx->cs            = pVM->rem.s.Env.segs[R_CS].selector;
    22372316
     2317#ifdef TARGET_X86_64
     2318    pCtx->rip           = pVM->rem.s.Env.eip;
     2319    pCtx->rflags.u64    = pVM->rem.s.Env.eflags;
     2320#else
    22382321    pCtx->eip           = pVM->rem.s.Env.eip;
    22392322    pCtx->eflags.u32    = pVM->rem.s.Env.eflags;
     2323#endif
    22402324
    22412325    pCtx->cr0           = pVM->rem.s.Env.cr[0];
     
    23202404    pCtx->SysEnter.eip     = pVM->rem.s.Env.sysenter_eip;
    23212405    pCtx->SysEnter.esp     = pVM->rem.s.Env.sysenter_esp;
     2406
     2407    /* System MSRs. */
     2408    pCtx->msrEFER          = pVM->rem.s.Env.efer;
     2409    pCtx->msrSTAR          = pVM->rem.s.Env.star;
     2410    pCtx->msrPAT           = pVM->rem.s.Env.pat;
     2411#ifdef TARGET_X86_64
     2412    pCtx->msrLSTAR         = pVM->rem.s.Env.lstar;
     2413    pCtx->msrCSTAR         = pVM->rem.s.Env.cstar;
     2414    pCtx->msrSFMASK        = pVM->rem.s.Env.fmask;
     2415    pCtx->msrFSBASE        = pVM->rem.s.Env.segs[R_FS].base;
     2416    pCtx->msrGSBASE        = pVM->rem.s.Env.segs[R_GS].base;
     2417    pCtx->msrKERNELGSBASE  = pVM->rem.s.Env.kernelgsbase;
     2418#endif
     2419
    23222420}
    23232421
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette