VirtualBox

Changeset 103917 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Mar 19, 2024 1:27:07 PM (11 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162291
Message:

VMM/IEM: Implement native emitter 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

    r103916 r103917  
    33463346    'IEM_MC_STORE_XREG_R32':                                     (McBlock.parseMcGeneric,           True,  True,  False, ),
    33473347    'IEM_MC_STORE_XREG_R64':                                     (McBlock.parseMcGeneric,           True,  True,  False, ),
    3348     'IEM_MC_STORE_XREG_U128':                                    (McBlock.parseMcGeneric,           True,  True,  False, ),
     3348    'IEM_MC_STORE_XREG_U128':                                    (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    33493349    'IEM_MC_STORE_XREG_U16':                                     (McBlock.parseMcGeneric,           True,  True,  False, ),
    33503350    'IEM_MC_STORE_XREG_U32':                                     (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h

    r103916 r103917  
    70967096
    70977097
     7098#define IEM_MC_STORE_XREG_U128(a_iXReg, a_u128Value) \
     7099    off = iemNativeEmitSimdStoreXregU128(pReNative, off, a_iXReg, a_u128Value)
     7100
     7101/** Emits code for IEM_MC_STORE_XREG_U128. */
     7102DECL_INLINE_THROW(uint32_t)
     7103iemNativeEmitSimdStoreXregU128(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t iXReg, uint8_t idxDstVar)
     7104{
     7105    IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar);
     7106    IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxDstVar, sizeof(RTUINT128U));
     7107
     7108    uint8_t const idxSimdRegDst = iemNativeSimdRegAllocTmpForGuestSimdReg(pReNative, &off, IEMNATIVEGSTSIMDREG_SIMD(iXReg),
     7109                                                                          kIemNativeGstSimdRegLdStSz_Low128, kIemNativeGstRegUse_ForFullWrite);
     7110
     7111    uint8_t const idxVarReg = iemNativeVarRegisterAcquire(pReNative, idxDstVar, &off);
     7112
     7113    off = iemNativeEmitSimdLoadVecRegFromVecRegU128(pReNative, off, idxSimdRegDst, idxVarReg);
     7114    IEMNATIVE_SIMD_REG_STATE_SET_DIRTY_LO_U128(pReNative, iXReg);
     7115
     7116    /* Free but don't flush the source register. */
     7117    iemNativeSimdRegFreeTmp(pReNative, idxSimdRegDst);
     7118    iemNativeVarRegisterRelease(pReNative, idxDstVar);
     7119
     7120    return off;
     7121}
     7122
     7123
    70987124#define IEM_MC_STORE_XREG_U64(a_iXReg, a_iQWord, a_u64Value) \
    70997125    off = iemNativeEmitSimdStoreXregU64(pReNative, off, a_iXReg, a_u64Value, a_iQWord)
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