- Timestamp:
- May 10, 2016 6:47:16 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r60913 r60914 1598 1598 1599 1599 1600 /**1601 * Interpret CRx write.1602 *1603 * @returns VBox status code.1604 * @param pVM The cross context VM structure.1605 * @param pVCpu The cross context virtual CPU structure.1606 * @param pRegFrame The register frame.1607 * @param DestRegCrx CRx register index (DISUSE_REG_CR*)1608 * @param SrcRegGen General purpose register index (USE_REG_E**))1609 *1610 */1611 static int emInterpretCRxWrite(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegCrx, uint32_t SrcRegGen)1612 {1613 uint64_t val;1614 int rc;1615 Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu));1616 1617 if (CPUMIsGuestIn64BitCode(pVCpu))1618 rc = DISFetchReg64(pRegFrame, SrcRegGen, &val);1619 else1620 {1621 uint32_t val32;1622 rc = DISFetchReg32(pRegFrame, SrcRegGen, &val32);1623 val = val32;1624 }1625 1626 if (RT_SUCCESS(rc))1627 return emUpdateCRx(pVM, pVCpu, pRegFrame, DestRegCrx, val);1628 1629 return VERR_EM_INTERPRETER;1630 }1631 1632 1633 1600 #ifdef LOG_ENABLED 1634 1601 static const char *emMSRtoString(uint32_t uMsr) … … 1753 1720 1754 1721 /** 1755 * Interpret CRx read.1756 *1757 * @returns VBox status code.1758 * @param pVM The cross context VM structure.1759 * @param pVCpu The cross context virtual CPU structure.1760 * @param pRegFrame The register frame.1761 * @param DestRegGen General purpose register index (USE_REG_E**))1762 * @param SrcRegCrx CRx register index (DISUSE_REG_CR*)1763 *1764 */1765 static int emInterpretCRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegGen, uint32_t SrcRegCrx)1766 {1767 Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu));1768 uint64_t val64;1769 int rc = CPUMGetGuestCRx(pVCpu, SrcRegCrx, &val64);1770 AssertMsgRCReturn(rc, ("CPUMGetGuestCRx %d failed\n", SrcRegCrx), VERR_EM_INTERPRETER);1771 NOREF(pVM);1772 1773 if (CPUMIsGuestIn64BitCode(pVCpu))1774 rc = DISWriteReg64(pRegFrame, DestRegGen, val64);1775 else1776 rc = DISWriteReg32(pRegFrame, DestRegGen, val64);1777 1778 if (RT_SUCCESS(rc))1779 {1780 LogFlow(("MOV_CR: gen32=%d CR=%d val=%RX64\n", DestRegGen, SrcRegCrx, val64));1781 return VINF_SUCCESS;1782 }1783 return VERR_EM_INTERPRETER;1784 }1785 1786 1787 /**1788 1722 * Interpret DRx write. 1789 1723 * … … 3408 3342 } 3409 3343 #endif 3344 3345 3346 /** 3347 * Interpret CRx read. 3348 * 3349 * @returns VBox status code. 3350 * @param pVM The cross context VM structure. 3351 * @param pVCpu The cross context virtual CPU structure. 3352 * @param pRegFrame The register frame. 3353 * @param DestRegGen General purpose register index (USE_REG_E**)) 3354 * @param SrcRegCrx CRx register index (DISUSE_REG_CR*) 3355 * 3356 */ 3357 static int emInterpretCRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegGen, uint32_t SrcRegCrx) 3358 { 3359 Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu)); 3360 uint64_t val64; 3361 int rc = CPUMGetGuestCRx(pVCpu, SrcRegCrx, &val64); 3362 AssertMsgRCReturn(rc, ("CPUMGetGuestCRx %d failed\n", SrcRegCrx), VERR_EM_INTERPRETER); 3363 NOREF(pVM); 3364 3365 if (CPUMIsGuestIn64BitCode(pVCpu)) 3366 rc = DISWriteReg64(pRegFrame, DestRegGen, val64); 3367 else 3368 rc = DISWriteReg32(pRegFrame, DestRegGen, val64); 3369 3370 if (RT_SUCCESS(rc)) 3371 { 3372 LogFlow(("MOV_CR: gen32=%d CR=%d val=%RX64\n", DestRegGen, SrcRegCrx, val64)); 3373 return VINF_SUCCESS; 3374 } 3375 return VERR_EM_INTERPRETER; 3376 } 3377 3378 3379 /** 3380 * Interpret CRx write. 3381 * 3382 * @returns VBox status code. 3383 * @param pVM The cross context VM structure. 3384 * @param pVCpu The cross context virtual CPU structure. 3385 * @param pRegFrame The register frame. 3386 * @param DestRegCrx CRx register index (DISUSE_REG_CR*) 3387 * @param SrcRegGen General purpose register index (USE_REG_E**)) 3388 * 3389 */ 3390 static int emInterpretCRxWrite(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegCrx, uint32_t SrcRegGen) 3391 { 3392 uint64_t val; 3393 int rc; 3394 Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu)); 3395 3396 if (CPUMIsGuestIn64BitCode(pVCpu)) 3397 rc = DISFetchReg64(pRegFrame, SrcRegGen, &val); 3398 else 3399 { 3400 uint32_t val32; 3401 rc = DISFetchReg32(pRegFrame, SrcRegGen, &val32); 3402 val = val32; 3403 } 3404 3405 if (RT_SUCCESS(rc)) 3406 return emUpdateCRx(pVM, pVCpu, pRegFrame, DestRegCrx, val); 3407 3408 return VERR_EM_INTERPRETER; 3409 } 3410 3410 3411 3411 3412 /**
Note:
See TracChangeset
for help on using the changeset viewer.