VirtualBox

Changeset 100567 in vbox for trunk/src/VBox/VMM/include


Ignore:
Timestamp:
Jul 13, 2023 7:19:33 PM (19 months ago)
Author:
vboxsync
Message:

VMM/IEM: Implement vbroadcast{ss,sd,f128} instruction emulation, bugref:9898

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/include/IEMMc.h

    r100326 r100567  
    516516         (a_u256Dst).au64[3] = pVCpu->cpum.GstCtx.XState.u.YmmHi.aYmmHi[iYRegSrcTmp].au64[1]; \
    517517    } while (0)
     518#define IEM_MC_STORE_YREG_U64(a_iYRegDst, a_iQword, a_u64Value) \
     519    do { pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iYRegDst)].au64[(a_iQword)] = (a_u64Value); } while (0)
     520#define IEM_MC_STORE_YREG_U32(a_iYRegDst, a_iDword, a_u32Value) \
     521    do { pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iYRegDst)].au32[(a_iDword)] = (a_u32Value); } while (0)
     522#define IEM_MC_STORE_YREGHI_U64(a_iYRegDst, a_iQword, a_u64Value) \
     523    do { pVCpu->cpum.GstCtx.XState.u.YmmHi.aYmmHi[(a_iYRegDst)].au64[(a_iQword)] = (a_u64Value); } while (0)
     524#define IEM_MC_STORE_YREGHI_U32(a_iYRegDst, a_iDword, a_u32Value) \
     525    do { pVCpu->cpum.GstCtx.XState.u.YmmHi.aYmmHi[(a_iYRegDst)].au32[(a_iDword)] = (a_u32Value); } while (0)
    518526
    519527#define IEM_MC_INT_CLEAR_ZMM_256_UP(a_iXRegDst) do { /* For AVX512 and AVX1024 support. */ } while (0)
     
    549557         pVCpu->cpum.GstCtx.XState.u.YmmHi.aYmmHi[iYRegDstTmp].au64[0] = (a_u256Src).au64[2]; \
    550558         pVCpu->cpum.GstCtx.XState.u.YmmHi.aYmmHi[iYRegDstTmp].au64[1] = (a_u256Src).au64[3]; \
     559         IEM_MC_INT_CLEAR_ZMM_256_UP(iYRegDstTmp); \
     560    } while (0)
     561
     562#define IEM_MC_STORE_YREG_BROADCAST_U128_ZX_VLMAX(a_iYRegDst, a_u128Src) \
     563    do { uintptr_t const iYRegDstTmp    = (a_iYRegDst); \
     564         pVCpu->cpum.GstCtx.XState.x87.aXMM[iYRegDstTmp].au64[0]       = (a_u128Src).au64[0]; \
     565         pVCpu->cpum.GstCtx.XState.x87.aXMM[iYRegDstTmp].au64[1]       = (a_u128Src).au64[1]; \
     566         pVCpu->cpum.GstCtx.XState.u.YmmHi.aYmmHi[iYRegDstTmp].au64[0] = (a_u128Src).au64[0]; \
     567         pVCpu->cpum.GstCtx.XState.u.YmmHi.aYmmHi[iYRegDstTmp].au64[1] = (a_u128Src).au64[1]; \
    551568         IEM_MC_INT_CLEAR_ZMM_256_UP(iYRegDstTmp); \
    552569    } while (0)
  • trunk/src/VBox/VMM/include/IEMOpHlp.h

    r100072 r100567  
    529529    } while (0)
    530530
     531/**
     532 * Done decoding VEX, no V, L=1.
     533 * Raises \#UD exception if rex, rep, opsize or lock prefixes are present, if
     534 * we're in real or v8086 mode, if VEX.V!=0xf, if VEX.L!=1, or if the a_fFeature
     535 * is not present in the guest CPU.
     536 */
     537#define IEMOP_HLP_DONE_VEX_DECODING_L1_AND_NO_VVVV_EX(a_fFeature) \
     538    do \
     539    { \
     540        if (RT_LIKELY(   !(  pVCpu->iem.s.fPrefixes \
     541                           & (IEM_OP_PRF_LOCK | IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ | IEM_OP_PRF_REX)) \
     542                      && pVCpu->iem.s.uVexLength == 1 \
     543                      && pVCpu->iem.s.uVex3rdReg == 0 \
     544                      && !IEM_IS_REAL_OR_V86_MODE(pVCpu) \
     545                      && IEM_GET_GUEST_CPU_FEATURES(pVCpu)->a_fFeature )) \
     546        { /* likely */ } \
     547        else \
     548            IEMOP_RAISE_INVALID_OPCODE_RET(); \
     549    } while (0)
     550
    531551#define IEMOP_HLP_DECODED_NL_1(a_uDisOpNo, a_fIemOpFlags, a_uDisParam0, a_fDisOpType) \
    532552    do \
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