VirtualBox

Changeset 103787 in vbox


Ignore:
Timestamp:
Mar 11, 2024 5:47:32 PM (9 months ago)
Author:
vboxsync
Message:

VMM/IEM: Add a qword index parameter to IEM_MC_FETCH_YREG_U64() and replace IEM_MC_FETCH_YREG_2ND_U64() with it, bugref:10614

Location:
trunk/src/VBox/VMM
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r103784 r103787  
    30943094    'IEM_MC_FETCH_XREG_PAIR_U128_AND_EAX_EDX_U32_SX_U64':        (McBlock.parseMcGeneric,           False, False, False, ),
    30953095    'IEM_MC_FETCH_XREG_PAIR_XMM':                                (McBlock.parseMcGeneric,           False, False, False, ),
    3096     'IEM_MC_FETCH_YREG_2ND_U64':                                 (McBlock.parseMcGeneric,           False, False, False, ),
    30973096    'IEM_MC_FETCH_YREG_U128':                                    (McBlock.parseMcGeneric,           False, False, False, ),
    30983097    'IEM_MC_FETCH_YREG_U256':                                    (McBlock.parseMcGeneric,           False, False, False, ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r103696 r103787  
    958958        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
    959959
    960         IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     960        IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
    961961        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    962962
     
    13221322        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
    13231323
    1324         IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     1324        IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
    13251325        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    13261326
     
    13691369        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
    13701370
    1371         IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     1371        IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
    13721372        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    13731373
     
    16761676        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
    16771677
    1678         IEM_MC_FETCH_YREG_2ND_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     1678        IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 1 /*a_iQWord*/);
    16791679        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    16801680
     
    17221722        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
    17231723
    1724         IEM_MC_FETCH_YREG_2ND_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     1724        IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 1 /*a_iQWord*/);
    17251725        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    17261726
     
    40654065            IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
    40664066
    4067             IEM_MC_FETCH_YREG_U64(u64Tmp, IEM_GET_MODRM_REG(pVCpu, bRm));
     4067            IEM_MC_FETCH_YREG_U64(u64Tmp, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
    40684068            IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), u64Tmp);
    40694069
     
    40834083            IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
    40844084
    4085             IEM_MC_FETCH_YREG_U64(u64Tmp, IEM_GET_MODRM_REG(pVCpu, bRm));
     4085            IEM_MC_FETCH_YREG_U64(u64Tmp, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
    40864086            IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u64Tmp);
    40874087
     
    49414941        IEM_MC_ACTUALIZE_AVX_STATE_FOR_READ();
    49424942
    4943         IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     4943        IEM_MC_FETCH_YREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
    49444944        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    49454945
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veLiveness.cpp

    r103778 r103787  
    711711
    712712#define IEM_MC_FETCH_YREG_U32(a_u32Dst, a_iYRegSrc)                 NOP()
    713 #define IEM_MC_FETCH_YREG_U64(a_u64Dst, a_iYRegSrc)                 NOP()
    714 #define IEM_MC_FETCH_YREG_2ND_U64(a_u64Dst, a_iYRegSrc)             NOP()
     713#define IEM_MC_FETCH_YREG_U64(a_u64Dst, a_iYRegSrc, a_iQWord)       NOP()
    715714#define IEM_MC_FETCH_YREG_U128(a_u128Dst, a_iYRegSrc)               NOP()
    716715#define IEM_MC_FETCH_YREG_U256(a_u256Dst, a_iYRegSrc)               NOP()
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r103784 r103787  
    1529915299
    1530015300
    15301 #define IEM_MC_FETCH_YREG_U64(a_u64Dst, a_iYRegSrc) \
    15302     off = iemNativeEmitSimdFetchYregU64(pReNative, off, a_u64Dst, a_iYRegSrc, 0)
     15301#define IEM_MC_FETCH_YREG_U64(a_u64Dst, a_iYRegSrc, a_iQWord) \
     15302    off = iemNativeEmitSimdFetchYregU64(pReNative, off, a_u64Dst, a_iYRegSrc, a_iQWord)
    1530315303
    1530415304/** Emits code for IEM_MC_FETCH_YREG_U64. */
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py

    r103778 r103787  
    18091809        'IEM_MC_FETCH_YREG_U128':                   '__yreg128',
    18101810        'IEM_MC_FETCH_YREG_U64':                    '__yreg64',
    1811         'IEM_MC_FETCH_YREG_2ND_U64':                '__yreg64',
    18121811        'IEM_MC_FETCH_YREG_U32':                    '__yreg32',
    18131812        'IEM_MC_STORE_YREG_U128':                   '__yreg128',
  • trunk/src/VBox/VMM/include/IEMMc.h

    r103778 r103787  
    611611         (a_u32Dst) = pVCpu->cpum.GstCtx.XState.x87.aXMM[iYRegSrcTmp].au32[0]; \
    612612    } while (0)
    613 #define IEM_MC_FETCH_YREG_U64(a_u64Dst, a_iYRegSrc) \
     613#define IEM_MC_FETCH_YREG_U64(a_u64Dst, a_iYRegSrc, a_iQWord) \
    614614    do { uintptr_t const iYRegSrcTmp    = (a_iYRegSrc); \
    615          (a_u64Dst) = pVCpu->cpum.GstCtx.XState.x87.aXMM[iYRegSrcTmp].au64[0]; \
    616     } while (0)
    617 #define IEM_MC_FETCH_YREG_2ND_U64(a_u64Dst, a_iYRegSrc) \
    618     do { uintptr_t const iYRegSrcTmp    = (a_iYRegSrc); \
    619          (a_u64Dst) = pVCpu->cpum.GstCtx.XState.x87.aXMM[iYRegSrcTmp].au64[1]; \
     615         (a_u64Dst) = pVCpu->cpum.GstCtx.XState.x87.aXMM[iYRegSrcTmp].au64[(a_iQWord)]; \
    620616    } while (0)
    621617#define IEM_MC_FETCH_YREG_U128(a_u128Dst, a_iYRegSrc) \
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r103778 r103787  
    838838#define IEM_MC_FETCH_YREG_U256(a_u256Value, a_iYRegSrc)             do { CHK_YREG_IDX(a_iYRegSrc); CHK_VAR(a_u256Value); (a_u256Value).au64[0] = (a_u256Value).au64[1] = (a_u256Value).au64[2] = (a_u256Value).au64[3] = 0; CHK_TYPE(RTUINT256U, a_u256Value); (void)fAvxRead; (void)fMcBegin; } while (0)
    839839#define IEM_MC_FETCH_YREG_U128(a_u128Value, a_iYRegSrc)             do { CHK_YREG_IDX(a_iYRegSrc); CHK_VAR(a_u128Value); (a_u128Value).au64[0] = (a_u128Value).au64[1] = 0; CHK_TYPE(RTUINT128U, a_u128Value); (void)fAvxRead; (void)fMcBegin; } while (0)
    840 #define IEM_MC_FETCH_YREG_U64(a_u64Value, a_iYRegSrc)               do { CHK_YREG_IDX(a_iYRegSrc); CHK_VAR(a_u64Value);  (a_u64Value) = UINT64_MAX; CHK_TYPE(uint64_t, a_u64Value); (void)fAvxRead; (void)fMcBegin; } while (0)
    841 #define IEM_MC_FETCH_YREG_2ND_U64(a_u64Value, a_iYRegSrc)           do { CHK_YREG_IDX(a_iYRegSrc); CHK_VAR(a_u64Value);  (a_u64Value) = UINT64_MAX; CHK_TYPE(uint64_t, a_u64Value); (void)fAvxRead; (void)fMcBegin; } while (0)
     840#define IEM_MC_FETCH_YREG_U64(a_u64Value, a_iYRegSrc, a_iQWord)     do { CHK_YREG_IDX(a_iYRegSrc); CHK_VAR(a_u64Value);  (a_u64Value) = UINT64_MAX; CHK_TYPE(uint64_t, a_u64Value); (void)fAvxRead; (void)fMcBegin; } while (0)
    842841#define IEM_MC_FETCH_YREG_U32(a_u32Value, a_iYRegSrc)               do { CHK_YREG_IDX(a_iYRegSrc); CHK_VAR(a_u32Value);  (a_u32Value) = UINT32_MAX; CHK_TYPE(uint32_t, a_u32Value); (void)fAvxRead; (void)fMcBegin; } while (0)
    843842#define IEM_MC_STORE_YREG_U128(a_iYRegDst, a_iDQword, a_u128Value)  do { CHK_YREG_IDX(a_iYRegDst); CHK_VAR(a_u128Value); CHK_TYPE(RTUINT128U, a_u128Value); (void)fAvxWrite; (void)fMcBegin; } while (0)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette