VirtualBox

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


Ignore:
Timestamp:
Jul 11, 2024 3:07:58 PM (9 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
163926
Message:

VMM/IEM: Rework roundps/roundpd which only have two operands instead of three, add vroundps/vroundpd, bugref:9898

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

Legend:

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

    r104521 r105274  
    78377837#define SSE_COMPARE_F2_XMM_IMM8_MAX 0x1f
    78387838
    7839 TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_F2_XMM_IMM8_T, SSE_COMPARE_F2_XMM_IMM8_TEST_T, PFNIEMAIMPLMXCSRF2XMMIMM8);
    7840 
    7841 static SSE_COMPARE_F2_XMM_IMM8_T g_aSseCompareF2XmmR32Imm8[] =
     7839TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_F3_XMM_IMM8_T, SSE_COMPARE_F3_XMM_IMM8_TEST_T, PFNIEMAIMPLMEDIAF3XMMIMM8);
     7840
     7841static SSE_COMPARE_F3_XMM_IMM8_T g_aSseCompareF3XmmR32Imm8[] =
    78427842{
    78437843    ENTRY_BIN(cmpps_u128),
     
    78467846
    78477847#ifdef TSTIEMAIMPL_WITH_GENERATOR
    7848 DUMP_ALL_FN(SseCompareF2XmmR32Imm8, g_aSseCompareF2XmmR32Imm8)
    7849 static RTEXITCODE SseCompareF2XmmR32Imm8Generate(uint32_t cTests, const char * const *papszNameFmts)
     7848DUMP_ALL_FN(SseCompareF3XmmR32Imm8, g_aSseCompareF3XmmR32Imm8)
     7849static RTEXITCODE SseCompareF3XmmR32Imm8Generate(uint32_t cTests, const char * const *papszNameFmts)
    78507850{
    78517851    cTests = RT_MAX(192, cTests); /* there are 144 standard input variations */
     
    78657865
    78667866    uint32_t cMinNormalPairs       = (cTests - 144) / 4;
    7867     for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareF2XmmR32Imm8); iFn++)
    7868     {
    7869         PFNIEMAIMPLMXCSRF2XMMIMM8 const pfn = g_aSseCompareF2XmmR32Imm8[iFn].pfnNative ? g_aSseCompareF2XmmR32Imm8[iFn].pfnNative : g_aSseCompareF2XmmR32Imm8[iFn].pfn;
     7867    for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareF3XmmR32Imm8); iFn++)
     7868    {
     7869        PFNIEMAIMPLMEDIAF3XMMIMM8 const pfn = g_aSseCompareF3XmmR32Imm8[iFn].pfnNative ? g_aSseCompareF3XmmR32Imm8[iFn].pfnNative : g_aSseCompareF3XmmR32Imm8[iFn].pfn;
    78707870
    78717871        IEMBINARYOUTPUT BinOut;
    7872         AssertReturn(GENERATE_BINARY_OPEN(&BinOut, papszNameFmts, g_aSseCompareF2XmmR32Imm8[iFn]), RTEXITCODE_FAILURE);
     7872        AssertReturn(GENERATE_BINARY_OPEN(&BinOut, papszNameFmts, g_aSseCompareF3XmmR32Imm8[iFn]), RTEXITCODE_FAILURE);
    78737873
    78747874        uint32_t cNormalInputPairs  = 0;
    78757875        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
    78767876        {
    7877             SSE_COMPARE_F2_XMM_IMM8_TEST_T TestData; RT_ZERO(TestData);
     7877            SSE_COMPARE_F3_XMM_IMM8_TEST_T TestData; RT_ZERO(TestData);
    78787878
    78797879            TestData.InVal1.ar32[0] = iTest < cTests ? RandR32Src(iTest) : s_aSpecials[iTest - cTests].Val1;
     
    79807980#endif
    79817981
    7982 static void SseCompareF2XmmR32Imm8Test(void)
    7983 {
    7984     for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareF2XmmR32Imm8); iFn++)
    7985     {
    7986         if (!SUBTEST_CHECK_IF_ENABLED_AND_DECOMPRESS(g_aSseCompareF2XmmR32Imm8[iFn]))
     7982static void SseCompareF3XmmR32Imm8Test(void)
     7983{
     7984    for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareF3XmmR32Imm8); iFn++)
     7985    {
     7986        if (!SUBTEST_CHECK_IF_ENABLED_AND_DECOMPRESS(g_aSseCompareF3XmmR32Imm8[iFn]))
    79877987            continue;
    79887988
    7989         SSE_COMPARE_F2_XMM_IMM8_TEST_T const * const    paTests = g_aSseCompareF2XmmR32Imm8[iFn].paTests;
    7990         uint32_t const                                  cTests  = g_aSseCompareF2XmmR32Imm8[iFn].cTests;
    7991         PFNIEMAIMPLMXCSRF2XMMIMM8                       pfn     = g_aSseCompareF2XmmR32Imm8[iFn].pfn;
    7992         uint32_t const                                  cVars   = COUNT_VARIATIONS(g_aSseCompareF2XmmR32Imm8[iFn]);
     7989        SSE_COMPARE_F3_XMM_IMM8_TEST_T const * const    paTests = g_aSseCompareF3XmmR32Imm8[iFn].paTests;
     7990        uint32_t const                                  cTests  = g_aSseCompareF3XmmR32Imm8[iFn].cTests;
     7991        PFNIEMAIMPLMEDIAF3XMMIMM8                       pfn     = g_aSseCompareF3XmmR32Imm8[iFn].pfn;
     7992        uint32_t const                                  cVars   = COUNT_VARIATIONS(g_aSseCompareF3XmmR32Imm8[iFn]);
    79937993        if (!cTests) RTTestSkipped(g_hTest, "no tests");
    79947994        for (uint32_t iVar = 0; iVar < cVars; iVar++)
     
    80308030        }
    80318031
    8032         FREE_DECOMPRESSED_TESTS(g_aSseCompareF2XmmR32Imm8[iFn]);
     8032        FREE_DECOMPRESSED_TESTS(g_aSseCompareF3XmmR32Imm8[iFn]);
    80338033    }
    80348034}
     
    80388038 * Compare SSE operations on packed and single double-precision floating point values - outputting a mask.
    80398039 */
    8040 static SSE_COMPARE_F2_XMM_IMM8_T g_aSseCompareF2XmmR64Imm8[] =
     8040static SSE_COMPARE_F3_XMM_IMM8_T g_aSseCompareF3XmmR64Imm8[] =
    80418041{
    80428042    ENTRY_BIN(cmppd_u128),
     
    80458045
    80468046#ifdef TSTIEMAIMPL_WITH_GENERATOR
    8047 DUMP_ALL_FN(SseCompareF2XmmR64Imm8, g_aSseCompareF2XmmR64Imm8)
    8048 static RTEXITCODE SseCompareF2XmmR64Imm8Generate(uint32_t cTests, const char * const *papszNameFmts)
     8047DUMP_ALL_FN(SseCompareF3XmmR64Imm8, g_aSseCompareF3XmmR64Imm8)
     8048static RTEXITCODE SseCompareF3XmmR64Imm8Generate(uint32_t cTests, const char * const *papszNameFmts)
    80498049{
    80508050    cTests = RT_MAX(192, cTests); /* there are 144 standard input variations */
     
    80648064
    80658065    uint32_t cMinNormalPairs       = (cTests - 144) / 4;
    8066     for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareF2XmmR64Imm8); iFn++)
    8067     {
    8068         PFNIEMAIMPLMXCSRF2XMMIMM8 const pfn = g_aSseCompareF2XmmR64Imm8[iFn].pfnNative ? g_aSseCompareF2XmmR64Imm8[iFn].pfnNative : g_aSseCompareF2XmmR64Imm8[iFn].pfn;
     8066    for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareF3XmmR64Imm8); iFn++)
     8067    {
     8068        PFNIEMAIMPLMEDIAF3XMMIMM8 const pfn = g_aSseCompareF3XmmR64Imm8[iFn].pfnNative ? g_aSseCompareF3XmmR64Imm8[iFn].pfnNative : g_aSseCompareF3XmmR64Imm8[iFn].pfn;
    80698069
    80708070        IEMBINARYOUTPUT BinOut;
    8071         AssertReturn(GENERATE_BINARY_OPEN(&BinOut, papszNameFmts, g_aSseCompareF2XmmR64Imm8[iFn]), RTEXITCODE_FAILURE);
     8071        AssertReturn(GENERATE_BINARY_OPEN(&BinOut, papszNameFmts, g_aSseCompareF3XmmR64Imm8[iFn]), RTEXITCODE_FAILURE);
    80728072
    80738073        uint32_t cNormalInputPairs  = 0;
    80748074        for (uint32_t iTest = 0; iTest < cTests + RT_ELEMENTS(s_aSpecials); iTest += 1)
    80758075        {
    8076             SSE_COMPARE_F2_XMM_IMM8_TEST_T TestData; RT_ZERO(TestData);
     8076            SSE_COMPARE_F3_XMM_IMM8_TEST_T TestData; RT_ZERO(TestData);
    80778077
    80788078            TestData.InVal1.ar64[0] = iTest < cTests ? RandR64Src(iTest) : s_aSpecials[iTest - cTests].Val1;
     
    81718171#endif
    81728172
    8173 static void SseCompareF2XmmR64Imm8Test(void)
    8174 {
    8175     for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareF2XmmR64Imm8); iFn++)
    8176     {
    8177         if (!SUBTEST_CHECK_IF_ENABLED_AND_DECOMPRESS(g_aSseCompareF2XmmR64Imm8[iFn]))
     8173static void SseCompareF3XmmR64Imm8Test(void)
     8174{
     8175    for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareF3XmmR64Imm8); iFn++)
     8176    {
     8177        if (!SUBTEST_CHECK_IF_ENABLED_AND_DECOMPRESS(g_aSseCompareF3XmmR64Imm8[iFn]))
    81788178            continue;
    81798179
    8180         SSE_COMPARE_F2_XMM_IMM8_TEST_T const * const    paTests = g_aSseCompareF2XmmR64Imm8[iFn].paTests;
    8181         uint32_t const                                  cTests  = g_aSseCompareF2XmmR64Imm8[iFn].cTests;
    8182         PFNIEMAIMPLMXCSRF2XMMIMM8                       pfn     = g_aSseCompareF2XmmR64Imm8[iFn].pfn;
    8183         uint32_t const                                  cVars   = COUNT_VARIATIONS(g_aSseCompareF2XmmR64Imm8[iFn]);
     8180        SSE_COMPARE_F3_XMM_IMM8_TEST_T const * const    paTests = g_aSseCompareF3XmmR64Imm8[iFn].paTests;
     8181        uint32_t const                                  cTests  = g_aSseCompareF3XmmR64Imm8[iFn].cTests;
     8182        PFNIEMAIMPLMEDIAF3XMMIMM8                       pfn     = g_aSseCompareF3XmmR64Imm8[iFn].pfn;
     8183        uint32_t const                                  cVars   = COUNT_VARIATIONS(g_aSseCompareF3XmmR64Imm8[iFn]);
    81848184        if (!cTests) RTTestSkipped(g_hTest, "no tests");
    81858185        for (uint32_t iVar = 0; iVar < cVars; iVar++)
     
    82148214        }
    82158215
    8216         FREE_DECOMPRESSED_TESTS(g_aSseCompareF2XmmR64Imm8[iFn]);
     8216        FREE_DECOMPRESSED_TESTS(g_aSseCompareF3XmmR64Imm8[iFn]);
    82178217    }
    82188218}
     
    1023710237        GROUP_ENTRY(CATEGORY_SSE_FP_OTHER,  SseCompareEflR32R32,    "tstIEMAImplDataSseCompare-%s.bin.gz", 0),
    1023810238        GROUP_ENTRY(CATEGORY_SSE_FP_OTHER,  SseCompareEflR64R64,    "tstIEMAImplDataSseCompare-%s.bin.gz", 0),
    10239         GROUP_ENTRY(CATEGORY_SSE_FP_OTHER,  SseCompareF2XmmR32Imm8, "tstIEMAImplDataSseCompare-%s.bin.gz", 0),
    10240         GROUP_ENTRY(CATEGORY_SSE_FP_OTHER,  SseCompareF2XmmR64Imm8, "tstIEMAImplDataSseCompare-%s.bin.gz", 0),
     10239        GROUP_ENTRY(CATEGORY_SSE_FP_OTHER,  SseCompareF3XmmR32Imm8, "tstIEMAImplDataSseCompare-%s.bin.gz", 0),
     10240        GROUP_ENTRY(CATEGORY_SSE_FP_OTHER,  SseCompareF3XmmR64Imm8, "tstIEMAImplDataSseCompare-%s.bin.gz", 0),
    1024110241
    1024210242        GROUP_ENTRY(CATEGORY_SSE_FP_OTHER,  SseConvertXmmI32R32,    "tstIEMAImplDataSseConvert-%s.bin.gz", 0),
  • trunk/src/VBox/VMM/testcase/tstIEMAImpl.h

    r104521 r105274  
    473473} SSE_COMPARE_EFL_R64_R64_TEST_T;
    474474
    475 typedef struct SSE_COMPARE_F2_XMM_IMM8_TEST_T
     475typedef struct SSE_COMPARE_F3_XMM_IMM8_TEST_T
    476476{
    477477    uint32_t                fMxcsrIn;
     
    483483    X86XMMREG               InVal2;
    484484    X86XMMREG               OutVal;
    485 } SSE_COMPARE_F2_XMM_IMM8_TEST_T;
     485} SSE_COMPARE_F3_XMM_IMM8_TEST_T;
    486486
    487487typedef struct SSE_CONVERT_XMM_TEST_T
     
    10041004TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_EFL_R64_R64_TEST_T, vcomisd_u128         );
    10051005
    1006 TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_F2_XMM_IMM8_TEST_T, cmpps_u128           );
    1007 TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_F2_XMM_IMM8_TEST_T, cmppd_u128           );
    1008 TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_F2_XMM_IMM8_TEST_T, cmpss_u128           );
    1009 TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_F2_XMM_IMM8_TEST_T, cmpsd_u128           );
     1006TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_F3_XMM_IMM8_TEST_T, cmpps_u128           );
     1007TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_F3_XMM_IMM8_TEST_T, cmppd_u128           );
     1008TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_F3_XMM_IMM8_TEST_T, cmpss_u128           );
     1009TSTIEM_DECLARE_TEST_ARRAY_BIN(SseCompare,   SSE_COMPARE_F3_XMM_IMM8_TEST_T, cmpsd_u128           );
    10101010
    10111011TSTIEM_DECLARE_TEST_ARRAY_BIN(SseConvert,   SSE_CONVERT_XMM_TEST_T,         cvtdq2ps_u128        );
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