VirtualBox

Changeset 103834 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Mar 13, 2024 3:32:59 PM (9 months ago)
Author:
vboxsync
Message:

VMM/IEM: Implement native emitter for IEM_MC_CLEAR_XREG_U32_MASK(), bugref:10614

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

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

    r103828 r103834  
    29972997    'IEM_MC_CLEAR_FSW_EX':                                       (McBlock.parseMcGeneric,           True,  True,  False, ),
    29982998    'IEM_MC_CLEAR_HIGH_GREG_U64':                                (McBlock.parseMcGeneric,           True,  True,  True,  ),
    2999     'IEM_MC_CLEAR_XREG_U32_MASK':                                (McBlock.parseMcGeneric,           True,  True,  False, ),
     2999    'IEM_MC_CLEAR_XREG_U32_MASK':                                (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    30003000    'IEM_MC_CLEAR_YREG_128_UP':                                  (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    30013001    'IEM_MC_COMMIT_EFLAGS':                                      (McBlock.parseMcGeneric,           True,  True,  True,  ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h

    r103828 r103834  
    71057105}
    71067106
     7107
     7108#define IEM_MC_CLEAR_XREG_U32_MASK(a_iXReg, a_bMask) \
     7109    off = iemNativeEmitSimdClearXregU32Mask(pReNative, off, a_iXReg, a_bMask)
     7110
     7111
     7112/** Emits code for IEM_MC_CLEAR_XREG_U32_MASK. */
     7113DECL_INLINE_THROW(uint32_t)
     7114iemNativeEmitSimdClearXregU32Mask(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t iXReg, uint8_t bImm8Mask)
     7115{
     7116    uint8_t const idxSimdRegDst = iemNativeSimdRegAllocTmpForGuestSimdReg(pReNative, &off, IEMNATIVEGSTSIMDREG_SIMD(iXReg),
     7117                                                                          kIemNativeGstSimdRegLdStSz_Low128, kIemNativeGstRegUse_ForUpdate);
     7118
     7119    /** @todo r=aeichner For certain bit combinations we could reduce the number of emitted instructions. */
     7120    if (bImm8Mask & RT_BIT(0))
     7121        off = iemNativeEmitSimdZeroVecRegElemU32(pReNative, off, idxSimdRegDst, 0 /*iDWord*/);
     7122    if (bImm8Mask & RT_BIT(1))
     7123        off = iemNativeEmitSimdZeroVecRegElemU32(pReNative, off, idxSimdRegDst, 1 /*iDWord*/);
     7124    if (bImm8Mask & RT_BIT(2))
     7125        off = iemNativeEmitSimdZeroVecRegElemU32(pReNative, off, idxSimdRegDst, 2 /*iDWord*/);
     7126    if (bImm8Mask & RT_BIT(3))
     7127        off = iemNativeEmitSimdZeroVecRegElemU32(pReNative, off, idxSimdRegDst, 3 /*iDWord*/);
     7128    IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);
     7129
     7130    /* Free but don't flush the destination register. */
     7131    iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst);
     7132
     7133    return off;
     7134}
     7135
    71077136#endif /* IEMNATIVE_WITH_SIMD_REG_ALLOCATOR */
    71087137
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