VirtualBox

Changeset 104174 in vbox for trunk/src/VBox/VMM/testcase


Ignore:
Timestamp:
Apr 5, 2024 10:21:30 AM (11 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

Location:
trunk/src/VBox/VMM/testcase
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/testcase/tstIEMAImpl.cpp

    r104173 r104174  
    89068906                                          | (iFz  ? X86_MXCSR_FZ  : 0)
    89078907                                          | X86_MXCSR_XCPT_MASK;
    8908                         uint32_t fMxcsrM  = fMxcsrIn;
    89098908                        uint64_t u64ResM;
    8910                         pfn(&fMxcsrM, &u64ResM, &TestData.InVal);
     8909                        uint32_t fMxcsrM    = pfn(fMxcsrIn, &u64ResM, &TestData.InVal);
    89118910                        TestData.fMxcsrIn   = fMxcsrIn;
    89128911                        TestData.fMxcsrOut  = fMxcsrM;
     
    89158914
    89168915                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
    8917                         uint32_t fMxcsrU  = fMxcsrIn;
    89188916                        uint64_t u64ResU;
    8919                         pfn(&fMxcsrU, &u64ResU, &TestData.InVal);
     8917                        uint32_t fMxcsrU    = pfn(fMxcsrIn, &u64ResU, &TestData.InVal);
    89208918                        TestData.fMxcsrIn   = fMxcsrIn;
    89218919                        TestData.fMxcsrOut  = fMxcsrU;
     
    89278925                        {
    89288926                            fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | fXcpt;
    8929                             uint32_t fMxcsr1  = fMxcsrIn;
    89308927                            uint64_t u64Res1;
    8931                             pfn(&fMxcsr1, &u64Res1, &TestData.InVal);
     8928                            uint32_t fMxcsr1    = pfn(fMxcsrIn, &u64Res1, &TestData.InVal);
    89328929                            TestData.fMxcsrIn   = fMxcsrIn;
    89338930                            TestData.fMxcsrOut  = fMxcsr1;
     
    89398936                                fXcpt |= fMxcsr1 & X86_MXCSR_XCPT_FLAGS;
    89408937                                fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | (fXcpt << X86_MXCSR_XCPT_MASK_SHIFT);
    8941                                 uint32_t fMxcsr2  = fMxcsrIn;
    89428938                                uint64_t u64Res2;
    8943                                 pfn(&fMxcsr2, &u64Res2, &TestData.InVal);
     8939                                uint32_t fMxcsr2    = pfn(fMxcsrIn, &u64Res2, &TestData.InVal);
    89448940                                TestData.fMxcsrIn   = fMxcsrIn;
    89458941                                TestData.fMxcsrOut  = fMxcsr2;
     
    89528948                                    {
    89538949                                        fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | ((fXcpt & ~fUnmasked) << X86_MXCSR_XCPT_MASK_SHIFT);
    8954                                         uint32_t fMxcsr3  = fMxcsrIn;
    89558950                                        uint64_t u64Res3;
    8956                                         pfn(&fMxcsr3, &u64Res3, &TestData.InVal);
     8951                                        uint32_t fMxcsr3    = pfn(fMxcsrIn, &u64Res3, &TestData.InVal);
    89578952                                        TestData.fMxcsrIn   = fMxcsrIn;
    89588953                                        TestData.fMxcsrOut  = fMxcsr3;
     
    89878982            {
    89888983                RTUINT64U ValOut;
    8989                 uint32_t fMxcsr = paTests[iTest].fMxcsrIn;
    8990                 pfn(&fMxcsr, &ValOut.u, &paTests[iTest].InVal);
     8984                uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &ValOut.u, &paTests[iTest].InVal);
    89918985                if (   fMxcsr != paTests[iTest].fMxcsrOut
    89928986                    || ValOut.ai32[0] != paTests[iTest].OutVal.ai32[0]
     
    90609054                                          | (iFz  ? X86_MXCSR_FZ  : 0)
    90619055                                          | X86_MXCSR_XCPT_MASK;
    9062                         uint32_t fMxcsrM  = fMxcsrIn;
    9063                         pfn(&fMxcsrM, &TestData.OutVal, TestData.InVal.u);
     9056                        uint32_t fMxcsrM    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    90649057                        TestData.fMxcsrIn   = fMxcsrIn;
    90659058                        TestData.fMxcsrOut  = fMxcsrM;
     
    90679060
    90689061                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
    9069                         uint32_t fMxcsrU  = fMxcsrIn;
    9070                         pfn(&fMxcsrU, &TestData.OutVal, TestData.InVal.u);
     9062                        uint32_t fMxcsrU    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    90719063                        TestData.fMxcsrIn   = fMxcsrIn;
    90729064                        TestData.fMxcsrOut  = fMxcsrU;
     
    90779069                        {
    90789070                            fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | fXcpt;
    9079                             uint32_t fMxcsr1  = fMxcsrIn;
    9080                             pfn(&fMxcsr1, &TestData.OutVal, TestData.InVal.u);
     9071                            uint32_t fMxcsr1    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    90819072                            TestData.fMxcsrIn   = fMxcsrIn;
    90829073                            TestData.fMxcsrOut  = fMxcsr1;
     
    90879078                                fXcpt |= fMxcsr1 & X86_MXCSR_XCPT_FLAGS;
    90889079                                fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | (fXcpt << X86_MXCSR_XCPT_MASK_SHIFT);
    9089                                 uint32_t fMxcsr2  = fMxcsrIn;
    9090                                 pfn(&fMxcsr2, &TestData.OutVal, TestData.InVal.u);
     9080                                uint32_t fMxcsr2    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    90919081                                TestData.fMxcsrIn   = fMxcsrIn;
    90929082                                TestData.fMxcsrOut  = fMxcsr2;
     
    90989088                                    {
    90999089                                        fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | ((fXcpt & ~fUnmasked) << X86_MXCSR_XCPT_MASK_SHIFT);
    9100                                         uint32_t fMxcsr3  = fMxcsrIn;
    9101                                         pfn(&fMxcsr3, &TestData.OutVal, TestData.InVal.u);
     9090                                        uint32_t fMxcsr3    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    91029091                                        TestData.fMxcsrIn   = fMxcsrIn;
    91039092                                        TestData.fMxcsrOut  = fMxcsr3;
     
    91319120            {
    91329121                X86XMMREG ValOut;
    9133                 uint32_t fMxcsr = paTests[iTest].fMxcsrIn;
    9134                 pfn(&fMxcsr, &ValOut, paTests[iTest].InVal.u);
     9122                uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &ValOut, paTests[iTest].InVal.u);
    91359123                if (   fMxcsr != paTests[iTest].fMxcsrOut
    91369124                    || !RTFLOAT64U_ARE_IDENTICAL(&ValOut.ar64[0], &paTests[iTest].OutVal.ar64[0])
     
    92059193                                          | (iFz  ? X86_MXCSR_FZ  : 0)
    92069194                                          | X86_MXCSR_XCPT_MASK;
    9207                         uint32_t fMxcsrM  = fMxcsrIn;
    9208                         pfn(&fMxcsrM, &TestData.OutVal, TestData.InVal.u);
     9195                        uint32_t fMxcsrM    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    92099196                        TestData.fMxcsrIn   = fMxcsrIn;
    92109197                        TestData.fMxcsrOut  = fMxcsrM;
     
    92129199
    92139200                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
    9214                         uint32_t fMxcsrU  = fMxcsrIn;
    9215                         pfn(&fMxcsrU, &TestData.OutVal, TestData.InVal.u);
     9201                        uint32_t fMxcsrU    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    92169202                        TestData.fMxcsrIn   = fMxcsrIn;
    92179203                        TestData.fMxcsrOut  = fMxcsrU;
     
    92229208                        {
    92239209                            fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | fXcpt;
    9224                             uint32_t fMxcsr1  = fMxcsrIn;
    9225                             pfn(&fMxcsr1, &TestData.OutVal, TestData.InVal.u);
     9210                            uint32_t fMxcsr1    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    92269211                            TestData.fMxcsrIn   = fMxcsrIn;
    92279212                            TestData.fMxcsrOut  = fMxcsr1;
     
    92329217                                fXcpt |= fMxcsr1 & X86_MXCSR_XCPT_FLAGS;
    92339218                                fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | (fXcpt << X86_MXCSR_XCPT_MASK_SHIFT);
    9234                                 uint32_t fMxcsr2  = fMxcsrIn;
    9235                                 pfn(&fMxcsr2, &TestData.OutVal, TestData.InVal.u);
     9219                                uint32_t fMxcsr2    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    92369220                                TestData.fMxcsrIn   = fMxcsrIn;
    92379221                                TestData.fMxcsrOut  = fMxcsr2;
     
    92439227                                    {
    92449228                                        fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | ((fXcpt & ~fUnmasked) << X86_MXCSR_XCPT_MASK_SHIFT);
    9245                                         uint32_t fMxcsr3  = fMxcsrIn;
    9246                                         pfn(&fMxcsr3, &TestData.OutVal, TestData.InVal.u);
     9229                                        uint32_t fMxcsr3    = pfn(fMxcsrIn, &TestData.OutVal, TestData.InVal.u);
    92479230                                        TestData.fMxcsrIn   = fMxcsrIn;
    92489231                                        TestData.fMxcsrOut  = fMxcsr3;
     
    92769259            {
    92779260                X86XMMREG ValOut;
    9278                 uint32_t fMxcsr = paTests[iTest].fMxcsrIn;
    9279                 pfn(&fMxcsr, &ValOut, paTests[iTest].InVal.u);
     9261                uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &ValOut, paTests[iTest].InVal.u);
    92809262                if (   fMxcsr != paTests[iTest].fMxcsrOut
    92819263                    || !RTFLOAT32U_ARE_IDENTICAL(&ValOut.ar32[0], &paTests[iTest].OutVal.ar32[0])
     
    93689350                                          | (iFz  ? X86_MXCSR_FZ  : 0)
    93699351                                          | X86_MXCSR_XCPT_MASK;
    9370                         uint32_t fMxcsrM  = fMxcsrIn;
    93719352                        uint64_t u64ResM;
    9372                         pfn(&fMxcsrM, &u64ResM, TestVal.u);
     9353                        uint32_t fMxcsrM   = pfn(fMxcsrIn, &u64ResM, TestVal.u);
    93739354                        TestData.fMxcsrIn  = fMxcsrIn;
    93749355                        TestData.fMxcsrOut = fMxcsrM;
     
    93779358
    93789359                        fMxcsrIn &= ~X86_MXCSR_XCPT_MASK;
    9379                         uint32_t fMxcsrU  = fMxcsrIn;
    93809360                        uint64_t u64ResU;
    9381                         pfn(&fMxcsrU, &u64ResU, TestVal.u);
     9361                        uint32_t fMxcsrU   = pfn(fMxcsrIn, &u64ResU, TestVal.u);
    93829362                        TestData.fMxcsrIn  = fMxcsrIn;
    93839363                        TestData.fMxcsrOut = fMxcsrU;
     
    93899369                        {
    93909370                            fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | fXcpt;
    9391                             uint32_t fMxcsr1  = fMxcsrIn;
    93929371                            uint64_t u64Res1;
    9393                             pfn(&fMxcsr1, &u64Res1, TestVal.u);
     9372                            uint32_t fMxcsr1   = pfn(fMxcsrIn, &u64Res1, TestVal.u);
    93949373                            TestData.fMxcsrIn  = fMxcsrIn;
    93959374                            TestData.fMxcsrOut = fMxcsr1;
     
    94019380                                fXcpt |= fMxcsr1 & X86_MXCSR_XCPT_FLAGS;
    94029381                                fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | (fXcpt << X86_MXCSR_XCPT_MASK_SHIFT);
    9403                                 uint32_t fMxcsr2  = fMxcsrIn;
    94049382                                uint64_t u64Res2;
    9405                                 pfn(&fMxcsr2, &u64Res2, TestVal.u);
     9383                                uint32_t fMxcsr2   = pfn(fMxcsrIn, &u64Res2, TestVal.u);
    94069384                                TestData.fMxcsrIn  = fMxcsrIn;
    94079385                                TestData.fMxcsrOut = fMxcsr2;
     
    94149392                                    {
    94159393                                        fMxcsrIn = (fMxcsrIn & ~X86_MXCSR_XCPT_MASK) | ((fXcpt & ~fUnmasked) << X86_MXCSR_XCPT_MASK_SHIFT);
    9416                                         uint32_t fMxcsr3  = fMxcsrIn;
    94179394                                        uint64_t u64Res3;
    9418                                         pfn(&fMxcsr3, &u64Res3, TestVal.u);
     9395                                        uint32_t fMxcsr3   = pfn(fMxcsrIn, &u64Res3, TestVal.u);
    94199396                                        TestData.fMxcsrIn  = fMxcsrIn;
    94209397                                        TestData.fMxcsrOut = fMxcsr3;
     
    94579434                ValIn.au32[1] = paTests[iTest].ar32InVal[1].u;
    94589435
    9459                 uint32_t fMxcsr = paTests[iTest].fMxcsrIn;
    9460                 pfn(&fMxcsr, &ValOut.u, ValIn.u);
     9436                uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &ValOut.u, ValIn.u);
    94619437                if (   fMxcsr != paTests[iTest].fMxcsrOut
    94629438                    || ValOut.ai32[0] != paTests[iTest].OutVal.ai32[0]
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r104150 r104174  
    729729#define IEM_MC_REF_EFLAGS_EX(a_pEFlags, a_fEflInput, a_fEflOutput) IEM_MC_REF_EFLAGS(a_pEFlags)
    730730#define IEM_MC_REF_FPUREG(a_pr80Dst, a_iSt)             do { (a_pr80Dst) = (PRTFLOAT80U)((uintptr_t)0); CHK_PTYPE(PCRTFLOAT80U, a_pr80Dst); CHK_VAR(a_pr80Dst); AssertCompile((a_iSt) < 8); (void)fMcBegin; } while (0)
    731 #define IEM_MC_REF_MXCSR(a_pfMxcsr)                     do { (a_pfMxcsr) = (uint32_t *)((uintptr_t)0);  CHK_PTYPE(uint32_t *, a_pfMxcsr);   CHK_VAR(a_pfMxcsr); (void)fMcBegin; (void)fSseRead; } while (0)
    732731
    733732#define IEM_MC_ADD_GREG_U16(a_iGReg, a_u16Const)        do { CHK_GREG_IDX(a_iGReg); CHK_CONST(uint16_t, a_u16Const); (void)fMcBegin; } while (0)
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