VirtualBox

Changeset 103926 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Mar 19, 2024 8:53:10 PM (11 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162300
Message:

VMM/IEM: Reordered the vblendvps/d MC statements for better mojo. bugref:9898

File:
1 edited

Legend:

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

    r103924 r103926  
    10531053            IEM_MC_BEGIN(4, 4, IEM_MC_F_NOT_286_OR_OLDER, 0);
    10541054            IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx);
     1055            IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     1056            IEM_MC_PREPARE_AVX_USAGE();
    10551057            IEM_MC_LOCAL(RTUINT256U,            uDst);
     1058            IEM_MC_ARG_LOCAL_REF(PRTUINT256U,   puDst,  uDst,  0);
    10561059            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     1060            IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc1, uSrc1, 1);
     1061            IEM_MC_FETCH_YREG_U256(uSrc1,       IEM_GET_EFFECTIVE_VVVV(pVCpu));
    10571062            IEM_MC_LOCAL(RTUINT256U,            uSrc2);
     1063            IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc2, uSrc2, 2);
     1064            IEM_MC_FETCH_YREG_U256(uSrc2,       IEM_GET_MODRM_RM(pVCpu, bRm));
    10581065            IEM_MC_LOCAL(RTUINT256U,            uSrc3);
    1059             IEM_MC_ARG_LOCAL_REF(PRTUINT256U,   puDst,  uDst,  0);
    1060             IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc1, uSrc1, 1);
    1061             IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc2, uSrc2, 2);
    10621066            IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc3, uSrc3, 3);
    1063             IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    1064             IEM_MC_PREPARE_AVX_USAGE();
    1065             IEM_MC_FETCH_YREG_U256(uSrc1,   IEM_GET_EFFECTIVE_VVVV(pVCpu));
    1066             IEM_MC_FETCH_YREG_U256(uSrc2,   IEM_GET_MODRM_RM(pVCpu, bRm));
    1067             IEM_MC_FETCH_YREG_U256(uSrc3,   IEM_GET_IMM8_REG(pVCpu, bOp4));
     1067            IEM_MC_FETCH_YREG_U256(uSrc3,       IEM_GET_IMM8_REG(pVCpu, bOp4));
    10681068            IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU256, puDst, puSrc1, puSrc2, puSrc3);
    10691069            IEM_MC_STORE_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), uDst);
     
    10751075            IEM_MC_BEGIN(4, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
    10761076            IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx);
    1077             IEM_MC_ARG(PRTUINT128U,          puDst,  0);
    1078             IEM_MC_ARG(PCRTUINT128U,         puSrc1, 1);
    1079             IEM_MC_ARG(PCRTUINT128U,         puSrc2, 2);
    1080             IEM_MC_ARG(PCRTUINT128U,         puSrc3, 3);
    1081             IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    1082             IEM_MC_PREPARE_AVX_USAGE();
    1083             IEM_MC_REF_XREG_U128(puDst,        IEM_GET_MODRM_REG(pVCpu, bRm));
    1084             IEM_MC_REF_XREG_U128_CONST(puSrc1, IEM_GET_EFFECTIVE_VVVV(pVCpu));
    1085             IEM_MC_REF_XREG_U128_CONST(puSrc2, IEM_GET_MODRM_RM(pVCpu, bRm));
    1086             IEM_MC_REF_XREG_U128_CONST(puSrc3, IEM_GET_IMM8_REG(pVCpu, bOp4));
    1087             IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU128, puDst, puSrc1, puSrc2, puSrc3);
    1088             IEM_MC_CLEAR_YREG_128_UP(          IEM_GET_MODRM_REG(pVCpu, bRm));
    1089             IEM_MC_ADVANCE_RIP_AND_FINISH();
    1090             IEM_MC_END();
    1091         }
    1092     }
    1093     else
    1094     {
    1095         /*
    1096          * Register, memory.
    1097          */
    1098         if (pVCpu->iem.s.uVexLength)
    1099         {
    1100             IEM_MC_BEGIN(4, 5, IEM_MC_F_NOT_286_OR_OLDER, 0);
    1101             IEM_MC_LOCAL(RTUINT256U,            uDst);
    1102             IEM_MC_LOCAL(RTUINT256U,            uSrc1);
    1103             IEM_MC_LOCAL(RTUINT256U,            uSrc2);
    1104             IEM_MC_LOCAL(RTUINT256U,            uSrc3);
    1105             IEM_MC_LOCAL(RTGCPTR,               GCPtrEffSrc);
    1106             IEM_MC_ARG_LOCAL_REF(PRTUINT256U,   puDst,  uDst,  0);
    1107             IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc1, uSrc1, 1);
    1108             IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc2, uSrc2, 2);
    1109             IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc3, uSrc3, 3);
    1110 
    1111             IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    1112             uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4);
    1113 
    1114             IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx);
    1115             IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    1116             IEM_MC_PREPARE_AVX_USAGE();
    1117 
    1118             IEM_MC_FETCH_MEM_U256_NO_AC(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    1119             IEM_MC_FETCH_YREG_U256(uSrc1,      IEM_GET_EFFECTIVE_VVVV(pVCpu));
    1120             IEM_MC_FETCH_YREG_U256(uSrc3,      IEM_GET_IMM8_REG(pVCpu, bOp4));
    1121             IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU256, puDst, puSrc1, puSrc2, puSrc3);
    1122             IEM_MC_STORE_YREG_U256_ZX_VLMAX(   IEM_GET_MODRM_REG(pVCpu, bRm), uDst);
    1123 
    1124             IEM_MC_ADVANCE_RIP_AND_FINISH();
    1125             IEM_MC_END();
    1126         }
    1127         else
    1128         {
    1129             IEM_MC_BEGIN(4, 2, IEM_MC_F_NOT_286_OR_OLDER, 0);
    1130             IEM_MC_LOCAL(RTUINT128U,                uSrc2);
    1131             IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    1132             IEM_MC_ARG(PRTUINT128U,                 puDst,         0);
    1133             IEM_MC_ARG(PCRTUINT128U,                puSrc1,        1);
    1134             IEM_MC_ARG_LOCAL_REF(PCRTUINT128U,      puSrc2, uSrc2, 2);
    1135             IEM_MC_ARG(PCRTUINT128U,                puSrc3,        3);
    1136 
    1137             IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
    1138             uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4);
    1139 
    1140             IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx);
    1141             IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    1142             IEM_MC_PREPARE_AVX_USAGE();
    1143 
    1144             IEM_MC_FETCH_MEM_U128_NO_AC(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     1077            IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     1078            IEM_MC_PREPARE_AVX_USAGE();
     1079            IEM_MC_ARG(PRTUINT128U,             puDst,  0);
    11451080            IEM_MC_REF_XREG_U128(puDst,         IEM_GET_MODRM_REG(pVCpu, bRm));
     1081            IEM_MC_ARG(PCRTUINT128U,            puSrc1, 1);
    11461082            IEM_MC_REF_XREG_U128_CONST(puSrc1,  IEM_GET_EFFECTIVE_VVVV(pVCpu));
     1083            IEM_MC_ARG(PCRTUINT128U,            puSrc2, 2);
     1084            IEM_MC_REF_XREG_U128_CONST(puSrc2,  IEM_GET_MODRM_RM(pVCpu, bRm));
     1085            IEM_MC_ARG(PCRTUINT128U,            puSrc3, 3);
    11471086            IEM_MC_REF_XREG_U128_CONST(puSrc3,  IEM_GET_IMM8_REG(pVCpu, bOp4));
    11481087            IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU128, puDst, puSrc1, puSrc2, puSrc3);
    11491088            IEM_MC_CLEAR_YREG_128_UP(           IEM_GET_MODRM_REG(pVCpu, bRm));
     1089            IEM_MC_ADVANCE_RIP_AND_FINISH();
     1090            IEM_MC_END();
     1091        }
     1092    }
     1093    else
     1094    {
     1095        /*
     1096         * Register, memory.
     1097         */
     1098        if (pVCpu->iem.s.uVexLength)
     1099        {
     1100            IEM_MC_BEGIN(4, 5, IEM_MC_F_NOT_286_OR_OLDER, 0);
     1101            IEM_MC_LOCAL(RTGCPTR,               GCPtrEffSrc);
     1102            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1103            uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4);
     1104            IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx);
     1105            IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     1106            IEM_MC_PREPARE_AVX_USAGE();
     1107
     1108            IEM_MC_LOCAL(RTUINT256U,            uSrc2);
     1109            IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc2, uSrc2, 2);
     1110            IEM_MC_FETCH_MEM_U256_NO_AC(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     1111
     1112            IEM_MC_LOCAL(RTUINT256U,            uSrc1);
     1113            IEM_MC_FETCH_YREG_U256(uSrc1,       IEM_GET_EFFECTIVE_VVVV(pVCpu));
     1114            IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc1, uSrc1, 1);
     1115            IEM_MC_LOCAL(RTUINT256U,            uSrc3);
     1116            IEM_MC_ARG_LOCAL_REF(PCRTUINT256U,  puSrc3, uSrc3, 3);
     1117            IEM_MC_FETCH_YREG_U256(uSrc3,       IEM_GET_IMM8_REG(pVCpu, bOp4));
     1118            IEM_MC_LOCAL(RTUINT256U,            uDst);
     1119            IEM_MC_ARG_LOCAL_REF(PRTUINT256U,   puDst,  uDst,  0);
     1120            IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU256, puDst, puSrc1, puSrc2, puSrc3);
     1121            IEM_MC_STORE_YREG_U256_ZX_VLMAX(    IEM_GET_MODRM_REG(pVCpu, bRm), uDst);
     1122
     1123            IEM_MC_ADVANCE_RIP_AND_FINISH();
     1124            IEM_MC_END();
     1125        }
     1126        else
     1127        {
     1128            IEM_MC_BEGIN(4, 2, IEM_MC_F_NOT_286_OR_OLDER, 0);
     1129            IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     1130            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     1131            uint8_t bOp4; IEM_OPCODE_GET_NEXT_U8(&bOp4);
     1132            IEMOP_HLP_DONE_VEX_DECODING_W0_EX(fAvx);
     1133            IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     1134            IEM_MC_PREPARE_AVX_USAGE();
     1135
     1136            IEM_MC_LOCAL(RTUINT128U,                uSrc2);
     1137            IEM_MC_ARG_LOCAL_REF(PCRTUINT128U,      puSrc2, uSrc2, 2);
     1138            IEM_MC_FETCH_MEM_U128_NO_AC(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     1139
     1140            IEM_MC_ARG(PRTUINT128U,                 puDst,         0);
     1141            IEM_MC_REF_XREG_U128(puDst,             IEM_GET_MODRM_REG(pVCpu, bRm));
     1142            IEM_MC_ARG(PCRTUINT128U,                puSrc1,        1);
     1143            IEM_MC_REF_XREG_U128_CONST(puSrc1,      IEM_GET_EFFECTIVE_VVVV(pVCpu));
     1144            IEM_MC_ARG(PCRTUINT128U,                puSrc3,        3);
     1145            IEM_MC_REF_XREG_U128_CONST(puSrc3,      IEM_GET_IMM8_REG(pVCpu, bOp4));
     1146            IEM_MC_CALL_VOID_AIMPL_4(pImpl->pfnU128, puDst, puSrc1, puSrc2, puSrc3);
     1147            IEM_MC_CLEAR_YREG_128_UP(               IEM_GET_MODRM_REG(pVCpu, bRm));
    11501148
    11511149            IEM_MC_ADVANCE_RIP_AND_FINISH();
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