VirtualBox

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


Ignore:
Timestamp:
Mar 20, 2024 12:14:33 PM (11 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162328
Message:

VMM/IEM: Implement native emitters for IEM_MC_FETCH_MEM_U256_ALIGN_AVX()/IEM_MC_FETCH_MEM_FLAT_U256_ALIGN_AVX(), bugref:10614

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

Legend:

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

    r103949 r103952  
    30803080    'IEM_MC_FETCH_MEM_U16_ZX_U64':                               (McBlock.parseMcGeneric,           True,  True,  True,  ), # movzx
    30813081    'IEM_MC_FETCH_MEM_U256':                                     (McBlock.parseMcGeneric,           True,  True,  False, ),
    3082     'IEM_MC_FETCH_MEM_U256_ALIGN_AVX':                           (McBlock.parseMcGeneric,           True,  True,  False, ),
     3082    'IEM_MC_FETCH_MEM_U256_ALIGN_AVX':                           (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    30833083    'IEM_MC_FETCH_MEM_U256_NO_AC':                               (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    30843084    'IEM_MC_FETCH_MEM_U32':                                      (McBlock.parseMcGeneric,           True,  True,  True,  ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8vePython.py

    r103949 r103952  
    148148    'IEM_MC_FETCH_MEM_FLAT_U16_ZX_U32':                                  (None, True,  True,  True,  ),
    149149    'IEM_MC_FETCH_MEM_FLAT_U16_ZX_U64':                                  (None, True,  True,  True,  ),
    150     'IEM_MC_FETCH_MEM_FLAT_U256_ALIGN_AVX':                              (None, True,  True,  False, ),
     150    'IEM_MC_FETCH_MEM_FLAT_U256_ALIGN_AVX':                              (None, True,  True,  g_fNativeSimd),
    151151    'IEM_MC_FETCH_MEM_FLAT_U256_NO_AC':                                  (None, True,  True,  g_fNativeSimd),
    152152    'IEM_MC_FETCH_MEM_FLAT_U256':                                        (None, True,  True,  False, ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h

    r103949 r103952  
    47184718            case sizeof(RTUINT256U):
    47194719                Assert(   (   enmOp == kIemNativeEmitMemOp_Fetch
    4720                            && (pfnFunction == (uintptr_t)iemNativeHlpMemFlatFetchDataU256NoAc))
     4720                           && (   pfnFunction == (uintptr_t)iemNativeHlpMemFlatFetchDataU256NoAc
     4721                               || pfnFunction == (uintptr_t)iemNativeHlpMemFlatFetchDataU256AlignedAvx))
    47214722                       || (   enmOp == kIemNativeEmitMemOp_Store
    47224723                           && (pfnFunction == (uintptr_t)iemNativeHlpMemFlatStoreDataU256NoAc)));
     
    47784779            case sizeof(RTUINT256U):
    47794780                Assert(   (   enmOp == kIemNativeEmitMemOp_Fetch
    4780                            && (pfnFunction == (uintptr_t)iemNativeHlpMemFetchDataU256NoAc))
     4781                           && (   pfnFunction == (uintptr_t)iemNativeHlpMemFetchDataU256NoAc
     4782                               || pfnFunction == (uintptr_t)iemNativeHlpMemFetchDataU256AlignedAvx))
    47814783                       || (   enmOp == kIemNativeEmitMemOp_Store
    47824784                           && (pfnFunction == (uintptr_t)iemNativeHlpMemStoreDataU256NoAc)));
     
    54365438                                               (uintptr_t)iemNativeHlpMemFetchDataU256NoAc, pCallEntry->idxInstr)
    54375439
     5440#define IEM_MC_FETCH_MEM_U256_ALIGN_AVX(a_u256Dst, a_iSeg, a_GCPtrMem) \
     5441    off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u256Dst, a_iSeg, a_GCPtrMem, \
     5442                                               sizeof(RTUINT256U), sizeof(RTUINT256U) - 1, kIemNativeEmitMemOp_Fetch, \
     5443                                               (uintptr_t)iemNativeHlpMemFetchDataU256AlignedAvx, pCallEntry->idxInstr)
     5444
     5445
    54385446/* 256-bit flat: */
    54395447#define IEM_MC_FETCH_MEM_FLAT_U256_NO_AC(a_u256Dst, a_GCPtrMem) \
     
    54415449                                               sizeof(RTUINT256U), sizeof(RTUINT256U) - 1, kIemNativeEmitMemOp_Fetch, \
    54425450                                               (uintptr_t)iemNativeHlpMemFlatFetchDataU256NoAc, pCallEntry->idxInstr)
     5451
     5452#define IEM_MC_FETCH_MEM_FLAT_U256_ALIGN_AVX(a_u256Dst, a_GCPtrMem) \
     5453    off = iemNativeEmitMemFetchStoreDataCommon(pReNative, off, a_u256Dst, UINT8_MAX, a_GCPtrMem, \
     5454                                               sizeof(RTUINT256U), sizeof(RTUINT256U) - 1, kIemNativeEmitMemOp_Fetch, \
     5455                                               (uintptr_t)iemNativeHlpMemFlatFetchDataU256AlignedAvx, pCallEntry->idxInstr)
    54435456#endif
    54445457
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r103949 r103952  
    19221922#endif
    19231923}
     1924
     1925
     1926/**
     1927 * Used by TB code to load 256-bit data w/ segmentation.
     1928 */
     1929IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFetchDataU256AlignedAvx,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg, PRTUINT256U pu256Dst))
     1930{
     1931#ifdef IEMNATIVE_WITH_TLB_LOOKUP_FETCH
     1932    iemMemFetchDataU256AlignedAvxSafeJmp(pVCpu, pu256Dst, iSegReg, GCPtrMem);
     1933#else
     1934    iemMemFetchDataU256AlignedAvxJmp(pVCpu, pu256Dst, iSegReg, GCPtrMem);
     1935#endif
     1936}
    19241937#endif
    19251938
     
    23102323#else
    23112324    return iemMemFlatFetchDataU256NoAcJmp(pVCpu, pu256Dst, UINT8_MAX, GCPtrMem);
     2325#endif
     2326}
     2327
     2328
     2329/**
     2330 * Used by TB code to load unsigned 256-bit data w/ flat address.
     2331 */
     2332IEM_DECL_NATIVE_HLP_DEF(void, iemNativeHlpMemFlatFetchDataU256AlignedAvx,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, PRTUINT256U pu256Dst))
     2333{
     2334#ifdef IEMNATIVE_WITH_TLB_LOOKUP_FETCH
     2335    return iemMemFetchDataU256AlignedAvxSafeJmp(pVCpu, pu256Dst, UINT8_MAX, GCPtrMem);
     2336#else
     2337    return iemMemFlatFetchDataU256AlignedAvxJmp(pVCpu, pu256Dst, UINT8_MAX, GCPtrMem);
    23122338#endif
    23132339}
  • trunk/src/VBox/VMM/include/IEMN8veRecompiler.h

    r103949 r103952  
    16501650IEM_DECL_NATIVE_HLP_PROTO(void,     iemNativeHlpMemFetchDataU128NoAc,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg, PRTUINT128U pu128Dst));
    16511651IEM_DECL_NATIVE_HLP_PROTO(void,     iemNativeHlpMemFetchDataU256NoAc,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg, PRTUINT256U pu256Dst));
     1652IEM_DECL_NATIVE_HLP_PROTO(void,     iemNativeHlpMemFetchDataU256AlignedAvx,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg, PRTUINT256U pu256Dst));
    16521653#endif
    16531654IEM_DECL_NATIVE_HLP_PROTO(void,     iemNativeHlpMemStoreDataU8,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t iSegReg, uint8_t u8Value));
     
    16831684IEM_DECL_NATIVE_HLP_PROTO(void,     iemNativeHlpMemFlatFetchDataU128NoAc,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, PRTUINT128U pu128Dst));
    16841685IEM_DECL_NATIVE_HLP_PROTO(void,     iemNativeHlpMemFlatFetchDataU256NoAc,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, PRTUINT256U pu256Dst));
     1686IEM_DECL_NATIVE_HLP_PROTO(void,     iemNativeHlpMemFlatFetchDataU256AlignedAvx,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, PRTUINT256U pu256Dst));
    16851687#endif
    16861688IEM_DECL_NATIVE_HLP_PROTO(void,     iemNativeHlpMemFlatStoreDataU8,(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint8_t u8Value));
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