VirtualBox

Changeset 103919 in vbox


Ignore:
Timestamp:
Mar 19, 2024 1:52:22 PM (13 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162293
Message:

VMM/IEM: Implement native emitter for IEM_MC_STORE_YREG_U128_ZX_VLMAX() and fixes for IEM_MC_STORE_XREG_U128(), bugref:10614

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

Legend:

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

    r103917 r103919  
    33583358    'IEM_MC_STORE_XREG_XMM_U64':                                 (McBlock.parseMcGeneric,           True,  True,  False, ),
    33593359    'IEM_MC_STORE_YREG_U128':                                    (McBlock.parseMcGeneric,           True,  True,  False, ),
    3360     'IEM_MC_STORE_YREG_U128_ZX_VLMAX':                           (McBlock.parseMcGeneric,           True,  True,  False, ),
     3360    'IEM_MC_STORE_YREG_U128_ZX_VLMAX':                           (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    33613361    'IEM_MC_STORE_YREG_U256_ZX_VLMAX':                           (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    33623362    'IEM_MC_STORE_YREG_U32_ZX_VLMAX':                            (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h

    r103917 r103919  
    71097109                                                                          kIemNativeGstSimdRegLdStSz_Low128, kIemNativeGstRegUse_ForFullWrite);
    71107110
    7111     uint8_t const idxVarReg = iemNativeVarRegisterAcquire(pReNative, idxDstVar, &off);
     7111    uint8_t const idxVarReg = iemNativeVarSimdRegisterAcquire(pReNative, idxDstVar, &off);
    71127112
    71137113    off = iemNativeEmitSimdLoadVecRegFromVecRegU128(pReNative, off, idxSimdRegDst, idxVarReg);
     
    71167116    /* Free but don't flush the source register. */
    71177117    iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst);
    7118     iemNativeVarRegisterRelease(pReNative, idxDstVar);
     7118    iemNativeVarSimdRegisterRelease(pReNative, idxDstVar);
    71197119
    71207120    return off;
     
    73037303    /* Free but don't flush the register. */
    73047304    iemNativeSimdRegFreeTmp(pReNative, idxSimdReg);
     7305
     7306    return off;
     7307}
     7308
     7309
     7310#define IEM_MC_STORE_YREG_U128_ZX_VLMAX(a_iYRegDst, a_u128Src) \
     7311    off = iemNativeEmitSimdStoreYregU128ZxVlmax(pReNative, off, a_iYRegDst, a_u128Src)
     7312
     7313/** Emits code for IEM_MC_STORE_YREG_U128_ZX_VLMAX. */
     7314DECL_INLINE_THROW(uint32_t)
     7315iemNativeEmitSimdStoreYregU128ZxVlmax(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t iYReg, uint8_t idxSrcVar)
     7316{
     7317    IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxSrcVar);
     7318    IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxSrcVar, sizeof(RTUINT128U));
     7319
     7320    uint8_t const idxSimdRegDst = iemNativeSimdRegAllocTmpForGuestSimdReg(pReNative, &off, IEMNATIVEGSTSIMDREG_SIMD(iYReg),
     7321                                                                          kIemNativeGstSimdRegLdStSz_256, kIemNativeGstRegUse_ForFullWrite);
     7322
     7323    uint8_t const idxVarReg = iemNativeVarSimdRegisterAcquire(pReNative, idxSrcVar, &off);
     7324
     7325    off = iemNativeEmitSimdLoadVecRegFromVecRegU128(pReNative, off, idxSimdRegDst, idxVarReg);
     7326    off = iemNativeEmitSimdZeroVecRegHighU128(pReNative, off, idxSimdRegDst);
     7327    IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iYReg);
     7328    IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_HI_U128(pReNative, iYReg);
     7329
     7330    /* Free but don't flush the source register. */
     7331    iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst);
     7332    iemNativeVarSimdRegisterRelease(pReNative, idxSrcVar);
    73057333
    73067334    return off;
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