VirtualBox

Changeset 96955 in vbox


Ignore:
Timestamp:
Sep 30, 2022 3:51:48 PM (2 years ago)
Author:
vboxsync
Message:

IEM: Nits, some SSE instructions were misclassified as SSE2.

File:
1 edited

Legend:

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

    r96954 r96955  
    346346
    347347/**
     348 * Common worker for SSE instructions of the form:
     349 *      pxxx    xmm1, xmm2/mem128
     350 *
     351 * Proper alignment of the 128-bit operand is enforced.
     352 * SSE cpuid checks. No SIMD FP exceptions.
     353 *
     354 * @sa iemOpCommonSse2_FullFull_To_Full
     355 */
     356FNIEMOP_DEF_1(iemOpCommonSse_FullFull_To_Full, PFNIEMAIMPLMEDIAF2U128, pfnU128)
     357{
     358    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
     359    if (IEM_IS_MODRM_REG_MODE(bRm))
     360    {
     361        /*
     362         * Register, register.
     363         */
     364        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     365        IEM_MC_BEGIN(2, 0);
     366        IEM_MC_ARG(PRTUINT128U,          pDst, 0);
     367        IEM_MC_ARG(PCRTUINT128U,         pSrc, 1);
     368        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     369        IEM_MC_PREPARE_SSE_USAGE();
     370        IEM_MC_REF_XREG_U128(pDst, IEM_GET_MODRM_REG(pVCpu, bRm));
     371        IEM_MC_REF_XREG_U128_CONST(pSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
     372        IEM_MC_CALL_SSE_AIMPL_2(pfnU128, pDst, pSrc);
     373        IEM_MC_ADVANCE_RIP();
     374        IEM_MC_END();
     375    }
     376    else
     377    {
     378        /*
     379         * Register, memory.
     380         */
     381        IEM_MC_BEGIN(2, 2);
     382        IEM_MC_ARG(PRTUINT128U,                 pDst,       0);
     383        IEM_MC_LOCAL(RTUINT128U,                uSrc);
     384        IEM_MC_ARG_LOCAL_REF(PCRTUINT128U,      pSrc, uSrc, 1);
     385        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     386
     387        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     388        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     389        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     390        IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     391
     392        IEM_MC_PREPARE_SSE_USAGE();
     393        IEM_MC_REF_XREG_U128(pDst, IEM_GET_MODRM_REG(pVCpu, bRm));
     394        IEM_MC_CALL_SSE_AIMPL_2(pfnU128, pDst, pSrc);
     395
     396        IEM_MC_ADVANCE_RIP();
     397        IEM_MC_END();
     398    }
     399    return VINF_SUCCESS;
     400}
     401
     402
     403/**
    348404 * Common worker for SSE2 instructions on the forms:
    349405 *      pxxx    xmm1, xmm2/mem128
     
    38843940
    38853941            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3886             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     3942            IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    38873943            IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */
    38883944
     
    39133969            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    39143970            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3915             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     3971            IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    39163972            IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */
    39173973
     
    39423998
    39433999            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3944             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     4000            IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    39454001            IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */
    39464002
     
    39714027            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    39724028            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    3973             IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     4029            IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();
    39744030            IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */
    39754031
     
    48004856        if (IEM_IS_MODRM_REG_MODE(bRm))
    48014857        {
    4802             /* greg, XMM */
     4858            /* greg32, XMM */
    48034859            IEM_MC_BEGIN(3, 4);
    48044860            IEM_MC_LOCAL(uint32_t,  fMxcsr);
     
    48264882        else
    48274883        {
    4828             /* greg, [mem] */
     4884            /* greg32, [mem64] */
    48294885            IEM_MC_BEGIN(3, 4);
    48304886            IEM_MC_LOCAL(RTGCPTR,   GCPtrEffSrc);
     
    55755631{
    55765632    IEMOP_MNEMONIC2(RM, ANDPS, andps, Vps, Wps, DISOPTYPE_HARMLESS, 0);
    5577     return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, iemAImpl_pand_u128);
     5633    return FNIEMOP_CALL_1(iemOpCommonSse_FullFull_To_Full, iemAImpl_pand_u128);
    55785634}
    55795635
     
    55955651{
    55965652    IEMOP_MNEMONIC2(RM, ANDNPS, andnps, Vps, Wps, DISOPTYPE_HARMLESS, 0);
    5597     return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, iemAImpl_pandn_u128);
     5653    return FNIEMOP_CALL_1(iemOpCommonSse_FullFull_To_Full, iemAImpl_pandn_u128);
    55985654}
    55995655
     
    56155671{
    56165672    IEMOP_MNEMONIC2(RM, ORPS, orps, Vps, Wps, DISOPTYPE_HARMLESS, 0);
    5617     return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, iemAImpl_por_u128);
     5673    return FNIEMOP_CALL_1(iemOpCommonSse_FullFull_To_Full, iemAImpl_por_u128);
    56185674}
    56195675
     
    56355691{
    56365692    IEMOP_MNEMONIC2(RM, XORPS, xorps, Vps, Wps, DISOPTYPE_HARMLESS, 0);
    5637     return FNIEMOP_CALL_1(iemOpCommonSse2_FullFull_To_Full, iemAImpl_pxor_u128);
     5693    return FNIEMOP_CALL_1(iemOpCommonSse_FullFull_To_Full, iemAImpl_pxor_u128);
    56385694}
    56395695
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