Changeset 47291 in vbox
- Timestamp:
- Jul 22, 2013 1:17:28 AM (12 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r47288 r47291 3583 3583 DECLINLINE(RTGCPTR) iemRegGetEffRsp(PCCPUMCTX pCtx) 3584 3584 { 3585 if (pCtx->ss.Attr.n.u1Long )3585 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3586 3586 return pCtx->rsp; 3587 3587 if (pCtx->ss.Attr.n.u1DefBig) … … 3641 3641 DECLINLINE(void) iemRegAddToRsp(PCPUMCTX pCtx, uint8_t cbToAdd) 3642 3642 { 3643 if (pCtx->ss.Attr.n.u1Long )3643 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3644 3644 pCtx->rsp += cbToAdd; 3645 3645 else if (pCtx->ss.Attr.n.u1DefBig) … … 3659 3659 DECLINLINE(void) iemRegSubFromRsp(PCPUMCTX pCtx, uint8_t cbToSub) 3660 3660 { 3661 if (pCtx->ss.Attr.n.u1Long )3661 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3662 3662 pCtx->rsp -= cbToSub; 3663 3663 else if (pCtx->ss.Attr.n.u1DefBig) … … 3677 3677 DECLINLINE(void) iemRegAddToRspEx(PRTUINT64U pTmpRsp, uint16_t cbToAdd, PCCPUMCTX pCtx) 3678 3678 { 3679 if (pCtx->ss.Attr.n.u1Long )3679 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3680 3680 pTmpRsp->u += cbToAdd; 3681 3681 else if (pCtx->ss.Attr.n.u1DefBig) … … 3697 3697 DECLINLINE(void) iemRegSubFromRspEx(PRTUINT64U pTmpRsp, uint16_t cbToSub, PCCPUMCTX pCtx) 3698 3698 { 3699 if (pCtx->ss.Attr.n.u1Long )3699 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3700 3700 pTmpRsp->u -= cbToSub; 3701 3701 else if (pCtx->ss.Attr.n.u1DefBig) … … 3721 3721 uTmpRsp.u = pCtx->rsp; 3722 3722 3723 if (pCtx->ss.Attr.n.u1Long )3723 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3724 3724 GCPtrTop = uTmpRsp.u -= cbItem; 3725 3725 else if (pCtx->ss.Attr.n.u1DefBig) … … 3747 3747 uTmpRsp.u = pCtx->rsp; 3748 3748 3749 if (pCtx->ss.Attr.n.u1Long )3749 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3750 3750 { 3751 3751 GCPtrTop = uTmpRsp.u; … … 3780 3780 RTGCPTR GCPtrTop; 3781 3781 3782 if (pCtx->ss.Attr.n.u1Long )3782 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3783 3783 GCPtrTop = pTmpRsp->u -= cbItem; 3784 3784 else if (pCtx->ss.Attr.n.u1DefBig) … … 3802 3802 { 3803 3803 RTGCPTR GCPtrTop; 3804 if (pCtx->ss.Attr.n.u1Long )3804 if (pCtx->ss.Attr.n.u1Long || pCtx->ss.Attr.n.u1Unusable) 3805 3805 { 3806 3806 GCPtrTop = pTmpRsp->u; … … 8545 8545 iemVerifyAssertRecord(pIemCpu, pIemRec, "Extra IEM record!"); 8546 8546 else if (pOtherRec != NULL) 8547 iemVerifyAssertRecord(pIemCpu, p IemRec, "Extra Other record!");8547 iemVerifyAssertRecord(pIemCpu, pOtherRec, "Extra Other record!"); 8548 8548 } 8549 8549 pIemCpu->CTX_SUFF(pCtx) = pOrgCtx; -
trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
r47285 r47291 3347 3347 */ 3348 3348 void *pvDesc; 3349 rcStrict = iemMemMap(pIemCpu, &pvDesc, 8, UINT8_MAX, pCtx->gdtr.pGdt , IEM_ACCESS_DATA_RW);3349 rcStrict = iemMemMap(pIemCpu, &pvDesc, 8, UINT8_MAX, pCtx->gdtr.pGdt + (uNewTr & X86_SEL_MASK_OFF_RPL), IEM_ACCESS_DATA_RW); 3350 3350 if (rcStrict != VINF_SUCCESS) 3351 3351 return rcStrict; -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r47284 r47291 130 130 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 131 131 132 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); 132 if (pImpl != &g_iemAImpl_test) 133 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); 133 134 IEM_MC_ADVANCE_RIP(); 134 135 IEM_MC_END(); … … 483 484 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, u32Src, pEFlags); 484 485 485 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); 486 if (pImpl != &g_iemAImpl_test) 487 IEM_MC_CLEAR_HIGH_GREG_U64_BY_REF(pu32Dst); 486 488 IEM_MC_ADVANCE_RIP(); 487 489 IEM_MC_END(); … … 15662 15664 else 15663 15665 { 15664 /* The new RIP is taken from a register. */15666 /* The new RIP is taken from a memory location. */ 15665 15667 switch (pIemCpu->enmEffOpSize) 15666 15668 { … … 15687 15689 case IEMMODE_64BIT: 15688 15690 IEM_MC_BEGIN(0, 2); 15689 IEM_MC_LOCAL(uint 32_t, u32Target);15691 IEM_MC_LOCAL(uint64_t, u64Target); 15690 15692 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 15691 15693 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 15692 IEM_MC_FETCH_MEM_U 32(u32Target, pIemCpu->iEffSeg, GCPtrEffSrc);15693 IEM_MC_SET_RIP_U 32(u32Target);15694 IEM_MC_FETCH_MEM_U64(u64Target, pIemCpu->iEffSeg, GCPtrEffSrc); 15695 IEM_MC_SET_RIP_U64(u64Target); 15694 15696 IEM_MC_END() 15695 15697 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.