VirtualBox

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


Ignore:
Timestamp:
Apr 8, 2024 8:15:10 PM (12 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162690
Message:

VMM/IEM: Refactoring assembly helpers to not pass eflags by reference but instead by value and return the updated value (via eax/w0) - sixth chunk: SHL,SHR,SAR,ROL,ROR,RCL,RCR. bugref:10376

File:
1 edited

Legend:

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

    r104208 r104238  
    27832783            a_TestType Test; \
    27842784            Test.fEflIn    = RandEFlags(); \
    2785             Test.fEflOut   = Test.fEflIn; \
    27862785            Test.uDstIn    = RandU ## a_cBits ## Dst(iTest); \
    27872786            Test.uDstOut   = Test.uDstIn; \
    27882787            Test.uSrcIn    = 0; \
    27892788            Test.uMisc     = RandU8() & (a_cBits * 4 - 1); /* need to go way beyond the a_cBits limit */ \
    2790             a_aSubTests[iFn].pfnNative(&Test.uDstOut, Test.uMisc, &Test.fEflOut); \
     2789            Test.fEflOut   = a_aSubTests[iFn].pfnNative(Test.fEflIn, &Test.uDstOut, Test.uMisc); \
    27912790            GenerateBinaryWrite(&BinOut, &Test, sizeof(Test)); \
    27922791            \
    27932792            Test.fEflIn    = (~Test.fEflIn & X86_EFL_LIVE_MASK) | X86_EFL_RA1_MASK; \
    2794             Test.fEflOut   = Test.fEflIn; \
    27952793            Test.uDstOut   = Test.uDstIn; \
    2796             a_aSubTests[iFn].pfnNative(&Test.uDstOut, Test.uMisc, &Test.fEflOut); \
     2794            Test.fEflOut   = a_aSubTests[iFn].pfnNative(Test.fEflIn, &Test.uDstOut, Test.uMisc); \
    27972795            GenerateBinaryWrite(&BinOut, &Test, sizeof(Test)); \
    27982796        } \
     
    28382836    for (uint32_t i = 0; i < cIterations; i++) \
    28392837    { \
    2840         uint32_t fBenchEfl = fEflIn; \
    28412838        a_uType  uBenchDst = uDstIn;  \
    2842         pfn(&uBenchDst, cShift, &fBenchEfl); \
     2839        pfn(fEflIn, &uBenchDst, cShift); \
    28432840        \
    2844         fBenchEfl = fEflIn; \
    28452841        uBenchDst = uDstIn;  \
    2846         pfn(&uBenchDst, cShift, &fBenchEfl); \
     2842        pfn(fEflIn, &uBenchDst, cShift); \
    28472843        \
    2848         fBenchEfl = fEflIn; \
    28492844        uBenchDst = uDstIn;  \
    2850         pfn(&uBenchDst, cShift, &fBenchEfl); \
     2845        pfn(fEflIn, &uBenchDst, cShift); \
    28512846        \
    2852         fBenchEfl = fEflIn; \
    28532847        uBenchDst = uDstIn;  \
    2854         pfn(&uBenchDst, cShift, &fBenchEfl); \
     2848        pfn(fEflIn, &uBenchDst, cShift); \
    28552849    } \
    28562850    return RTTimeNanoTS() - nsStart; \
     
    28722866            for (uint32_t iTest = 0; iTest < cTests; iTest++ ) \
    28732867            { \
    2874                 uint32_t fEfl = paTests[iTest].fEflIn; \
    2875                 a_uType  uDst = paTests[iTest].uDstIn; \
    2876                 pfn(&uDst, paTests[iTest].uMisc, &fEfl); \
    2877                 if (   uDst != paTests[iTest].uDstOut \
    2878                     || fEfl != paTests[iTest].fEflOut ) \
     2868                a_uType  uDst    = paTests[iTest].uDstIn; \
     2869                uint32_t fEflOut = pfn(paTests[iTest].fEflIn, &uDst, paTests[iTest].uMisc); \
     2870                if (   uDst    != paTests[iTest].uDstOut \
     2871                    || fEflOut != paTests[iTest].fEflOut ) \
    28792872                    RTTestFailed(g_hTest, "#%u%s: efl=%#08x dst=" a_Fmt " shift=%2u -> efl=%#08x dst=" a_Fmt ", expected %#08x & " a_Fmt "%s\n", \
    28802873                                 iTest, iVar == 0 ? "" : "/n", \
    28812874                                 paTests[iTest].fEflIn, paTests[iTest].uDstIn, paTests[iTest].uMisc, \
    2882                                  fEfl, uDst, paTests[iTest].fEflOut, paTests[iTest].uDstOut, \
    2883                                  EFlagsDiff(fEfl, paTests[iTest].fEflOut)); \
     2875                                 fEflOut, uDst, paTests[iTest].fEflOut, paTests[iTest].uDstOut, \
     2876                                 EFlagsDiff(fEflOut, paTests[iTest].fEflOut)); \
    28842877                else \
    28852878                { \
    28862879                     *g_pu ## a_cBits  = paTests[iTest].uDstIn; \
    2887                      *g_pfEfl          = paTests[iTest].fEflIn; \
    2888                      pfn(g_pu ## a_cBits, paTests[iTest].uMisc, g_pfEfl); \
     2880                     fEflOut = pfn(paTests[iTest].fEflIn, g_pu ## a_cBits, paTests[iTest].uMisc); \
    28892881                     RTTEST_CHECK(g_hTest, *g_pu ## a_cBits == paTests[iTest].uDstOut); \
    2890                      RTTEST_CHECK(g_hTest, *g_pfEfl == paTests[iTest].fEflOut); \
     2882                     RTTEST_CHECK(g_hTest, fEflOut == paTests[iTest].fEflOut); \
    28912883                } \
    28922884            } \
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