Changeset 61382 in vbox
- Timestamp:
- Jun 1, 2016 6:30:46 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 107693
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r61143 r61382 5394 5394 { 5395 5395 pFpuCtx->DS = 0; 5396 pFpuCtx->FPUDP = (uint32_t)GCPtrEff |((uint32_t)sel << 4);5396 pFpuCtx->FPUDP = (uint32_t)GCPtrEff + ((uint32_t)sel << 4); 5397 5397 } 5398 5398 else -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r61031 r61382 6488 6488 { 6489 6489 /** @todo Testcase: what is stored in the "gray" areas? (figure 8-9 and 8-10) */ 6490 uPtr.pu16[0*2] = pSrcX87->FCW; 6491 uPtr.pu16[1*2] = pSrcX87->FSW; 6492 uPtr.pu16[2*2] = iemFpuCalcFullFtw(pSrcX87); 6490 uPtr.pu16[0*2] = pSrcX87->FCW; 6491 uPtr.pu16[0*2+1] = 0xffff; /* (0xffff observed on intel skylake.) */ 6492 uPtr.pu16[1*2] = pSrcX87->FSW; 6493 uPtr.pu16[1*2+1] = 0xffff; 6494 uPtr.pu16[2*2] = iemFpuCalcFullFtw(pSrcX87); 6495 uPtr.pu16[2*2+1] = 0xffff; 6493 6496 if (IEM_IS_REAL_OR_V86_MODE(pIemCpu)) 6494 6497 { 6495 uPtr.pu16[3*2] = (uint16_t)pSrcX87->FPUIP;6496 uPtr.pu32[4] = ((pSrcX87->FPUIP & UINT32_C(0xffff0000)) >> 4) | pSrcX87->FOP;6497 uPtr.pu16[5*2] = (uint16_t)pSrcX87->FPUDP;6498 uPtr.pu32[6] = (pSrcX87->FPUDP & UINT32_C(0xffff0000)) >> 4;6498 uPtr.pu16[3*2] = (uint16_t)pSrcX87->FPUIP; 6499 uPtr.pu32[4] = ((pSrcX87->FPUIP & UINT32_C(0xffff0000)) >> 4) | pSrcX87->FOP; 6500 uPtr.pu16[5*2] = (uint16_t)pSrcX87->FPUDP; 6501 uPtr.pu32[6] = (pSrcX87->FPUDP & UINT32_C(0xffff0000)) >> 4; 6499 6502 } 6500 6503 else 6501 6504 { 6502 uPtr.pu32[3] = pSrcX87->FPUIP; 6503 uPtr.pu16[4*2] = pSrcX87->CS; 6504 uPtr.pu16[4*2+1]= pSrcX87->FOP; 6505 uPtr.pu32[5] = pSrcX87->FPUDP; 6506 uPtr.pu16[6*2] = pSrcX87->DS; 6505 uPtr.pu32[3] = pSrcX87->FPUIP; 6506 uPtr.pu16[4*2] = pSrcX87->CS; 6507 uPtr.pu16[4*2+1] = pSrcX87->FOP; 6508 uPtr.pu32[5] = pSrcX87->FPUDP; 6509 uPtr.pu16[6*2] = pSrcX87->DS; 6510 uPtr.pu16[6*2+1] = 0xffff; 6507 6511 } 6508 6512 } -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r61107 r61382 13618 13618 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 13619 13619 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13620 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 13620 13621 IEM_MC_ASSIGN(iEffSeg, pIemCpu->iEffSeg); 13621 13622 IEM_MC_CALL_CIMPL_3(iemCImpl_fldenv, enmEffOpSize, iEffSeg, GCPtrEffSrc); … … 13635 13636 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 13636 13637 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13638 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 13637 13639 IEM_MC_FETCH_MEM_U16(u16Fsw, pIemCpu->iEffSeg, GCPtrEffSrc); 13638 13640 IEM_MC_CALL_CIMPL_1(iemCImpl_fldcw, u16Fsw); … … 13653 13655 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 13654 13656 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 13657 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 13655 13658 IEM_MC_ASSIGN(iEffSeg, pIemCpu->iEffSeg); 13656 13659 IEM_MC_CALL_CIMPL_3(iemCImpl_fnstenv, enmEffOpSize, iEffSeg, GCPtrEffDst); … … 14991 14994 IEM_MC_BEGIN(0,0); 14992 14995 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 14996 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 14993 14997 IEM_MC_CLEAR_FSW_EX(); 14994 14998 IEM_MC_ADVANCE_RIP(); … … 15529 15533 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 15530 15534 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 15535 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 15531 15536 IEM_MC_ASSIGN(iEffSeg, pIemCpu->iEffSeg); 15532 15537 IEM_MC_CALL_CIMPL_3(iemCImpl_frstor, enmEffOpSize, iEffSeg, GCPtrEffSrc); … … 15547 15552 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 15548 15553 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 15554 IEM_MC_ACTUALIZE_FPU_STATE_FOR_READ(); 15549 15555 IEM_MC_ASSIGN(iEffSeg, pIemCpu->iEffSeg); 15550 15556 IEM_MC_CALL_CIMPL_3(iemCImpl_fnsave, enmEffOpSize, iEffSeg, GCPtrEffDst);
Note:
See TracChangeset
for help on using the changeset viewer.