Changeset 9415 in vbox
- Timestamp:
- Jun 5, 2008 12:27:51 PM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 31654
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/recompiler/VBoxRecompiler.c
r9276 r9415 1599 1599 1600 1600 /* 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 1603 1633 Assert(R_EAX == 0); 1604 1634 pVM->rem.s.Env.regs[R_EAX] = pCtx->eax; … … 1620 1650 1621 1651 pVM->rem.s.Env.eflags = pCtx->eflags.u32; 1652 #endif 1622 1653 1623 1654 pVM->rem.s.Env.cr[2] = pCtx->cr2; … … 2017 2048 //// dprintf2(("FPU state CW=%04X TT=%04X SW=%04X (%04X)\n", env->fpuc, env->fpstt, env->fpus, pVMCtx->fpu.FSW)); 2018 2049 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 2019 2070 pCtx->edi = pVM->rem.s.Env.regs[R_EDI]; 2020 2071 pCtx->esi = pVM->rem.s.Env.regs[R_ESI]; … … 2026 2077 2027 2078 pCtx->esp = pVM->rem.s.Env.regs[R_ESP]; 2079 #endif 2080 2028 2081 pCtx->ss = pVM->rem.s.Env.segs[R_SS].selector; 2029 2082 … … 2060 2113 pCtx->cs = pVM->rem.s.Env.segs[R_CS].selector; 2061 2114 2115 #ifdef TARGET_X86_64 2116 pCtx->rip = pVM->rem.s.Env.eip; 2117 pCtx->rflags.u64 = pVM->rem.s.Env.eflags; 2118 #else 2062 2119 pCtx->eip = pVM->rem.s.Env.eip; 2063 2120 pCtx->eflags.u32 = pVM->rem.s.Env.eflags; 2121 #endif 2064 2122 2065 2123 pCtx->cr0 = pVM->rem.s.Env.cr[0]; … … 2219 2277 //// dprintf2(("FPU state CW=%04X TT=%04X SW=%04X (%04X)\n", env->fpuc, env->fpstt, env->fpus, pVMCtx->fpu.FSW)); 2220 2278 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 2221 2298 pCtx->edi = pVM->rem.s.Env.regs[R_EDI]; 2222 2299 pCtx->esi = pVM->rem.s.Env.regs[R_ESI]; … … 2228 2305 2229 2306 pCtx->esp = pVM->rem.s.Env.regs[R_ESP]; 2307 #endif 2308 2230 2309 pCtx->ss = pVM->rem.s.Env.segs[R_SS].selector; 2231 2310 … … 2236 2315 pCtx->cs = pVM->rem.s.Env.segs[R_CS].selector; 2237 2316 2317 #ifdef TARGET_X86_64 2318 pCtx->rip = pVM->rem.s.Env.eip; 2319 pCtx->rflags.u64 = pVM->rem.s.Env.eflags; 2320 #else 2238 2321 pCtx->eip = pVM->rem.s.Env.eip; 2239 2322 pCtx->eflags.u32 = pVM->rem.s.Env.eflags; 2323 #endif 2240 2324 2241 2325 pCtx->cr0 = pVM->rem.s.Env.cr[0]; … … 2320 2404 pCtx->SysEnter.eip = pVM->rem.s.Env.sysenter_eip; 2321 2405 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 2322 2420 } 2323 2421
Note:
See TracChangeset
for help on using the changeset viewer.