VirtualBox

Changeset 103667 in vbox


Ignore:
Timestamp:
Mar 4, 2024 1:46:36 PM (13 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162027
Message:

VMM/IEM: Native translation of IEM_MC_REF_MXCSR() body, bugref:10371

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

Legend:

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

    r103665 r103667  
    32263226    'IEM_MC_REF_MREG_U64':                                       (McBlock.parseMcGeneric,           False, False, False, ),
    32273227    'IEM_MC_REF_MREG_U64_CONST':                                 (McBlock.parseMcGeneric,           False, False, False, ),
    3228     'IEM_MC_REF_MXCSR':                                          (McBlock.parseMcGeneric,           False, False, False, ),
     3228    'IEM_MC_REF_MXCSR':                                          (McBlock.parseMcGeneric,           False, False, True, ),
    32293229    'IEM_MC_REF_XREG_R32_CONST':                                 (McBlock.parseMcGeneric,           False, False, False, ),
    32303230    'IEM_MC_REF_XREG_R64_CONST':                                 (McBlock.parseMcGeneric,           False, False, False, ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veLiveness.cpp

    r103660 r103667  
    178178
    179179
    180 #define IEM_LIVENESS_CR0_INPUT()                    IEM_LIVENESS_BITMAP_MEMBER_INPUT(  fCr0,  0)
    181 #define IEM_LIVENESS_CR4_INPUT()                    IEM_LIVENESS_BITMAP_MEMBER_INPUT(  fCr4,  0)
    182 #define IEM_LIVENESS_XCR0_INPUT()                   IEM_LIVENESS_BITMAP_MEMBER_INPUT(  fXcr0, 0)
     180#define IEM_LIVENESS_CR0_INPUT()                    IEM_LIVENESS_BITMAP_MEMBER_INPUT(  fCr0,   0)
     181#define IEM_LIVENESS_CR4_INPUT()                    IEM_LIVENESS_BITMAP_MEMBER_INPUT(  fCr4,   0)
     182#define IEM_LIVENESS_XCR0_INPUT()                   IEM_LIVENESS_BITMAP_MEMBER_INPUT(  fXcr0,  0)
    183183
    184184
     
    191191#define IEM_LIVENESS_FSW_CLOBBER()                  IEM_LIVENESS_BITMAP_MEMBER_CLOBBER(fFsw, 0)
    192192#define IEM_LIVENESS_FSW_MODIFY()                   IEM_LIVENESS_BITMAP_MEMBER_MODIFY( fFsw, 0)
     193
     194
     195#define IEM_LIVENESS_MXCSR_INPUT()                  IEM_LIVENESS_BITMAP_MEMBER_INPUT(  fMxCsr, 0)
     196#define IEM_LIVENESS_MXCSR_CLOBBER()                IEM_LIVENESS_BITMAP_MEMBER_CLOBBER(fMxCsr, 0)
     197#define IEM_LIVENESS_MXCSR_MODIFY()                 IEM_LIVENESS_BITMAP_MEMBER_MODIFY( fMxCsr, 0)
    193198
    194199
     
    576581    } while (0)
    577582#define IEM_MC_ASSERT_EFLAGS(a_fEflInput, a_fEflOutput)             NOP()
    578 #define IEM_MC_REF_MXCSR(a_pfMxcsr)                                 NOP()
     583#define IEM_MC_REF_MXCSR(a_pfMxcsr)                                 IEM_LIVENESS_MXCSR_MODIFY()
    579584
    580585
     
    10631068#define IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE()                                                 NOP()
    10641069
    1065 #define IEM_MC_STORE_SSE_RESULT(a_SseData, a_iXmmReg)                                           NOP()
    1066 #define IEM_MC_SSE_UPDATE_MXCSR(a_fMxcsr)                                                       NOP()
     1070#define IEM_MC_STORE_SSE_RESULT(a_SseData, a_iXmmReg)                                           IEM_LIVENESS_MXCSR_MODIFY() //; IEM_LIVENESS_XREG_CLOBBER(a_iXmmReg)
     1071#define IEM_MC_SSE_UPDATE_MXCSR(a_fMxcsr)                                                       IEM_LIVENESS_MXCSR_MODIFY()
    10671072
    10681073#define IEM_MC_PREPARE_SSE_USAGE()                                                              NOP()
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r103666 r103667  
    35833583    /* [kIemNativeGstReg_Cr4] = */                      { CPUMCTX_OFF_AND_SIZE(cr4),                "cr4", },
    35843584    /* [kIemNativeGstReg_Xcr0] = */                     { CPUMCTX_OFF_AND_SIZE(aXcr[0]),            "xcr0", },
     3585    /* [kIemNativeGstReg_MxCsr] = */                    { CPUMCTX_OFF_AND_SIZE(XState.x87.MXCSR),   "mxcsr", },
    35853586    /* [kIemNativeGstReg_EFlags] = */                   { CPUMCTX_OFF_AND_SIZE(eflags),             "eflags", },
    35863587#undef CPUMCTX_OFF_AND_SIZE
     
    1090010901    RT_NOREF(fConst);
    1090110902#endif
     10903
     10904    return off;
     10905}
     10906
     10907
     10908#define IEM_MC_REF_MXCSR(a_pfMxcsr) \
     10909    off = iemNativeEmitRefMxcsr(pReNative, off, a_pfMxcsr)
     10910
     10911/** Handles IEM_MC_REF_MXCSR. */
     10912DECL_INLINE_THROW(uint32_t)
     10913iemNativeEmitRefMxcsr(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxVarRef)
     10914{
     10915    iemNativeVarSetKindToGstRegRef(pReNative, idxVarRef, kIemNativeGstRegRef_MxCsr, 0);
     10916    IEMNATIVE_ASSERT_VAR_SIZE(pReNative, idxVarRef, sizeof(void *));
     10917
     10918    /* If we've delayed writing back the register value, flush it now. */
     10919    off = iemNativeRegFlushPendingSpecificWrite(pReNative, off, kIemNativeGstRegRef_MxCsr, 0);
     10920
     10921    /* If there is a shadow copy of guest MXCSR, flush it now. */
     10922    iemNativeRegFlushGuestShadows(pReNative, RT_BIT_64(kIemNativeGstReg_MxCsr));
    1090210923
    1090310924    return off;
  • trunk/src/VBox/VMM/include/IEMN8veRecompiler.h

    r103665 r103667  
    418418        uint64_t    fCr4        :  1;   /**< 0x2c / 44: */
    419419        uint64_t    fXcr0       :  1;   /**< 0x2d / 45: */
    420         uint64_t    fEflOther   :  1;   /**< 0x2e / 46: Other EFLAGS bits   (~X86_EFL_STATUS_BITS & X86_EFL_LIVE_MASK). First! */
    421         uint64_t    fEflCf      :  1;   /**< 0x2f / 47: Carry flag          (X86_EFL_CF / 0). */
    422         uint64_t    fEflPf      :  1;   /**< 0x30 / 48: Parity flag         (X86_EFL_PF / 2). */
    423         uint64_t    fEflAf      :  1;   /**< 0x31 / 49: Auxilary carry flag (X86_EFL_AF / 4). */
    424         uint64_t    fEflZf      :  1;   /**< 0x32 / 50: Zero flag           (X86_EFL_ZF / 6). */
    425         uint64_t    fEflSf      :  1;   /**< 0x33 / 51: Signed flag         (X86_EFL_SF / 7). */
    426         uint64_t    fEflOf      :  1;   /**< 0x34 / 52: Overflow flag       (X86_EFL_OF / 12). */
    427         uint64_t    uUnused     : 11;     /* 0x35 / 53 -> 0x40/64 */
     420        uint64_t    fMxCsr      :  1;   /**< 0x2e / 46: */
     421        uint64_t    fEflOther   :  1;   /**< 0x2f / 47: Other EFLAGS bits   (~X86_EFL_STATUS_BITS & X86_EFL_LIVE_MASK). First! */
     422        uint64_t    fEflCf      :  1;   /**< 0x30 / 48: Carry flag          (X86_EFL_CF / 0). */
     423        uint64_t    fEflPf      :  1;   /**< 0x31 / 49: Parity flag         (X86_EFL_PF / 2). */
     424        uint64_t    fEflAf      :  1;   /**< 0x32 / 50: Auxilary carry flag (X86_EFL_AF / 4). */
     425        uint64_t    fEflZf      :  1;   /**< 0x33 / 51: Zero flag           (X86_EFL_ZF / 6). */
     426        uint64_t    fEflSf      :  1;   /**< 0x34 / 52: Signed flag         (X86_EFL_SF / 7). */
     427        uint64_t    fEflOf      :  1;   /**< 0x35 / 53: Overflow flag       (X86_EFL_OF / 12). */
     428        uint64_t    uUnused     : 10;     /* 0x36 / 54 -> 0x40/64 */
    428429    };
    429430} IEMLIVENESSBIT;
     
    487488/** @name 64-bit value masks for IEMLIVENESSENTRY.
    488489 * @{ */                                      /*         0xzzzzyyyyxxxxwwww */
    489 #define IEMLIVENESSBIT_MASK                     UINT64_C(0x001ffffffffeffff)
     490#define IEMLIVENESSBIT_MASK                     UINT64_C(0x003ffffffffeffff)
    490491
    491492#ifndef IEMLIVENESS_EXTENDED_LAYOUT
     
    497498#endif
    498499
    499 #define IEMLIVENESSBIT_ALL_EFL_MASK             UINT64_C(0x001fc00000000000)
     500#define IEMLIVENESSBIT_ALL_EFL_MASK             UINT64_C(0x003f800000000000)
    500501
    501502#ifndef IEMLIVENESS_EXTENDED_LAYOUT
     
    717718    kIemNativeGstReg_Cr4,
    718719    kIemNativeGstReg_Xcr0,
     720    kIemNativeGstReg_MxCsr,
    719721    kIemNativeGstReg_EFlags,            /**< 32-bit, includes internal flags - last! */
    720722    kIemNativeGstReg_End
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