- Timestamp:
- Nov 27, 2023 3:48:50 PM (15 months ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r102077 r102331 9004 9004 IEM_MC_ARG(uint8_t, cShiftArg, 1); 9005 9005 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9006 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 9006 9007 IEM_MC_REF_GREG_U8(pu8Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); 9007 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);9008 9008 IEM_MC_REF_EFLAGS(pEFlags); 9009 9009 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU8, pu8Dst, cShiftArg, pEFlags); … … 9068 9068 IEM_MC_ARG(uint8_t, cShiftArg, 1); 9069 9069 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9070 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 9070 9071 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); 9071 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);9072 9072 IEM_MC_REF_EFLAGS(pEFlags); 9073 9073 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU16, pu16Dst, cShiftArg, pEFlags); … … 9082 9082 IEM_MC_ARG(uint8_t, cShiftArg, 1); 9083 9083 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9084 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 9084 9085 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); 9085 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);9086 9086 IEM_MC_REF_EFLAGS(pEFlags); 9087 9087 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU32, pu32Dst, cShiftArg, pEFlags); … … 9097 9097 IEM_MC_ARG(uint8_t, cShiftArg, 1); 9098 9098 IEM_MC_ARG(uint32_t *, pEFlags, 2); 9099 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 9099 9100 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); 9100 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);9101 9101 IEM_MC_REF_EFLAGS(pEFlags); 9102 9102 IEM_MC_CALL_VOID_AIMPL_3(pImpl->pfnNormalU64, pu64Dst, cShiftArg, pEFlags); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r102313 r102331 2692 2692 return "Block is missing IEMOP_HLP_DONE_*DECODING* invocation!"; 2693 2693 2694 def checkForFetchAfterRef(self, aoStmts, asRegRefClasses): 2695 """ 2696 Checks that the register references are placed after register fetches 2697 from the same register class. 2698 Returns None on success, error string on failure. 2699 2700 Example: 2701 SHL CH, CL 2702 2703 If the CH reference is created first, the fetching of CL will cause the 2704 RCX guest register to have an active shadow register when it's being 2705 updated. The shadow register will then be stale after the SHL operation 2706 completes, without us noticing. 2707 2708 It's easier to ensure we've got correct code than complicating the 2709 recompiler code with safeguards here. 2710 """ 2711 for iStmt, oStmt in enumerate(aoStmts): 2712 if not oStmt.isCppStmt(): 2713 offRef = oStmt.sName.find("_REF_"); 2714 if offRef > 0: 2715 if oStmt.sName not in ('IEM_MC_REF_LOCAL', ): 2716 if oStmt.sName in ('IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80', 2717 'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80', 2718 'IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST',): 2719 sClass = 'FPUREG'; 2720 else: 2721 offUnderscore = oStmt.sName.find('_', offRef + 5); 2722 if offUnderscore > 0: 2723 assert offUnderscore > offRef; 2724 sClass = oStmt.sName[offRef + 5 : offUnderscore]; 2725 else: 2726 sClass = oStmt.sName[offRef + 5]; 2727 asRegRefClasses[sClass] = True; 2728 else: 2729 offFetch = oStmt.sName.find("_FETCH_"); 2730 if offFetch > 0: 2731 sClass = oStmt.sName[offFetch + 7 : ]; 2732 if not sClass.startswith("MEM"): 2733 offUnderscore = sClass.find('_'); 2734 if offUnderscore >= 0: 2735 assert offUnderscore > 0; 2736 sClass = sClass[:offUnderscore]; 2737 if sClass in asRegRefClasses: 2738 return "statement #%u: %s following REF! That'll mess up guest register shadowing" \ 2739 % (iStmt + 1, oStmt.sName,); 2740 2741 # Go into branches. 2742 if isinstance(oStmt, McStmtCond): 2743 sRet = self.checkForFetchAfterRef(oStmt.aoIfBranch, asRegRefClasses); 2744 if sRet: 2745 return sRet; 2746 sRet = self.checkForFetchAfterRef(oStmt.aoElseBranch, asRegRefClasses); 2747 if sRet: 2748 return sRet; 2749 return None; 2750 2694 2751 def check(self): 2695 2752 """ … … 2705 2762 2706 2763 sRet = self.checkForDoneDecoding(aoStmts); 2764 if sRet: 2765 asRet.append(sRet); 2766 2767 sRet = self.checkForFetchAfterRef(aoStmts, {}); 2707 2768 if sRet: 2708 2769 asRet.append(sRet); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f38.cpp.h
r102011 r102331 1814 1814 IEM_MC_ARG(uint32_t *, puDst, 0); 1815 1815 IEM_MC_ARG(uint8_t, uSrc, 1); 1816 IEM_MC_FETCH_GREG_U8(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 1816 1817 IEM_MC_REF_GREG_U32(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1817 IEM_MC_FETCH_GREG_U8(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));1818 1818 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u8, iemAImpl_crc32_u8_fallback), puDst, uSrc); 1819 1819 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm)); … … 1933 1933 IEM_MC_ARG(uint32_t *, puDst, 0); 1934 1934 IEM_MC_ARG(uint16_t, uSrc, 1); 1935 IEM_MC_FETCH_GREG_U16(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 1935 1936 IEM_MC_REF_GREG_U32(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1936 IEM_MC_FETCH_GREG_U16(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));1937 1937 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u16, iemAImpl_crc32_u16_fallback), 1938 1938 puDst, uSrc); … … 1947 1947 IEM_MC_ARG(uint32_t *, puDst, 0); 1948 1948 IEM_MC_ARG(uint32_t, uSrc, 1); 1949 IEM_MC_FETCH_GREG_U32(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 1949 1950 IEM_MC_REF_GREG_U32(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1950 IEM_MC_FETCH_GREG_U32(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));1951 1951 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u32, iemAImpl_crc32_u32_fallback), 1952 1952 puDst, uSrc); … … 1961 1961 IEM_MC_ARG(uint32_t *, puDst, 0); 1962 1962 IEM_MC_ARG(uint64_t, uSrc, 1); 1963 IEM_MC_FETCH_GREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 1963 1964 IEM_MC_REF_GREG_U32(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1964 IEM_MC_FETCH_GREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));1965 1965 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse42, iemAImpl_crc32_u64, iemAImpl_crc32_u64_fallback), 1966 1966 puDst, uSrc); … … 2080 2080 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ 2081 2081 IEM_MC_ARG(uint64_t, u64Src, 2); \ 2082 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 2082 2083 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2083 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \2084 2084 IEM_MC_REF_EFLAGS(pEFlags); \ 2085 2085 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAdx, iemAImpl_## a_Variant ##_u64, iemAImpl_## a_Variant ##_u64_fallback), \ … … 2115 2115 IEM_MC_ARG(uint32_t *, pEFlags, 1); \ 2116 2116 IEM_MC_ARG(uint32_t, u32Src, 2); \ 2117 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 2117 2118 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2118 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_RM(pVCpu, bRm)); \2119 2119 IEM_MC_REF_EFLAGS(pEFlags); \ 2120 2120 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAdx, iemAImpl_## a_Variant ##_u32, iemAImpl_## a_Variant ##_u32_fallback), \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstThree0f3a.cpp.h
r102012 r102331 486 486 IEM_MC_PREPARE_FPU_USAGE(); 487 487 IEM_MC_FPU_TO_MMX_MODE(); 488 IEM_MC_FETCH_MREG_U64(uSrc, IEM_GET_MODRM_RM_8(bRm)); 488 489 IEM_MC_REF_MREG_U64(pDst, IEM_GET_MODRM_REG_8(bRm)); 489 IEM_MC_FETCH_MREG_U64(uSrc, IEM_GET_MODRM_RM_8(bRm));490 490 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fSsse3, iemAImpl_palignr_u64, iemAImpl_palignr_u64_fallback), 491 491 pDst, uSrc, bImmArg); … … 1268 1268 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1269 1269 IEM_MC_PREPARE_SSE_USAGE(); 1270 IEM_MC_FETCH_XREG_PAIR_U128_AND_RAX_RDX_U64(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm)); 1270 1271 IEM_MC_REF_GREG_U32(pu32Ecx, X86_GREG_xCX); 1271 IEM_MC_FETCH_XREG_PAIR_U128_AND_RAX_RDX_U64(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm));1272 1272 IEM_MC_REF_EFLAGS(pEFlags); 1273 1273 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fSse42, … … 1328 1328 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1329 1329 IEM_MC_PREPARE_SSE_USAGE(); 1330 IEM_MC_FETCH_XREG_PAIR_U128_AND_EAX_EDX_U32_SX_U64(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm)); 1330 1331 IEM_MC_REF_GREG_U32(pu32Ecx, X86_GREG_xCX); 1331 IEM_MC_FETCH_XREG_PAIR_U128_AND_EAX_EDX_U32_SX_U64(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm));1332 1332 IEM_MC_REF_EFLAGS(pEFlags); 1333 1333 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fSse42, … … 1458 1458 IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT(); 1459 1459 IEM_MC_PREPARE_SSE_USAGE(); 1460 IEM_MC_FETCH_XREG_PAIR_U128(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm)); 1460 1461 IEM_MC_REF_GREG_U32(pu32Ecx, X86_GREG_xCX); 1461 IEM_MC_FETCH_XREG_PAIR_U128(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm));1462 1462 IEM_MC_REF_EFLAGS(pEFlags); 1463 1463 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fSse42, -
trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h
r102029 r102331 9567 9567 9568 9568 IEM_MC_FETCH_GREG_U16(u16Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 9569 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 9569 9570 IEM_MC_REF_GREG_U16(pu16Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); 9570 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);9571 9571 IEM_MC_REF_EFLAGS(pEFlags); 9572 9572 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU16, pu16Dst, u16Src, cShiftArg, pEFlags); … … 9585 9585 9586 9586 IEM_MC_FETCH_GREG_U32(u32Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 9587 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 9587 9588 IEM_MC_REF_GREG_U32(pu32Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); 9588 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);9589 9589 IEM_MC_REF_EFLAGS(pEFlags); 9590 9590 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU32, pu32Dst, u32Src, cShiftArg, pEFlags); … … 9604 9604 9605 9605 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 9606 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX); 9606 9607 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); 9607 IEM_MC_FETCH_GREG_U8(cShiftArg, X86_GREG_xCX);9608 9608 IEM_MC_REF_EFLAGS(pEFlags); 9609 9609 IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnNormalU64, pu64Dst, u64Src, cShiftArg, pEFlags); … … 10358 10358 IEM_MC_ARG(uint32_t *, pEFlags, 3); 10359 10359 10360 #ifndef RT_ARCH_X86 10361 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 10362 #endif 10360 10363 IEM_MC_REF_GREG_U64(pu64Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); 10361 10364 IEM_MC_REF_GREG_U64(pu64Rax, X86_GREG_xAX); … … 10368 10371 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64_locked, pu64Dst, pu64Rax, pu64Src, pEFlags); 10369 10372 #else 10370 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm));10371 10373 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 10372 10374 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64, pu64Dst, pu64Rax, u64Src, pEFlags); … … 10377 10379 IEM_MC_ADVANCE_RIP_AND_FINISH(); 10378 10380 IEM_MC_END(); 10381 break; 10379 10382 break; 10380 10383 … … 10465 10468 IEMOP_HLP_DONE_DECODING(); 10466 10469 IEM_MC_MEM_MAP_U64_RW(pu64Dst, bUnmapInfo, pVCpu->iem.s.iEffSeg, GCPtrEffDst); 10470 #ifndef RT_ARCH_X86 10471 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm)); 10472 #endif 10467 10473 IEM_MC_FETCH_GREG_U64(u64Rax, X86_GREG_xAX); 10468 10474 IEM_MC_FETCH_EFLAGS(EFlags); … … 10475 10481 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64_locked, pu64Dst, pu64Rax, pu64Src, pEFlags); 10476 10482 #else 10477 IEM_MC_FETCH_GREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm));10478 10483 if (!(pVCpu->iem.s.fPrefixes & IEM_OP_PRF_LOCK)) 10479 10484 IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpxchg_u64, pu64Dst, pu64Rax, u64Src, pEFlags); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap2.cpp.h
r101850 r102331 574 574 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); \ 575 575 IEM_MC_PREPARE_AVX_USAGE(); \ 576 IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/); \ 576 577 IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 577 IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/); \578 578 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_ ## a_Instr ## _u128, \ 579 579 iemAImpl_## a_Instr ## _u128_fallback), \ … … 619 619 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); \ 620 620 IEM_MC_PREPARE_AVX_USAGE(); \ 621 IEM_MC_FETCH_MEM_U ## a_SrcWidth (uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \ 621 622 IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 622 IEM_MC_FETCH_MEM_U ## a_SrcWidth (uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); \623 623 IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_ ## a_Instr ## _u128, \ 624 624 iemAImpl_ ## a_Instr ## _u128_fallback), \ … … 1651 1651 IEM_MC_ARG(uint64_t, uSrc2, 2); 1652 1652 IEM_MC_ARG(uint32_t *, pEFlags, 3); 1653 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm));1654 1653 IEM_MC_FETCH_GREG_U64(uSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1655 1654 IEM_MC_FETCH_GREG_U64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 1655 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1656 1656 IEM_MC_REF_EFLAGS(pEFlags); 1657 1657 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_andn_u64, iemAImpl_andn_u64_fallback), … … 1668 1668 IEM_MC_ARG(uint32_t, uSrc2, 2); 1669 1669 IEM_MC_ARG(uint32_t *, pEFlags, 3); 1670 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm));1671 1670 IEM_MC_FETCH_GREG_U32(uSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 1672 1671 IEM_MC_FETCH_GREG_U32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 1672 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1673 1673 IEM_MC_REF_EFLAGS(pEFlags); 1674 1674 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_andn_u32, iemAImpl_andn_u32_fallback), … … 1751 1751 IEM_MC_ARG(uint64_t, uSrc, 1); \ 1752 1752 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 1753 IEM_MC_FETCH_GREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 1753 1754 IEM_MC_REF_GREG_U64(pDst, IEM_GET_EFFECTIVE_VVVV(pVCpu)); \ 1754 IEM_MC_FETCH_GREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \1755 1755 IEM_MC_REF_EFLAGS(pEFlags); \ 1756 1756 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u64, \ … … 1766 1766 IEM_MC_ARG(uint32_t, uSrc, 1); \ 1767 1767 IEM_MC_ARG(uint32_t *, pEFlags, 2); \ 1768 IEM_MC_FETCH_GREG_U32(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 1768 1769 IEM_MC_REF_GREG_U32(pDst, IEM_GET_EFFECTIVE_VVVV(pVCpu)); \ 1769 IEM_MC_FETCH_GREG_U32(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \1770 1770 IEM_MC_REF_EFLAGS(pEFlags); \ 1771 1771 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fBmi1, iemAImpl_ ## a_Instr ## _u32, \ … … 1903 1903 IEM_MC_ARG(uint64_t, uSrc2, 2); \ 1904 1904 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 1905 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \1906 1905 IEM_MC_FETCH_GREG_U64(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 1907 1906 IEM_MC_FETCH_GREG_U64(uSrc2, IEM_GET_EFFECTIVE_VVVV(pVCpu)); \ 1907 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 1908 1908 IEM_MC_REF_EFLAGS(pEFlags); \ 1909 1909 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, iemAImpl_ ## a_Instr ## _u64, \ … … 1921 1921 IEM_MC_ARG(uint32_t, uSrc2, 2); \ 1922 1922 IEM_MC_ARG(uint32_t *, pEFlags, 3); \ 1923 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \1924 1923 IEM_MC_FETCH_GREG_U32(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 1925 1924 IEM_MC_FETCH_GREG_U32(uSrc2, IEM_GET_EFFECTIVE_VVVV(pVCpu)); \ 1925 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 1926 1926 IEM_MC_REF_EFLAGS(pEFlags); \ 1927 1927 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, iemAImpl_ ## a_Instr ## _u32, \ … … 1998 1998 IEM_MC_ARG(uint64_t, uSrc1, 1); \ 1999 1999 IEM_MC_ARG(uint64_t, uSrc2, 2); \ 2000 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \2001 2000 IEM_MC_FETCH_GREG_U64(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 2002 2001 IEM_MC_FETCH_GREG_U64(uSrc2, IEM_GET_EFFECTIVE_VVVV(pVCpu)); \ 2002 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2003 2003 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, iemAImpl_ ## a_Instr ## _u64, \ 2004 2004 iemAImpl_ ## a_Instr ## _u64_fallback), pDst, uSrc1, uSrc2); \ … … 2013 2013 IEM_MC_ARG(uint32_t, uSrc1, 1); \ 2014 2014 IEM_MC_ARG(uint32_t, uSrc2, 2); \ 2015 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \2016 2015 IEM_MC_FETCH_GREG_U32(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 2017 2016 IEM_MC_FETCH_GREG_U32(uSrc2, IEM_GET_EFFECTIVE_VVVV(pVCpu)); \ 2017 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2018 2018 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, iemAImpl_ ## a_Instr ## _u32, \ 2019 2019 iemAImpl_ ## a_Instr ## _u32_fallback), pDst, uSrc1, uSrc2); \ … … 2090 2090 IEM_MC_ARG(uint64_t, uSrc1, 1); \ 2091 2091 IEM_MC_ARG(uint64_t, uSrc2, 2); \ 2092 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \2093 2092 IEM_MC_FETCH_GREG_U64(uSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); \ 2094 2093 IEM_MC_FETCH_GREG_U64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 2094 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2095 2095 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, \ 2096 2096 iemAImpl_ ## a_Instr ## _u64, \ … … 2106 2106 IEM_MC_ARG(uint32_t, uSrc1, 1); \ 2107 2107 IEM_MC_ARG(uint32_t, uSrc2, 2); \ 2108 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \2109 2108 IEM_MC_FETCH_GREG_U32(uSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu)); \ 2110 2109 IEM_MC_FETCH_GREG_U32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); \ 2110 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \ 2111 2111 IEM_MC_CALL_VOID_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(a_fFeatureMember, \ 2112 2112 iemAImpl_ ## a_Instr ## _u32, \ … … 2202 2202 IEM_MC_ARG(uint64_t, uSrc1, 2); 2203 2203 IEM_MC_ARG(uint64_t, uSrc2, 3); 2204 IEM_MC_FETCH_GREG_U64(uSrc1, X86_GREG_xDX); 2205 IEM_MC_FETCH_GREG_U64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 2204 2206 IEM_MC_REF_GREG_U64(pDst1, IEM_GET_MODRM_REG(pVCpu, bRm)); 2205 2207 IEM_MC_REF_GREG_U64(pDst2, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 2206 IEM_MC_FETCH_GREG_U64(uSrc1, X86_GREG_xDX);2207 IEM_MC_FETCH_GREG_U64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));2208 2208 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi2, iemAImpl_mulx_u64, iemAImpl_mulx_u64_fallback), 2209 2209 pDst1, pDst2, uSrc1, uSrc2); … … 2219 2219 IEM_MC_ARG(uint32_t, uSrc1, 2); 2220 2220 IEM_MC_ARG(uint32_t, uSrc2, 3); 2221 IEM_MC_FETCH_GREG_U32(uSrc1, X86_GREG_xDX); 2222 IEM_MC_FETCH_GREG_U32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm)); 2221 2223 IEM_MC_REF_GREG_U32(pDst1, IEM_GET_MODRM_REG(pVCpu, bRm)); 2222 2224 IEM_MC_REF_GREG_U32(pDst2, IEM_GET_EFFECTIVE_VVVV(pVCpu)); 2223 IEM_MC_FETCH_GREG_U32(uSrc1, X86_GREG_xDX);2224 IEM_MC_FETCH_GREG_U32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));2225 2225 IEM_MC_CALL_VOID_AIMPL_4(IEM_SELECT_HOST_OR_FALLBACK(fBmi2, iemAImpl_mulx_u32, iemAImpl_mulx_u32_fallback), 2226 2226 pDst1, pDst2, uSrc1, uSrc2); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h
r101850 r102331 1136 1136 IEM_MC_ARG(uint64_t, uSrc1, 1); 1137 1137 IEM_MC_ARG_CONST(uint64_t, uSrc2, bImm8, 2); 1138 IEM_MC_FETCH_GREG_U64(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm)); 1138 1139 IEM_MC_REF_GREG_U64(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1139 IEM_MC_FETCH_GREG_U64(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm));1140 1140 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_rorx_u64, pDst, uSrc1, uSrc2); 1141 1141 IEM_MC_ADVANCE_RIP_AND_FINISH(); … … 1149 1149 IEM_MC_ARG(uint32_t, uSrc1, 1); 1150 1150 IEM_MC_ARG_CONST(uint32_t, uSrc2, bImm8, 2); 1151 IEM_MC_FETCH_GREG_U32(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm)); 1151 1152 IEM_MC_REF_GREG_U32(pDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 1152 IEM_MC_FETCH_GREG_U32(uSrc1, IEM_GET_MODRM_RM(pVCpu, bRm));1153 1153 IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_rorx_u32, pDst, uSrc1, uSrc2); 1154 1154 IEM_MC_CLEAR_HIGH_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm));
Note:
See TracChangeset
for help on using the changeset viewer.