Changeset 103613 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
- Timestamp:
- Feb 29, 2024 1:01:56 PM (9 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r103590 r103613 1544 1544 } 1545 1545 } 1546 IEMOP_BODY_BINARY_rv_rm(bRm, iemAImpl_xor_u16, iemAImpl_xor_u32, iemAImpl_xor_u64, 1, 0); 1546 1547 //I E M OP_BODY_BINARY_rv_rm(bRm, iemAImpl_xor_u16, iemAImpl_xor_u32, iemAImpl_xor_u64, 1, 0); - restore later. 1548 /* 1549 * START TEMP EXPERIMENTAL CODE 1550 */ 1551 if (IEM_IS_MODRM_REG_MODE(bRm)) 1552 { 1553 switch (pVCpu->iem.s.enmEffOpSize) 1554 { 1555 case IEMMODE_16BIT: 1556 IEM_MC_BEGIN(3, 0, 0, 0); 1557 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1558 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 1559 IEM_MC_ARG(uint16_t, u16Src, 1); 1560 IEM_MC_ARG(uint32_t *, pEFlags, 2); 1561 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_RM(pVCpu, bRm)); 1562 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1563 IEM_MC_REF_EFLAGS(pEFlags); 1564 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xor_u16, pu16Dst, u16Src, pEFlags); 1565 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1566 IEM_MC_END(); 1567 break; 1568 1569 case IEMMODE_32BIT: 1570 IEM_MC_BEGIN(3, 0, IEM_MC_F_MIN_386, 0); 1571 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1572 IEM_MC_ARG(uint32_t, u32Src, 1); 1573 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_RM(pVCpu, bRm)); 1574 IEM_MC_NATIVE_IF(RT_ARCH_VAL_AMD64 | RT_ARCH_VAL_ARM64) { 1575 IEM_MC_LOCAL(uint32_t, u32Dst); 1576 IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1577 /// @todo IEM_MC_LOCAL_EFLAGS(uEFlags); 1578 IEM_MC_LOCAL(uint32_t, uEFlags); 1579 IEM_MC_FETCH_EFLAGS(uEFlags); 1580 IEM_MC_NATIVE_EMIT_4(iemNativeEmit_xor_r_r_efl, u32Dst, u32Src, uEFlags, 32); 1581 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), u32Dst); 1582 IEM_MC_COMMIT_EFLAGS(uEFlags); 1583 } IEM_MC_NATIVE_ELSE() { 1584 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 1585 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1586 IEM_MC_ARG(uint32_t *, pEFlags, 2); 1587 IEM_MC_REF_EFLAGS(pEFlags); 1588 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xor_u32, pu32Dst, u32Src, pEFlags); 1589 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); 1590 } IEM_MC_NATIVE_ENDIF(); 1591 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1592 IEM_MC_END(); 1593 break; 1594 1595 case IEMMODE_64BIT: 1596 IEM_MC_BEGIN(3, 0, IEM_MC_F_64BIT, 0); 1597 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1598 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 1599 IEM_MC_ARG(uint64_t, u64Src, 1); 1600 IEM_MC_ARG(uint32_t *, pEFlags, 2); 1601 1602 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm)); 1603 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1604 IEM_MC_REF_EFLAGS(pEFlags); 1605 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xor_u64, pu64Dst, u64Src, pEFlags); 1606 1607 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1608 IEM_MC_END(); 1609 break; 1610 1611 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 1612 } 1613 } 1614 else 1615 { 1616 /* 1617 * We're accessing memory. 1618 */ 1619 switch (pVCpu->iem.s.enmEffOpSize) 1620 { 1621 case IEMMODE_16BIT: 1622 IEM_MC_BEGIN(3, 1, 0, 0); 1623 IEM_MC_ARG(uint16_t *, pu16Dst, 0); 1624 IEM_MC_ARG(uint16_t, u16Src, 1); 1625 IEM_MC_ARG(uint32_t *, pEFlags, 2); 1626 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 1627 1628 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 1629 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1630 IEM_MC_FETCH_MEM_U16(u16Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 1631 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1632 IEM_MC_REF_EFLAGS(pEFlags); 1633 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xor_u16, pu16Dst, u16Src, pEFlags); 1634 1635 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1636 IEM_MC_END(); 1637 break; 1638 1639 case IEMMODE_32BIT: 1640 IEM_MC_BEGIN(3, 1, IEM_MC_F_MIN_386, 0); 1641 IEM_MC_ARG(uint32_t *, pu32Dst, 0); 1642 IEM_MC_ARG(uint32_t, u32Src, 1); 1643 IEM_MC_ARG(uint32_t *, pEFlags, 2); 1644 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 1645 1646 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 1647 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1648 IEM_MC_FETCH_MEM_U32(u32Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 1649 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1650 IEM_MC_REF_EFLAGS(pEFlags); 1651 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xor_u32, pu32Dst, u32Src, pEFlags); 1652 1653 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); 1654 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1655 IEM_MC_END(); 1656 break; 1657 1658 case IEMMODE_64BIT: 1659 IEM_MC_BEGIN(3, 1, IEM_MC_F_64BIT, 0); 1660 IEM_MC_ARG(uint64_t *, pu64Dst, 0); 1661 IEM_MC_ARG(uint64_t, u64Src, 1); 1662 IEM_MC_ARG(uint32_t *, pEFlags, 2); 1663 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 1664 1665 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0); 1666 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 1667 IEM_MC_FETCH_MEM_U64(u64Src, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 1668 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1669 IEM_MC_REF_EFLAGS(pEFlags); 1670 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_xor_u64, pu64Dst, u64Src, pEFlags); 1671 1672 IEM_MC_ADVANCE_RIP_AND_FINISH(); 1673 IEM_MC_END(); 1674 break; 1675 1676 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 1677 } 1678 } 1679 /* END TEMP EXPERIMENTAL CODE */ 1547 1680 } 1548 1681
Note:
See TracChangeset
for help on using the changeset viewer.