VirtualBox

Ignore:
Timestamp:
Apr 5, 2024 10:21:30 AM (12 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162602
Message:

VMM/IEM: Get rid of IEM_MC_REF_MXCSR() and convert the users to use IEM_MC_CALL_SSE_AIMPL_XXX which handles the MXCSR, avoids passing the MXCSR as a reference so the recompiler can use shadowed registers, bugref:10641

File:
1 edited

Legend:

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

    r104156 r104174  
    34753475        IEM_MC_BEGIN(0, 0);
    34763476        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3477         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    34783477        IEM_MC_LOCAL(X86XMMREG,             Dst);
    3479         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,    pDst, Dst,          1);
    3480         IEM_MC_ARG(uint64_t,                u64Src,             2);
     3478        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,    pDst, Dst,          0);
     3479        IEM_MC_ARG(uint64_t,                u64Src,             1);
    34813480        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    34823481        IEM_MC_MAYBE_RAISE_FPU_XCPT();
     
    34843483        IEM_MC_FPU_TO_MMX_MODE();
    34853484
    3486         IEM_MC_REF_MXCSR(pfMxcsr);
    34873485        IEM_MC_FETCH_XREG_XMM(Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); /* Need it because the high quadword remains unchanged. */
    34883486        IEM_MC_FETCH_MREG_U64(u64Src, IEM_GET_MODRM_RM_8(bRm));
    34893487
    3490         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2ps_u128, pfMxcsr, pDst, u64Src);
     3488        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvtpi2ps_u128, pDst, u64Src);
    34913489        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    34923490            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    35043502         */
    35053503        IEM_MC_BEGIN(0, 0);
    3506         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    35073504        IEM_MC_LOCAL(X86XMMREG,             Dst);
    3508         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,    pDst, Dst,          1);
    3509         IEM_MC_ARG(uint64_t,                u64Src,             2);
     3505        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,    pDst, Dst,          0);
     3506        IEM_MC_ARG(uint64_t,                u64Src,             1);
    35103507        IEM_MC_LOCAL(RTGCPTR,               GCPtrEffSrc);
    35113508
     
    35183515        IEM_MC_PREPARE_FPU_USAGE();
    35193516        IEM_MC_FPU_TO_MMX_MODE();
    3520         IEM_MC_REF_MXCSR(pfMxcsr);
    3521 
    3522         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2ps_u128, pfMxcsr, pDst, u64Src);
     3517
     3518        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvtpi2ps_u128, pDst, u64Src);
    35233519        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    35243520            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    35453541        IEM_MC_BEGIN(0, 0);
    35463542        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3547         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    35483543        IEM_MC_LOCAL(X86XMMREG,             Dst);
    3549         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,    pDst, Dst,          1);
    3550         IEM_MC_ARG(uint64_t,                u64Src,             2);
     3544        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,    pDst, Dst,          0);
     3545        IEM_MC_ARG(uint64_t,                u64Src,             1);
    35513546        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    35523547        IEM_MC_MAYBE_RAISE_FPU_XCPT();
     
    35543549        IEM_MC_FPU_TO_MMX_MODE();
    35553550
    3556         IEM_MC_REF_MXCSR(pfMxcsr);
    35573551        IEM_MC_FETCH_MREG_U64(u64Src, IEM_GET_MODRM_RM_8(bRm));
    35583552
    3559         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2pd_u128, pfMxcsr, pDst, u64Src);
     3553        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvtpi2pd_u128, pDst, u64Src);
    35603554        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    35613555            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    35733567         */
    35743568        IEM_MC_BEGIN(0, 0);
    3575         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    35763569        IEM_MC_LOCAL(X86XMMREG,             Dst);
    3577         IEM_MC_ARG_LOCAL_REF(PX86XMMREG,    pDst, Dst,          1);
    3578         IEM_MC_ARG(uint64_t,                u64Src,             2);
     3570        IEM_MC_ARG_LOCAL_REF(PX86XMMREG,    pDst, Dst,          0);
     3571        IEM_MC_ARG(uint64_t,                u64Src,             1);
    35793572        IEM_MC_LOCAL(RTGCPTR,               GCPtrEffSrc);
    35803573
     
    35873580        /* Doesn't cause a transition to MMX mode. */
    35883581        IEM_MC_PREPARE_SSE_USAGE();
    3589         IEM_MC_REF_MXCSR(pfMxcsr);
    3590 
    3591         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2pd_u128, pfMxcsr, pDst, u64Src);
     3582
     3583        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvtpi2pd_u128, pDst, u64Src);
    35923584        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    35933585            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    39213913        IEM_MC_BEGIN(0, 0);
    39223914        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3923         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    39243915        IEM_MC_LOCAL(uint64_t,              u64Dst);
    3925         IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    1);
    3926         IEM_MC_ARG(uint64_t,                u64Src,             2);
     3916        IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    0);
     3917        IEM_MC_ARG(uint64_t,                u64Src,             1);
    39273918        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    39283919        IEM_MC_PREPARE_FPU_USAGE();
    39293920        IEM_MC_FPU_TO_MMX_MODE();
    39303921
    3931         IEM_MC_REF_MXCSR(pfMxcsr);
    39323922        IEM_MC_FETCH_XREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    39333923
    3934         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttps2pi_u128, pfMxcsr, pu64Dst, u64Src);
     3924        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvttps2pi_u128, pu64Dst, u64Src);
    39353925        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    39363926            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    39483938         */
    39493939        IEM_MC_BEGIN(0, 0);
    3950         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    39513940        IEM_MC_LOCAL(uint64_t,              u64Dst);
    3952         IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    1);
    3953         IEM_MC_ARG(uint64_t,                u64Src,             2);
     3941        IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    0);
     3942        IEM_MC_ARG(uint64_t,                u64Src,             1);
    39543943        IEM_MC_LOCAL(RTGCPTR,               GCPtrEffSrc);
    39553944
     
    39613950        IEM_MC_PREPARE_FPU_USAGE();
    39623951        IEM_MC_FPU_TO_MMX_MODE();
    3963         IEM_MC_REF_MXCSR(pfMxcsr);
    3964 
    3965         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttps2pi_u128, pfMxcsr, pu64Dst, u64Src);
     3952
     3953        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvttps2pi_u128, pu64Dst, u64Src);
    39663954        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    39673955            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    39883976        IEM_MC_BEGIN(0, 0);
    39893977        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    3990         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    39913978        IEM_MC_LOCAL(uint64_t,              u64Dst);
    3992         IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    1);
    3993         IEM_MC_ARG(PCX86XMMREG,             pSrc,               2);
     3979        IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    0);
     3980        IEM_MC_ARG(PCX86XMMREG,             pSrc,               1);
    39943981        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    39953982        IEM_MC_PREPARE_FPU_USAGE();
    39963983        IEM_MC_FPU_TO_MMX_MODE();
    39973984
    3998         IEM_MC_REF_MXCSR(pfMxcsr);
    39993985        IEM_MC_REF_XREG_XMM_CONST(pSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
    40003986
    4001         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttpd2pi_u128, pfMxcsr, pu64Dst, pSrc);
     3987        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvttpd2pi_u128, pu64Dst, pSrc);
    40023988        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    40033989            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    40154001         */
    40164002        IEM_MC_BEGIN(0, 0);
    4017         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    40184003        IEM_MC_LOCAL(uint64_t,              u64Dst);
    4019         IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,    u64Dst, 1);
     4004        IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,    u64Dst, 0);
    40204005        IEM_MC_LOCAL(X86XMMREG,             uSrc);
    4021         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,   pSrc,       uSrc,   2);
     4006        IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,   pSrc,       uSrc,   1);
    40224007        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    40234008
     
    40304015        IEM_MC_FPU_TO_MMX_MODE();
    40314016
    4032         IEM_MC_REF_MXCSR(pfMxcsr);
    4033 
    4034         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvttpd2pi_u128, pfMxcsr, pu64Dst, pSrc);
     4017        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvttpd2pi_u128, pu64Dst, pSrc);
    40354018        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    40364019            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    42834266        IEM_MC_BEGIN(0, 0);
    42844267        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    4285         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    42864268        IEM_MC_LOCAL(uint64_t,              u64Dst);
    4287         IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    1);
    4288         IEM_MC_ARG(uint64_t,                u64Src,             2);
     4269        IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    0);
     4270        IEM_MC_ARG(uint64_t,                u64Src,             1);
    42894271
    42904272        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    42924274        IEM_MC_FPU_TO_MMX_MODE();
    42934275
    4294         IEM_MC_REF_MXCSR(pfMxcsr);
    42954276        IEM_MC_FETCH_XREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /* a_iQword*/);
    42964277
    4297         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtps2pi_u128, pfMxcsr, pu64Dst, u64Src);
     4278        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvtps2pi_u128, pu64Dst, u64Src);
    42984279        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    42994280            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    43114292         */
    43124293        IEM_MC_BEGIN(0, 0);
    4313         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    43144294        IEM_MC_LOCAL(uint64_t,              u64Dst);
    4315         IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    1);
    4316         IEM_MC_ARG(uint64_t,                u64Src,             2);
     4295        IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    0);
     4296        IEM_MC_ARG(uint64_t,                u64Src,             1);
    43174297        IEM_MC_LOCAL(RTGCPTR,               GCPtrEffSrc);
    43184298
     
    43244304        IEM_MC_PREPARE_FPU_USAGE();
    43254305        IEM_MC_FPU_TO_MMX_MODE();
    4326         IEM_MC_REF_MXCSR(pfMxcsr);
    4327 
    4328         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtps2pi_u128, pfMxcsr, pu64Dst, u64Src);
     4306
     4307        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvtps2pi_u128, pu64Dst, u64Src);
    43294308        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    43304309            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    43514330        IEM_MC_BEGIN(0, 0);
    43524331        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    4353         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    43544332        IEM_MC_LOCAL(uint64_t,              u64Dst);
    4355         IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    1);
    4356         IEM_MC_ARG(PCX86XMMREG,             pSrc,               2);
     4333        IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst, u64Dst,    0);
     4334        IEM_MC_ARG(PCX86XMMREG,             pSrc,               1);
    43574335
    43584336        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    43604338        IEM_MC_FPU_TO_MMX_MODE();
    43614339
    4362         IEM_MC_REF_MXCSR(pfMxcsr);
    43634340        IEM_MC_REF_XREG_XMM_CONST(pSrc, IEM_GET_MODRM_RM(pVCpu, bRm));
    43644341
    4365         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpd2pi_u128, pfMxcsr, pu64Dst, pSrc);
     4342        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvtpd2pi_u128, pu64Dst, pSrc);
    43664343        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    43674344            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    43794356         */
    43804357        IEM_MC_BEGIN(0, 0);
    4381         IEM_MC_ARG(uint32_t *,              pfMxcsr,            0);
    43824358        IEM_MC_LOCAL(uint64_t,              u64Dst);
    4383         IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,    u64Dst, 1);
     4359        IEM_MC_ARG_LOCAL_REF(uint64_t *,    pu64Dst,    u64Dst, 0);
    43844360        IEM_MC_LOCAL(X86XMMREG,             uSrc);
    4385         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,   pSrc,       uSrc,   2);
     4361        IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,   pSrc,       uSrc,   1);
    43864362        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    43874363
     
    43944370        IEM_MC_FPU_TO_MMX_MODE();
    43954371
    4396         IEM_MC_REF_MXCSR(pfMxcsr);
    4397 
    4398         IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpd2pi_u128, pfMxcsr, pu64Dst, pSrc);
     4372        IEM_MC_CALL_SSE_AIMPL_2(iemAImpl_cvtpd2pi_u128, pu64Dst, pSrc);
    43994373        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    44004374            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