VirtualBox

Changeset 103823 in vbox


Ignore:
Timestamp:
Mar 13, 2024 11:51:42 AM (13 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162192
Message:

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

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

Legend:

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

    r103822 r103823  
    33443344    'IEM_MC_STORE_YREG_U256_ZX_VLMAX':                           (McBlock.parseMcGeneric,           True,  True,  False, ),
    33453345    'IEM_MC_STORE_YREG_U32_ZX_VLMAX':                            (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    3346     'IEM_MC_STORE_YREG_U64_ZX_VLMAX':                            (McBlock.parseMcGeneric,           True,  True,  False, ),
     3346    'IEM_MC_STORE_YREG_U64_ZX_VLMAX':                            (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    33473347    'IEM_MC_SUB_GREG_U16':                                       (McBlock.parseMcGeneric,           True,  True,  True,  ),
    33483348    'IEM_MC_SUB_GREG_U32':                                       (McBlock.parseMcGeneric,           True,  True,  True,  ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h

    r103822 r103823  
    69696969}
    69706970
     6971
     6972#define IEM_MC_STORE_YREG_U64_ZX_VLMAX(a_iYRegDst, a_u64Src) \
     6973    off = iemNativeEmitSimdStoreYregU64ZxVlmax(pReNative, off, a_iYRegDst, a_u64Src)
     6974
     6975/** Emits code for IEM_MC_STORE_YREG_U32_ZX_VLMAX. */
     6976DECL_INLINE_THROW(uint32_t)
     6977iemNativeEmitSimdStoreYregU64ZxVlmax(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t iYReg, uint8_t idxSrcVar)
     6978{
     6979    IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxSrcVar);
     6980    IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxSrcVar, sizeof(uint64_t));
     6981
     6982    uint8_t const idxSimdRegDst = iemNativeSimdRegAllocTmpForGuestSimdReg(pReNative, &off, IEMNATIVEGSTSIMDREG_SIMD(iYReg),
     6983                                                                          kIemNativeGstSimdRegLdStSz_256, kIemNativeGstRegUse_ForFullWrite);
     6984
     6985    uint8_t const idxVarReg = iemNativeVarRegisterAcquire(pReNative, idxSrcVar, &off);
     6986
     6987    off = iemNativeEmitSimdZeroVecRegU256(pReNative, off, idxSimdRegDst);
     6988    off = iemNativeEmitSimdStoreGprToVecRegU64(pReNative, off, idxSimdRegDst, idxVarReg, 0 /*iQWord*/);
     6989    IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);
     6990    IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);
     6991
     6992    /* Free but don't flush the source register. */
     6993    iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst);
     6994    iemNativeVarRegisterRelease(pReNative, idxSrcVar);
     6995
     6996    return off;
     6997}
     6998
    69716999#endif /* IEMNATIVE_WITH_SIMD_REG_ALLOCATOR */
    69727000
Note: See TracChangeset for help on using the changeset viewer.

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