VirtualBox

Changeset 97543 in vbox


Ignore:
Timestamp:
Nov 15, 2022 12:59:28 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154573
Message:

IEM: Modified microcode XMM accessors to fetch specified qword/dword etc.; added PEXTRD instruction.

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

Legend:

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

    r97534 r97543  
    809809        IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();  \
    810810        IEM_MC_PREPARE_SSE_USAGE();  \
    811         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); \
     811        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword */); \
    812812        IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); \
    813813        IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fSse41, \
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f3a.cpp.h

    r97534 r97543  
    333333/** Opcode 0x66 0x0f 0x15. */
    334334FNIEMOP_STUB(iemOp_pextrw_RdMw_Vdq_Ib);
    335 /** Opcode 0x66 0x0f 0x16. */
    336 FNIEMOP_STUB(iemOp_pextrd_q_RdMw_Vdq_Ib);
     335
     336
     337FNIEMOP_DEF(iemOp_pextrd_q_RdMw_Vdq_Ib)
     338{
     339    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     340    if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)
     341    {
     342        /**
     343         * @opcode      0x16
     344         * @opcodesub   rex.w=1
     345         * @oppfx       0x66
     346         * @opcpuid     sse
     347         */
     348        IEMOP_MNEMONIC3(RMI, PEXTRQ, pextrq, Ev, Vq, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OZ_PFX);
     349        if (IEM_IS_MODRM_REG_MODE(bRm))
     350        {
     351            /*
     352             * XMM, greg64.
     353             */
     354            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     355            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     356            IEM_MC_BEGIN(0, 1);
     357            IEM_MC_LOCAL(uint64_t,  uSrc);
     358            IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
     359            IEM_MC_PREPARE_SSE_USAGE();
     360            IEM_MC_AND_LOCAL_U8(bImm, 1);
     361            IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iQword*/);
     362            IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), uSrc);
     363            IEM_MC_ADVANCE_RIP_AND_FINISH();
     364            IEM_MC_END();
     365        }
     366        else
     367        {
     368            /*
     369             * XMM, [mem64].
     370             */
     371            IEM_MC_BEGIN(0, 2);
     372            IEM_MC_LOCAL(uint64_t,  uSrc);
     373            IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     374
     375            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
     376            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     377            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     378            IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
     379            IEM_MC_PREPARE_SSE_USAGE();
     380
     381            IEM_MC_AND_LOCAL_U8(bImm, 1);
     382            IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iQword*/);
     383            IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
     384            IEM_MC_ADVANCE_RIP_AND_FINISH();
     385            IEM_MC_END();
     386        }
     387    }
     388    else
     389    {
     390        /**
     391         * @opdone
     392         * @opcode      0x16
     393         * @opcodesub   rex.w=0
     394         * @oppfx       0x66
     395         * @opcpuid     sse
     396         */
     397        IEMOP_MNEMONIC3(RMI, PEXTRD, pextrd, Ey, Vd, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OZ_PFX);
     398        if (IEM_IS_MODRM_REG_MODE(bRm))
     399        {
     400            /*
     401             * XMM, greg32.
     402             */
     403            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     404            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     405            IEM_MC_BEGIN(0, 1);
     406            IEM_MC_LOCAL(uint32_t,  uSrc);
     407            IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
     408            IEM_MC_PREPARE_SSE_USAGE();
     409            IEM_MC_AND_LOCAL_U8(bImm, 3);
     410            IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iDword*/);
     411            IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), uSrc);
     412            IEM_MC_ADVANCE_RIP_AND_FINISH();
     413            IEM_MC_END();
     414        }
     415        else
     416        {
     417            /*
     418             * XMM, [mem32].
     419             */
     420            IEM_MC_BEGIN(0, 2);
     421            IEM_MC_LOCAL(uint32_t,  uSrc);
     422            IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     423
     424            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
     425            uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     426            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     427            IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT();
     428            IEM_MC_PREPARE_SSE_USAGE();
     429            IEM_MC_AND_LOCAL_U8(bImm, 3);
     430            IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iDword*/);
     431            IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
     432            IEM_MC_ADVANCE_RIP_AND_FINISH();
     433            IEM_MC_END();
     434        }
     435    }
     436}
     437
     438
    337439/** Opcode 0x66 0x0f 0x17. */
    338440FNIEMOP_STUB(iemOp_extractps_Ed_Vdq_Ib);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r97534 r97543  
    22222222        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    22232223        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    2224         IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     2224        IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iDword*/ );
    22252225        IEM_MC_STORE_XREG_U32(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDword*/, uSrc);
    22262226
     
    22752275        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    22762276        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    2277         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     2277        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    22782278        IEM_MC_STORE_XREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/, uSrc);
    22792279
     
    24282428        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    24292429        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    2430         IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     2430        IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDword*/);
    24312431        IEM_MC_STORE_XREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iDword*/, uSrc);
    24322432
     
    24482448        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    24492449
    2450         IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     2450        IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDword*/);
    24512451        IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    24522452
     
    24812481        IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    24822482        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    2483         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     2483        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/);
    24842484        IEM_MC_STORE_XREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/, uSrc);
    24852485
     
    25012501        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    25022502
    2503         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     2503        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/);
    25042504        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    25052505
     
    25332533        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    25342534        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    2535         IEM_MC_FETCH_XREG_HI_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     2535        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 1 /* a_iQword*/);
    25362536        IEM_MC_STORE_XREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/, uSrc);
    25372537
     
    27062706        IEM_MC_PREPARE_SSE_USAGE();
    27072707
    2708         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     2708        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    27092709        IEM_MC_STORE_XREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/, uSrc);
    27102710        IEM_MC_STORE_XREG_HI_U64(IEM_GET_MODRM_REG(pVCpu, bRm), uSrc);
     
    27632763        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    27642764
    2765         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     2765        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/);
    27662766        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    27672767
     
    28102810        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    28112811
    2812         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     2812        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/);
    28132813        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    28142814
     
    29522952        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    29532953        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    2954         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     2954        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    29552955        IEM_MC_STORE_XREG_HI_U64(IEM_GET_MODRM_REG(pVCpu, bRm), uSrc);
    29562956
     
    31363136        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    31373137
    3138         IEM_MC_FETCH_XREG_HI_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     3138        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 1 /* a_iQword*/);
    31393139        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    31403140
     
    31843184        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    31853185
    3186         IEM_MC_FETCH_XREG_HI_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     3186        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 1 /* a_iQword*/);
    31873187        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    31883188
     
    41104110
    41114111        IEM_MC_REF_MXCSR(pfMxcsr);
    4112         IEM_MC_FETCH_XREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm));
     4112        IEM_MC_FETCH_XREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    41134113
    41144114        IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttps2pi_u128, pfMxcsr, pu64Dst, u64Src);
     
    44984498
    44994499        IEM_MC_REF_MXCSR(pfMxcsr);
    4500         IEM_MC_FETCH_XREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm));
     4500        IEM_MC_FETCH_XREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    45014501
    45024502        IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtps2pi_u128, pfMxcsr, pu64Dst, u64Src);
     
    74277427            IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    74287428
    7429             IEM_MC_FETCH_XREG_U64(u64Tmp, IEM_GET_MODRM_REG(pVCpu, bRm));
     7429            IEM_MC_FETCH_XREG_U64(u64Tmp, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/);
    74307430            IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), u64Tmp);
    74317431
     
    74457445            IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    74467446
    7447             IEM_MC_FETCH_XREG_U64(u64Tmp, IEM_GET_MODRM_REG(pVCpu, bRm));
     7447            IEM_MC_FETCH_XREG_U64(u64Tmp, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/);
    74487448            IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u64Tmp);
    74497449
     
    74777477            IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    74787478
    7479             IEM_MC_FETCH_XREG_U32(u32Tmp, IEM_GET_MODRM_REG(pVCpu, bRm));
     7479            IEM_MC_FETCH_XREG_U32(u32Tmp, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDword*/);
    74807480            IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), u32Tmp);
    74817481
     
    74957495            IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    74967496
    7497             IEM_MC_FETCH_XREG_U32(u32Tmp, IEM_GET_MODRM_REG(pVCpu, bRm));
     7497            IEM_MC_FETCH_XREG_U32(u32Tmp, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDword*/);
    74987498            IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, u32Tmp);
    74997499
     
    75297529        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    75307530
    7531         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     7531        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    75327532        IEM_MC_STORE_XREG_U64_ZX_U128(IEM_GET_MODRM_REG(pVCpu, bRm), uSrc);
    75337533
     
    1263212632        IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();
    1263312633
    12634         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     12634        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/);
    1263512635        IEM_MC_STORE_XREG_U64_ZX_U128(IEM_GET_MODRM_RM(pVCpu, bRm), uSrc);
    1263612636
     
    1265212652        IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ();
    1265312653
    12654         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm));
     12654        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/);
    1265512655        IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc);
    1265612656
     
    1273912739        IEM_MC_FPU_TO_MMX_MODE();
    1274012740
    12741         IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     12741        IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    1274212742        IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG_8(bRm), uSrc);
    1274312743
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r97534 r97543  
    12251225            IEM_MC_PREPARE_AVX_USAGE();
    12261226
    1227             IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     1227            IEM_MC_FETCH_XREG_U64(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    12281228            IEM_MC_STORE_XREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), 0 /* a_iQword*/, uSrc);
    12291229            IEM_MC_STORE_XREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), 1 /* a_iQword*/, uSrc);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap2.cpp.h

    r97361 r97543  
    394394            IEM_MC_PREPARE_AVX_USAGE(); \
    395395            IEM_MC_REF_XREG_U128(puDst,  IEM_GET_MODRM_REG(pVCpu, bRm)); \
    396             IEM_MC_FETCH_XREG_U64(uSrc,  IEM_GET_MODRM_RM(pVCpu, bRm)); \
     396            IEM_MC_FETCH_XREG_U64(uSrc,  IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/); \
    397397            IEM_MC_CALL_VOID_AIMPL_2(IEM_SELECT_HOST_OR_FALLBACK(fAvx2, iemAImpl_ ## a_Instr ## _u128, \
    398398                                                                 iemAImpl_## a_Instr ## _u128_fallback), \
  • trunk/src/VBox/VMM/include/IEMMc.h

    r97534 r97543  
    482482         (a_XmmValue).au64[1] = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au64[1]; \
    483483    } while (0)
    484 #define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg) \
    485     do { (a_u64Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au64[0]; } while (0)
    486 #define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg) \
    487     do { (a_u32Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au32[0]; } while (0)
    488 #define IEM_MC_FETCH_XREG_HI_U64(a_u64Value, a_iXReg) \
    489     do { (a_u64Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au64[1]; } while (0)
     484#define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord) \
     485    do { (a_u64Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au64[(a_iQWord)]; } while (0)
     486#define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord) \
     487    do { (a_u32Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au32[(a_iDWord)]; } while (0)
     488#define IEM_MC_FETCH_XREG_U16(a_u16Value, a_iXReg, a_iWord) \
     489    do { (a_u16Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au16[(a_iWord)]; } while (0)
     490#define IEM_MC_FETCH_XREG_U8( a_u8Value,  a_iXReg, a_iByte) \
     491    do { (a_u8Value)  = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au16[(a_iByte)]; } while (0)
    490492#define IEM_MC_STORE_XREG_U128(a_iXReg, a_u128Value) \
    491493    do { pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au64[0] = (a_u128Value).au64[0]; \
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r97534 r97543  
    768768#define IEM_MC_FETCH_XREG_U128(a_u128Value, a_iXReg)        do { CHK_XREG_IDX(a_iXReg); (a_u128Value) = g_u128Zero; CHK_TYPE(RTUINT128U, a_u128Value); (void)fSseRead;  (void)fMcBegin; } while (0)
    769769#define IEM_MC_FETCH_XREG_XMM(a_XmmValue, a_iXReg)          do { CHK_XREG_IDX(a_iXReg); (a_XmmValue) = g_XmmZero; CHK_TYPE(X86XMMREG, a_XmmValue); (void)fSseRead;  (void)fMcBegin; } while (0)
    770 #define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg)          do { CHK_XREG_IDX(a_iXReg); (a_u64Value) = 0; CHK_TYPE(uint64_t, a_u64Value); (void)fSseRead; (void)fMcBegin; } while (0)
    771 #define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg)          do { CHK_XREG_IDX(a_iXReg); (a_u32Value) = 0; CHK_TYPE(uint32_t, a_u32Value); (void)fSseRead; (void)fMcBegin; } while (0)
     770#define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord)    do { CHK_XREG_IDX(a_iXReg); (a_u64Value) = 0; CHK_TYPE(uint64_t, a_u64Value); (void)fSseRead; (void)fMcBegin; } while (0)
     771#define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord)    do { CHK_XREG_IDX(a_iXReg); (a_u32Value) = 0; CHK_TYPE(uint32_t, a_u32Value); (void)fSseRead; (void)fMcBegin; } while (0)
     772#define IEM_MC_FETCH_XREG_U16(a_u16Value, a_iXReg, a_iWord )    do { CHK_XREG_IDX(a_iXReg); (a_u32Value) = 0; CHK_TYPE(uint32_t, a_u32Value); (void)fSseRead; (void)fMcBegin; } while (0)
     773#define IEM_MC_FETCH_XREG_U8( a_u8Value,  a_iXReg, a_iByte)     do { CHK_XREG_IDX(a_iXReg); (a_u32Value) = 0; CHK_TYPE(uint32_t, a_u32Value); (void)fSseRead; (void)fMcBegin; } while (0)
    772774#define IEM_MC_STORE_XREG_U32_U128(a_iXReg, a_iDwDst, a_u128Value, a_iDwSrc)    do { CHK_XREG_IDX(a_iXReg); CHK_TYPE(RTUINT128U, a_u128Value);  AssertCompile((a_iDwDst) < RT_ELEMENTS((a_u128Value).au32)); AssertCompile((a_iDwSrc) < RT_ELEMENTS((a_u128Value).au32)); (void)fSseWrite; (void)fMcBegin; } while (0)
    773 #define IEM_MC_FETCH_XREG_HI_U64(a_u64Value, a_iXReg)       do { CHK_XREG_IDX(a_iXReg); (a_u64Value) = 0; CHK_TYPE(uint64_t, a_u64Value); (void)fSseRead; (void)fMcBegin; } while (0)
    774775#define IEM_MC_STORE_XREG_U128(a_iXReg, a_u128Value)        do { CHK_TYPE(RTUINT128U, a_u128Value); (void)fSseWrite; (void)fMcBegin; } while (0)
    775776#define IEM_MC_STORE_XREG_XMM(a_iXReg, a_XmmValue)          do { CHK_TYPE(X86XMMREG, a_XmmValue); (void)fSseWrite; (void)fMcBegin; } while (0)
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