VirtualBox

Changeset 103589 in vbox for trunk


Ignore:
Timestamp:
Feb 27, 2024 4:14:12 PM (7 months ago)
Author:
vboxsync
Message:

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

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h

    r103548 r103589  
    1035510355    IEM_MC_ARG_CONST(IEMMODE,           enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  0);
    1035610356    IEM_MC_ARG_CONST(uint8_t,           iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       1);
    10357     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_fldenv, enmEffOpSize, iEffSeg, GCPtrEffSrc);
     10357    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, RT_BIT_64(kIemNativeGstReg_FpuFcw),
     10358                        iemCImpl_fldenv, enmEffOpSize, iEffSeg, GCPtrEffSrc);
    1035810359    IEM_MC_END();
    1035910360}
     
    1037510376    IEM_MC_FETCH_MEM_U16(u16Fsw, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1037610377
    10377     IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_FPU, 0, iemCImpl_fldcw, u16Fsw);
     10378    IEM_MC_CALL_CIMPL_1(IEM_CIMPL_F_FPU, RT_BIT_64(kIemNativeGstReg_FpuFcw),
     10379                        iemCImpl_fldcw, u16Fsw);
    1037810380    IEM_MC_END();
    1037910381}
     
    1172311725    IEMOP_MNEMONIC(fninit, "fninit");
    1172411726    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    11725     IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_FPU, 0, iemCImpl_finit, false /*fCheckXcpts*/);
     11727    IEM_MC_DEFER_TO_CIMPL_1_RET(IEM_CIMPL_F_FPU, RT_BIT_64(kIemNativeGstReg_FpuFcw),
     11728                                iemCImpl_finit, false /*fCheckXcpts*/);
    1172611729}
    1172711730
     
    1226412267    IEM_MC_ARG_CONST(IEMMODE,           enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  0);
    1226512268    IEM_MC_ARG_CONST(uint8_t,           iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       1);
    12266     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_frstor, enmEffOpSize, iEffSeg, GCPtrEffSrc);
     12269    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, RT_BIT_64(kIemNativeGstReg_FpuFcw),
     12270                        iemCImpl_frstor, enmEffOpSize, iEffSeg, GCPtrEffSrc);
    1226712271    IEM_MC_END();
    1226812272}
     
    1228312287    IEM_MC_ARG_CONST(IEMMODE,           enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  0);
    1228412288    IEM_MC_ARG_CONST(uint8_t,           iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       1);
    12285     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_fnsave, enmEffOpSize, iEffSeg, GCPtrEffDst);
     12289    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, RT_BIT_64(kIemNativeGstReg_FpuFcw),
     12290                        iemCImpl_fnsave, enmEffOpSize, iEffSeg, GCPtrEffDst);
    1228612291    IEM_MC_END();
    1228712292}
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r103588 r103589  
    29622962    'IEM_MC_FETCH_EFLAGS':                                       (McBlock.parseMcGeneric,           False, False, True,  ),
    29632963    'IEM_MC_FETCH_EFLAGS_U8':                                    (McBlock.parseMcGeneric,           False, False, False, ),
    2964     'IEM_MC_FETCH_FCW':                                          (McBlock.parseMcGeneric,           False, False, False, ),
     2964    'IEM_MC_FETCH_FCW':                                          (McBlock.parseMcGeneric,           False, False, True, ),
    29652965    'IEM_MC_FETCH_FSW':                                          (McBlock.parseMcGeneric,           False, False, False, ),
    29662966    'IEM_MC_FETCH_GREG_U16':                                     (McBlock.parseMcGeneric,           False, False, True,  ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r103588 r103589  
    1002910029    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
    1003010030    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/pVCpu->iem.s.enmEffOpSize,   2);
    10031     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_fxrstor, iEffSeg, GCPtrEff, enmEffOpSize);
     10031    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, RT_BIT_64(kIemNativeGstReg_FpuFcw),
     10032                        iemCImpl_fxrstor, iEffSeg, GCPtrEff, enmEffOpSize);
    1003210033    IEM_MC_END();
    1003310034}
     
    1015210153    IEM_MC_ARG_CONST(uint8_t,   iEffSeg,      /*=*/ pVCpu->iem.s.iEffSeg,       0);
    1015310154    IEM_MC_ARG_CONST(IEMMODE,   enmEffOpSize, /*=*/ pVCpu->iem.s.enmEffOpSize,  2);
    10154     IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, 0, iemCImpl_xrstor, iEffSeg, GCPtrEff, enmEffOpSize);
     10155    IEM_MC_CALL_CIMPL_3(IEM_CIMPL_F_FPU, RT_BIT_64(kIemNativeGstReg_FpuFcw),
     10156                        iemCImpl_xrstor, iEffSeg, GCPtrEff, enmEffOpSize);
    1015510157    IEM_MC_END();
    1015610158}
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r103588 r103589  
    34993499    /* [kIemNativeGstReg_Pc] = */                       { CPUMCTX_OFF_AND_SIZE(rip),                "rip", },
    35003500    /* [kIemNativeGstReg_Cr0] = */                      { CPUMCTX_OFF_AND_SIZE(cr0),                "cr0", },
    3501     /* [kIemNativeGstReg_LivenessPadding18] = */        { UINT32_MAX / 4, 0,                        "pad18", },
     3501    /* [kIemNativeGstReg_FpuFcw] = */                   { CPUMCTX_OFF_AND_SIZE(XState.x87.FCW),     "fcw", },
    35023502    /* [kIemNativeGstReg_LivenessPadding19] = */        { UINT32_MAX / 4, 0,                        "pad19", },
    35033503    /* [kIemNativeGstReg_SegBaseFirst + 0] = */         { CPUMCTX_OFF_AND_SIZE(aSRegs[0].u64Base),  "es_base", },
     
    1325913259    return off;
    1326013260}
     13261
     13262
     13263
     13264/*********************************************************************************************************************************
     13265*   Emitters for FPU related operations.                                                                                         *
     13266*********************************************************************************************************************************/
     13267
     13268#define IEM_MC_FETCH_FCW(a_u16Fcw) \
     13269    off = iemNativeEmitFetchFpuFcw(pReNative, off, a_u16Fcw)
     13270
     13271/** Emits code for IEM_MC_FETCH_FCW. */
     13272DECL_INLINE_THROW(uint32_t)
     13273iemNativeEmitFetchFpuFcw(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar)
     13274{
     13275    IEMNATIVE_ASSERT_VAR_IDX(pReNative, idxDstVar);
     13276    Assert(pReNative->Core.aVars[idxDstVar].cbVar == sizeof(uint16_t));
     13277
     13278    /* Allocate a temporary FCW register. */
     13279    uint8_t const idxFcwReg = iemNativeRegAllocTmpForGuestReg(pReNative, &off, kIemNativeGstReg_FpuFcw, kIemNativeGstRegUse_ReadOnly);
     13280
     13281    off = iemNativeEmitLoadGprFromGpr16(pReNative, off, idxDstVar, idxFcwReg);
     13282
     13283    /* Free but don't flush the FCW register. */
     13284    iemNativeRegFreeTmp(pReNative, idxFcwReg);
     13285
     13286    return off;
     13287}
     13288
    1326113289
    1326213290
  • trunk/src/VBox/VMM/include/IEMN8veRecompiler.h

    r103588 r103589  
    688688    kIemNativeGstReg_Pc,
    689689    kIemNativeGstReg_Cr0,
    690     kIemNativeGstReg_LivenessPadding18,
     690    kIemNativeGstReg_FpuFcw,
    691691    kIemNativeGstReg_LivenessPadding19,
    692692    kIemNativeGstReg_SegBaseFirst,
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