VirtualBox

Ignore:
Timestamp:
Apr 4, 2024 12:05:54 PM (12 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162579
Message:

VMM/IEM: Rework microcode of cmpss/cmpsd/cmpps/cmppd/roundss/roundsd/roundps/roundpd/dpps/dppd to use IEM_MC_CALL_SSE_AIMPL_3 and don't reference the MXCSR explicitely, bugref:10641

File:
1 edited

Legend:

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

    r104150 r104156  
    1181111811        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1181211812        IEM_MC_LOCAL(X86XMMREG,                     Dst);
    11813         IEM_MC_ARG(uint32_t *,                      pfMxcsr,                0);
    11814         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    1);
    11815         IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    2);
    11816         IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
     11813        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    0);
     11814        IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    1);
     11815        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    2);
    1181711816        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1181811817        IEM_MC_PREPARE_SSE_USAGE();
    11819         IEM_MC_REF_MXCSR(pfMxcsr);
    1182011818        IEM_MC_FETCH_XREG_PAIR_XMM(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm));
    11821         IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpps_u128, pfMxcsr, pDst, pSrc, bImmArg);
     11819        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cmpps_u128, pDst, pSrc, bImmArg);
    1182211820        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    1182311821            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    1183711835        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1183811836        IEM_MC_LOCAL(X86XMMREG,                     Dst);
    11839         IEM_MC_ARG(uint32_t *,                      pfMxcsr,                0);
    11840         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    1);
    11841         IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    2);
     11837        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    0);
     11838        IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    1);
    1184211839        IEM_MC_LOCAL(RTGCPTR,                       GCPtrEffSrc);
    1184311840
    1184411841        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    1184511842        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    11846         IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
     11843        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    2);
    1184711844        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    1184811845        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    1185011847
    1185111848        IEM_MC_FETCH_MEM_XMM_ALIGN_SSE_AND_XREG_XMM(Src, IEM_GET_MODRM_REG(pVCpu, bRm), pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    11852         IEM_MC_REF_MXCSR(pfMxcsr);
    11853         IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpps_u128, pfMxcsr, pDst, pSrc, bImmArg);
     11849        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cmpps_u128, pDst, pSrc, bImmArg);
    1185411850        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    1185511851            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    1188011876        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1188111877        IEM_MC_LOCAL(X86XMMREG,                     Dst);
    11882         IEM_MC_ARG(uint32_t *,                      pfMxcsr,                0);
    11883         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    1);
    11884         IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    2);
    11885         IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
     11878        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    0);
     11879        IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    1);
     11880        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    2);
    1188611881        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1188711882        IEM_MC_PREPARE_SSE_USAGE();
    11888         IEM_MC_REF_MXCSR(pfMxcsr);
    1188911883        IEM_MC_FETCH_XREG_PAIR_XMM(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm));
    11890         IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmppd_u128, pfMxcsr, pDst, pSrc, bImmArg);
     11884        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cmppd_u128, pDst, pSrc, bImmArg);
    1189111885        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    1189211886            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    1190611900        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1190711901        IEM_MC_LOCAL(X86XMMREG,                     Dst);
    11908         IEM_MC_ARG(uint32_t *,                      pfMxcsr,                0);
    11909         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    1);
    11910         IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    2);
     11902        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    0);
     11903        IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    1);
    1191111904        IEM_MC_LOCAL(RTGCPTR,                       GCPtrEffSrc);
    1191211905
    1191311906        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    1191411907        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    11915         IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
     11908        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    2);
    1191611909        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    1191711910        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1191811911        IEM_MC_PREPARE_SSE_USAGE();
    1191911912
    11920         IEM_MC_REF_MXCSR(pfMxcsr);
    1192111913        IEM_MC_FETCH_MEM_XMM_ALIGN_SSE_AND_XREG_XMM(Src, IEM_GET_MODRM_REG(pVCpu, bRm), pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    11922         IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmppd_u128, pfMxcsr, pDst, pSrc, bImmArg);
     11914        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cmppd_u128, pDst, pSrc, bImmArg);
    1192311915        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    1192411916            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    1194911941        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1195011942        IEM_MC_LOCAL(X86XMMREG,                     Dst);
    11951         IEM_MC_ARG(uint32_t *,                      pfMxcsr,                0);
    11952         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    1);
    11953         IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    2);
    11954         IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
     11943        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    0);
     11944        IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    1);
     11945        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    2);
    1195511946        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1195611947        IEM_MC_PREPARE_SSE_USAGE();
    11957         IEM_MC_REF_MXCSR(pfMxcsr);
    1195811948        IEM_MC_FETCH_XREG_PAIR_XMM(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm));
    11959         IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpss_u128, pfMxcsr, pDst, pSrc, bImmArg);
     11949        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cmpss_u128, pDst, pSrc, bImmArg);
    1196011950        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    1196111951            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    1197511965        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1197611966        IEM_MC_LOCAL(X86XMMREG,                     Dst);
    11977         IEM_MC_ARG(uint32_t *,                      pfMxcsr,                0);
    11978         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    1);
    11979         IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    2);
     11967        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    0);
     11968        IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    1);
    1198011969        IEM_MC_LOCAL(RTGCPTR,                       GCPtrEffSrc);
    1198111970
    1198211971        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    1198311972        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    11984         IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
     11973        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    2);
    1198511974        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    1198611975        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    1198911978        IEM_MC_FETCH_MEM_XMM_U32_AND_XREG_XMM(Src, IEM_GET_MODRM_REG(pVCpu, bRm),
    1199011979                                              0 /*a_iDword*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    11991         IEM_MC_REF_MXCSR(pfMxcsr);
    11992         IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpss_u128, pfMxcsr, pDst, pSrc, bImmArg);
     11980        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cmpss_u128, pDst, pSrc, bImmArg);
    1199311981        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    1199411982            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    1201912007        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1202012008        IEM_MC_LOCAL(X86XMMREG,                     Dst);
    12021         IEM_MC_ARG(uint32_t *,                      pfMxcsr,                0);
    12022         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    1);
    12023         IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    2);
    12024         IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
     12009        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    0);
     12010        IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    1);
     12011        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    2);
    1202512012        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1202612013        IEM_MC_PREPARE_SSE_USAGE();
    12027         IEM_MC_REF_MXCSR(pfMxcsr);
    1202812014        IEM_MC_FETCH_XREG_PAIR_XMM(Src, IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_MODRM_RM(pVCpu, bRm));
    12029         IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpsd_u128, pfMxcsr, pDst, pSrc, bImmArg);
     12015        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cmpsd_u128, pDst, pSrc, bImmArg);
    1203012016        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    1203112017            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    1204512031        IEM_MC_LOCAL(IEMMEDIAF2XMMSRC,              Src);
    1204612032        IEM_MC_LOCAL(X86XMMREG,                     Dst);
    12047         IEM_MC_ARG(uint32_t *,                      pfMxcsr,                0);
    12048         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    1);
    12049         IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    2);
     12033        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,            pDst,           Dst,    0);
     12034        IEM_MC_ARG_LOCAL_REF(PCIEMMEDIAF2XMMSRC,    pSrc,           Src,    1);
    1205012035        IEM_MC_LOCAL(RTGCPTR,                       GCPtrEffSrc);
    1205112036
    1205212037        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);
    1205312038        uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
    12054         IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    3);
     12039        IEM_MC_ARG_CONST(uint8_t,                   bImmArg, /*=*/ bImm,    2);
    1205512040        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    1205612041        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    1205712042        IEM_MC_PREPARE_SSE_USAGE();
    1205812043
    12059         IEM_MC_REF_MXCSR(pfMxcsr);
    1206012044        IEM_MC_FETCH_MEM_XMM_U64_AND_XREG_XMM(Src, IEM_GET_MODRM_REG(pVCpu, bRm),
    1206112045                                              0 /*a_iQword */, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    12062         IEM_MC_CALL_VOID_AIMPL_4(iemAImpl_cmpsd_u128, pfMxcsr, pDst, pSrc, bImmArg);
     12046        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cmpsd_u128, pDst, pSrc, bImmArg);
    1206312047        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    1206412048            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
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