VirtualBox

Ignore:
Timestamp:
Jan 25, 2024 10:08:29 AM (12 months ago)
Author:
vboxsync
Message:

tstIEMAImpl: Working on converting the C++ data to compressed binary. Done Int. bugref:9898

File:
1 edited

Legend:

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

    r103050 r103056  
    5959*   Defined Constants And Macros                                                                                                 *
    6060*********************************************************************************************************************************/
    61 #define ENTRY(a_Name)       ENTRY_EX(a_Name, 0)
     61#define ENTRY(a_Name)                           ENTRY_EX(a_Name, 0)
    6262#define ENTRY_EX(a_Name, a_uExtra) \
    6363    { RT_XSTR(a_Name), iemAImpl_ ## a_Name, NULL, \
     
    6565      a_uExtra, IEMTARGETCPU_EFL_BEHAVIOR_NATIVE /* means same for all here */ }
    6666
    67 #define ENTRY_FIX(a_Name)    ENTRY_FIX_EX(a_Name, 0)
     67#define ENTRY_BIN_FIX(a_Name)                   ENTRY_BIN_FIX_EX(a_Name, 0)
    6868#ifdef TSTIEMAIMPL_WITH_GENERATOR
    69 # define ENTRY_FIX_EX(a_Name, a_uExtra) \
     69# define ENTRY_BIN_FIX_EX(a_Name, a_uExtra) \
    7070    { RT_XSTR(a_Name), iemAImpl_ ## a_Name, NULL, \
    71       g_aTests_ ## a_Name, &g_cTests_ ## a_Name, \
     71      g_aTests_ ## a_Name, &g_cbTests_ ## a_Name, \
    7272      a_uExtra, IEMTARGETCPU_EFL_BEHAVIOR_NATIVE /* means same for all here */, \
    73       false, false, RT_ELEMENTS(g_aFixedTests_ ## a_Name), g_aFixedTests_ ## a_Name }
     73      true /*fBinary*/, true /*fCompressed*/, RT_ELEMENTS(g_aFixedTests_ ## a_Name), g_aFixedTests_ ## a_Name }
    7474#else
    75 # define ENTRY_FIX_EX(a_Name, a_uExtra) ENTRY_EX(a_Name, a_uExtra)
     75# define ENTRY_BIN_FIX_EX(a_Name, a_uExtra)     ENTRY_BIN_EX(a_Name, a_uExtra)
    7676#endif
    7777
    78 #define ENTRY_PFN_CAST(a_Name, a_pfnType)  ENTRY_PFN_CAST_EX(a_Name, a_pfnType, 0)
    79 #define ENTRY_PFN_CAST_EX(a_Name, a_pfnType, a_uExtra) \
     78#define ENTRY_BIN_PFN_CAST(a_Name, a_pfnType)   ENTRY_BIN_PFN_CAST_EX(a_Name, a_pfnType, 0)
     79#define ENTRY_BIN_PFN_CAST_EX(a_Name, a_pfnType, a_uExtra) \
    8080    { RT_XSTR(a_Name), (a_pfnType)iemAImpl_ ## a_Name, NULL, \
    81       g_aTests_ ## a_Name, &g_cTests_ ## a_Name, \
    82       a_uExtra, IEMTARGETCPU_EFL_BEHAVIOR_NATIVE /* means same for all here */ }
    83 
    84 #define ENTRY_BIN(a_Name)       ENTRY_EX_BIN(a_Name, 0)
    85 #define ENTRY_EX_BIN(a_Name, a_uExtra) \
     81      g_aTests_ ## a_Name, &g_cbTests_ ## a_Name, \
     82      a_uExtra, IEMTARGETCPU_EFL_BEHAVIOR_NATIVE /* means same for all here */, true /*fBinary*/, true /*fCompressed*/ }
     83
     84#define ENTRY_BIN(a_Name)                       ENTRY_BIN_EX(a_Name, 0)
     85#define ENTRY_BIN_EX(a_Name, a_uExtra) \
    8686    { RT_XSTR(a_Name), iemAImpl_ ## a_Name, NULL, \
    8787      g_aTests_ ## a_Name, &g_cbTests_ ## a_Name, \
    8888      a_uExtra, IEMTARGETCPU_EFL_BEHAVIOR_NATIVE /* means same for all here */, true /*fBinary*/, true /*fCompressed*/ }
    8989
    90 #define ENTRY_BIN_AVX(a_Name)       ENTRY_BIN_AVX_EX(a_Name, 0)
     90#define ENTRY_BIN_AVX(a_Name)                   ENTRY_BIN_AVX_EX(a_Name, 0)
    9191#ifndef IEM_WITHOUT_ASSEMBLY
    9292# define ENTRY_BIN_AVX_EX(a_Name, a_uExtra) \
     
    101101#endif
    102102
    103 #define ENTRY_BIN_SSE_OPT(a_Name)   ENTRY_BIN_SSE_OPT_EX(a_Name, 0)
     103#define ENTRY_BIN_SSE_OPT(a_Name)               ENTRY_BIN_SSE_OPT_EX(a_Name, 0)
    104104#ifndef IEM_WITHOUT_ASSEMBLY
    105105# define ENTRY_BIN_SSE_OPT_EX(a_Name, a_uExtra) \
     
    114114#endif
    115115
    116 
    117 #define ENTRY_INTEL(a_Name, a_fEflUndef) ENTRY_INTEL_EX(a_Name, a_fEflUndef, 0)
     116#define ENTRY_BIN_INTEL(a_Name, a_fEflUndef)    ENTRY_BIN_INTEL_EX(a_Name, a_fEflUndef, 0)
     117#define ENTRY_BIN_INTEL_EX(a_Name, a_fEflUndef, a_uExtra) \
     118    { RT_XSTR(a_Name) "_intel", iemAImpl_ ## a_Name ## _intel, iemAImpl_ ## a_Name, \
     119      g_aTests_ ## a_Name ## _intel, &g_cbTests_ ## a_Name ## _intel, \
     120      a_uExtra, IEMTARGETCPU_EFL_BEHAVIOR_INTEL, true /*fBinary*/, true /*fCompressed*/  }
     121
     122#define ENTRY_BIN_AMD(a_Name, a_fEflUndef)      ENTRY_BIN_AMD_EX(a_Name, a_fEflUndef, 0)
     123#define ENTRY_BIN_AMD_EX(a_Name, a_fEflUndef, a_uExtra) \
     124    { RT_XSTR(a_Name) "_amd", iemAImpl_ ## a_Name ## _amd,   iemAImpl_ ## a_Name, \
     125      g_aTests_ ## a_Name ## _amd, &g_cbTests_ ## a_Name ## _amd, \
     126      a_uExtra, IEMTARGETCPU_EFL_BEHAVIOR_AMD, true /*fBinary*/, true /*fCompressed*/  }
     127
     128#define ENTRY_INTEL(a_Name, a_fEflUndef)        ENTRY_INTEL_EX(a_Name, a_fEflUndef, 0)
    118129#define ENTRY_INTEL_EX(a_Name, a_fEflUndef, a_uExtra) \
    119130    { RT_XSTR(a_Name) "_intel", iemAImpl_ ## a_Name ## _intel, iemAImpl_ ## a_Name, \
     
    121132      a_uExtra, IEMTARGETCPU_EFL_BEHAVIOR_INTEL }
    122133
    123 #define ENTRY_AMD(a_Name, a_fEflUndef)   ENTRY_AMD_EX(a_Name, a_fEflUndef, 0)
     134#define ENTRY_AMD(a_Name, a_fEflUndef)          ENTRY_AMD_EX(a_Name, a_fEflUndef, 0)
    124135#define ENTRY_AMD_EX(a_Name, a_fEflUndef, a_uExtra) \
    125136    { RT_XSTR(a_Name) "_amd", iemAImpl_ ## a_Name ## _amd,   iemAImpl_ ## a_Name, \
     
    16841695            continue; \
    16851696        a_TestType const * const   paTests = a_aSubTests[iFn].paTests; \
    1686         uint32_t const             cTests  = *a_aSubTests[iFn].pcTests; \
     1697        uint32_t const             cTests  = *a_aSubTests[iFn].pcTests / sizeof(paTests[0]); \
    16871698        PFNIEMAIMPLBINU ## a_cBits pfn     = a_aSubTests[iFn].pfn; \
    16881699        uint32_t const             cVars   = COUNT_VARIATIONS(a_aSubTests[iFn]); \
     
    17341745static BINU8_T g_aBinU8[] =
    17351746{
    1736     ENTRY(add_u8),
    1737     ENTRY(add_u8_locked),
    1738     ENTRY(adc_u8),
    1739     ENTRY(adc_u8_locked),
    1740     ENTRY(sub_u8),
    1741     ENTRY(sub_u8_locked),
    1742     ENTRY(sbb_u8),
    1743     ENTRY(sbb_u8_locked),
    1744     ENTRY(or_u8),
    1745     ENTRY(or_u8_locked),
    1746     ENTRY(xor_u8),
    1747     ENTRY(xor_u8_locked),
    1748     ENTRY(and_u8),
    1749     ENTRY(and_u8_locked),
    1750     ENTRY_PFN_CAST(cmp_u8,  PFNIEMAIMPLBINU8),
    1751     ENTRY_PFN_CAST(test_u8, PFNIEMAIMPLBINU8),
     1747    ENTRY_BIN(add_u8),
     1748    ENTRY_BIN(add_u8_locked),
     1749    ENTRY_BIN(adc_u8),
     1750    ENTRY_BIN(adc_u8_locked),
     1751    ENTRY_BIN(sub_u8),
     1752    ENTRY_BIN(sub_u8_locked),
     1753    ENTRY_BIN(sbb_u8),
     1754    ENTRY_BIN(sbb_u8_locked),
     1755    ENTRY_BIN(or_u8),
     1756    ENTRY_BIN(or_u8_locked),
     1757    ENTRY_BIN(xor_u8),
     1758    ENTRY_BIN(xor_u8_locked),
     1759    ENTRY_BIN(and_u8),
     1760    ENTRY_BIN(and_u8_locked),
     1761    ENTRY_BIN_PFN_CAST(cmp_u8,  PFNIEMAIMPLBINU8),
     1762    ENTRY_BIN_PFN_CAST(test_u8, PFNIEMAIMPLBINU8),
    17521763};
    17531764TEST_BINARY_OPS(8, uint8_t, "%#04x", BINU8_TEST_T, g_aBinU8)
     
    17661777static BINU16_T g_aBinU16[] =
    17671778{
    1768     ENTRY_FIX(add_u16),
    1769     ENTRY(add_u16_locked),
    1770     ENTRY(adc_u16),
    1771     ENTRY(adc_u16_locked),
    1772     ENTRY(sub_u16),
    1773     ENTRY(sub_u16_locked),
    1774     ENTRY(sbb_u16),
    1775     ENTRY(sbb_u16_locked),
    1776     ENTRY(or_u16),
    1777     ENTRY(or_u16_locked),
    1778     ENTRY(xor_u16),
    1779     ENTRY(xor_u16_locked),
    1780     ENTRY(and_u16),
    1781     ENTRY(and_u16_locked),
    1782     ENTRY_PFN_CAST(cmp_u16,   PFNIEMAIMPLBINU16),
    1783     ENTRY_PFN_CAST(test_u16,  PFNIEMAIMPLBINU16),
    1784     ENTRY_PFN_CAST_EX(bt_u16, PFNIEMAIMPLBINU16, 1),
    1785     ENTRY_EX(btc_u16, 1),
    1786     ENTRY_EX(btc_u16_locked, 1),
    1787     ENTRY_EX(btr_u16, 1),
    1788     ENTRY_EX(btr_u16_locked, 1),
    1789     ENTRY_EX(bts_u16, 1),
    1790     ENTRY_EX(bts_u16_locked, 1),
    1791     ENTRY_AMD(  bsf_u16, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1792     ENTRY_INTEL(bsf_u16, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1793     ENTRY_AMD(  bsr_u16, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1794     ENTRY_INTEL(bsr_u16, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1795     ENTRY_AMD(  imul_two_u16, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
    1796     ENTRY_INTEL(imul_two_u16, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
    1797     ENTRY(arpl),
     1779    ENTRY_BIN_FIX(add_u16),
     1780    ENTRY_BIN(add_u16_locked),
     1781    ENTRY_BIN(adc_u16),
     1782    ENTRY_BIN(adc_u16_locked),
     1783    ENTRY_BIN(sub_u16),
     1784    ENTRY_BIN(sub_u16_locked),
     1785    ENTRY_BIN(sbb_u16),
     1786    ENTRY_BIN(sbb_u16_locked),
     1787    ENTRY_BIN(or_u16),
     1788    ENTRY_BIN(or_u16_locked),
     1789    ENTRY_BIN(xor_u16),
     1790    ENTRY_BIN(xor_u16_locked),
     1791    ENTRY_BIN(and_u16),
     1792    ENTRY_BIN(and_u16_locked),
     1793    ENTRY_BIN_PFN_CAST(cmp_u16,   PFNIEMAIMPLBINU16),
     1794    ENTRY_BIN_PFN_CAST(test_u16,  PFNIEMAIMPLBINU16),
     1795    ENTRY_BIN_PFN_CAST_EX(bt_u16, PFNIEMAIMPLBINU16, 1),
     1796    ENTRY_BIN_EX(btc_u16, 1),
     1797    ENTRY_BIN_EX(btc_u16_locked, 1),
     1798    ENTRY_BIN_EX(btr_u16, 1),
     1799    ENTRY_BIN_EX(btr_u16_locked, 1),
     1800    ENTRY_BIN_EX(bts_u16, 1),
     1801    ENTRY_BIN_EX(bts_u16_locked, 1),
     1802    ENTRY_BIN_AMD(  bsf_u16, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1803    ENTRY_BIN_INTEL(bsf_u16, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1804    ENTRY_BIN_AMD(  bsr_u16, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1805    ENTRY_BIN_INTEL(bsr_u16, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1806    ENTRY_BIN_AMD(  imul_two_u16, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
     1807    ENTRY_BIN_INTEL(imul_two_u16, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
     1808    ENTRY_BIN(arpl),
    17981809};
    17991810TEST_BINARY_OPS(16, uint16_t, "%#06x", BINU16_TEST_T, g_aBinU16)
     
    18121823static BINU32_T g_aBinU32[] =
    18131824{
    1814     ENTRY_FIX(add_u32),
    1815     ENTRY(add_u32_locked),
    1816     ENTRY(adc_u32),
    1817     ENTRY(adc_u32_locked),
    1818     ENTRY(sub_u32),
    1819     ENTRY(sub_u32_locked),
    1820     ENTRY(sbb_u32),
    1821     ENTRY(sbb_u32_locked),
    1822     ENTRY(or_u32),
    1823     ENTRY(or_u32_locked),
    1824     ENTRY(xor_u32),
    1825     ENTRY(xor_u32_locked),
    1826     ENTRY(and_u32),
    1827     ENTRY(and_u32_locked),
    1828     ENTRY_PFN_CAST(cmp_u32,   PFNIEMAIMPLBINU32),
    1829     ENTRY_PFN_CAST(test_u32,  PFNIEMAIMPLBINU32),
    1830     ENTRY_PFN_CAST_EX(bt_u32, PFNIEMAIMPLBINU32, 1),
    1831     ENTRY_EX(btc_u32, 1),
    1832     ENTRY_EX(btc_u32_locked, 1),
    1833     ENTRY_EX(btr_u32, 1),
    1834     ENTRY_EX(btr_u32_locked, 1),
    1835     ENTRY_EX(bts_u32, 1),
    1836     ENTRY_EX(bts_u32_locked, 1),
    1837     ENTRY_AMD(  bsf_u32, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1838     ENTRY_INTEL(bsf_u32, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1839     ENTRY_AMD(  bsr_u32, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1840     ENTRY_INTEL(bsr_u32, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1841     ENTRY_AMD(  imul_two_u32, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
    1842     ENTRY_INTEL(imul_two_u32, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
    1843     ENTRY(adcx_u32),
    1844     ENTRY(adox_u32),
     1825    ENTRY_BIN_FIX(add_u32),
     1826    ENTRY_BIN(add_u32_locked),
     1827    ENTRY_BIN(adc_u32),
     1828    ENTRY_BIN(adc_u32_locked),
     1829    ENTRY_BIN(sub_u32),
     1830    ENTRY_BIN(sub_u32_locked),
     1831    ENTRY_BIN(sbb_u32),
     1832    ENTRY_BIN(sbb_u32_locked),
     1833    ENTRY_BIN(or_u32),
     1834    ENTRY_BIN(or_u32_locked),
     1835    ENTRY_BIN(xor_u32),
     1836    ENTRY_BIN(xor_u32_locked),
     1837    ENTRY_BIN(and_u32),
     1838    ENTRY_BIN(and_u32_locked),
     1839    ENTRY_BIN_PFN_CAST(cmp_u32,   PFNIEMAIMPLBINU32),
     1840    ENTRY_BIN_PFN_CAST(test_u32,  PFNIEMAIMPLBINU32),
     1841    ENTRY_BIN_PFN_CAST_EX(bt_u32, PFNIEMAIMPLBINU32, 1),
     1842    ENTRY_BIN_EX(btc_u32, 1),
     1843    ENTRY_BIN_EX(btc_u32_locked, 1),
     1844    ENTRY_BIN_EX(btr_u32, 1),
     1845    ENTRY_BIN_EX(btr_u32_locked, 1),
     1846    ENTRY_BIN_EX(bts_u32, 1),
     1847    ENTRY_BIN_EX(bts_u32_locked, 1),
     1848    ENTRY_BIN_AMD(  bsf_u32, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1849    ENTRY_BIN_INTEL(bsf_u32, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1850    ENTRY_BIN_AMD(  bsr_u32, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1851    ENTRY_BIN_INTEL(bsr_u32, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1852    ENTRY_BIN_AMD(  imul_two_u32, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
     1853    ENTRY_BIN_INTEL(imul_two_u32, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
     1854    ENTRY_BIN(adcx_u32),
     1855    ENTRY_BIN(adox_u32),
    18451856};
    18461857TEST_BINARY_OPS(32, uint32_t, "%#010RX32", BINU32_TEST_T, g_aBinU32)
     
    18591870static BINU64_T g_aBinU64[] =
    18601871{
    1861     ENTRY_FIX(add_u64),
    1862     ENTRY(add_u64_locked),
    1863     ENTRY(adc_u64),
    1864     ENTRY(adc_u64_locked),
    1865     ENTRY(sub_u64),
    1866     ENTRY(sub_u64_locked),
    1867     ENTRY(sbb_u64),
    1868     ENTRY(sbb_u64_locked),
    1869     ENTRY(or_u64),
    1870     ENTRY(or_u64_locked),
    1871     ENTRY(xor_u64),
    1872     ENTRY(xor_u64_locked),
    1873     ENTRY(and_u64),
    1874     ENTRY(and_u64_locked),
    1875     ENTRY_PFN_CAST(cmp_u64,   PFNIEMAIMPLBINU64),
    1876     ENTRY_PFN_CAST(test_u64,  PFNIEMAIMPLBINU64),
    1877     ENTRY_PFN_CAST_EX(bt_u64, PFNIEMAIMPLBINU64, 1),
    1878     ENTRY_EX(btc_u64, 1),
    1879     ENTRY_EX(btc_u64_locked, 1),
    1880     ENTRY_EX(btr_u64, 1),
    1881     ENTRY_EX(btr_u64_locked, 1),
    1882     ENTRY_EX(bts_u64, 1),
    1883     ENTRY_EX(bts_u64_locked, 1),
    1884     ENTRY_AMD(  bsf_u64, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1885     ENTRY_INTEL(bsf_u64, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1886     ENTRY_AMD(  bsr_u64, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1887     ENTRY_INTEL(bsr_u64, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
    1888     ENTRY_AMD(  imul_two_u64, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
    1889     ENTRY_INTEL(imul_two_u64, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
    1890     ENTRY(adcx_u64),
    1891     ENTRY(adox_u64),
     1872    ENTRY_BIN_FIX(add_u64),
     1873    ENTRY_BIN(add_u64_locked),
     1874    ENTRY_BIN(adc_u64),
     1875    ENTRY_BIN(adc_u64_locked),
     1876    ENTRY_BIN(sub_u64),
     1877    ENTRY_BIN(sub_u64_locked),
     1878    ENTRY_BIN(sbb_u64),
     1879    ENTRY_BIN(sbb_u64_locked),
     1880    ENTRY_BIN(or_u64),
     1881    ENTRY_BIN(or_u64_locked),
     1882    ENTRY_BIN(xor_u64),
     1883    ENTRY_BIN(xor_u64_locked),
     1884    ENTRY_BIN(and_u64),
     1885    ENTRY_BIN(and_u64_locked),
     1886    ENTRY_BIN_PFN_CAST(cmp_u64,   PFNIEMAIMPLBINU64),
     1887    ENTRY_BIN_PFN_CAST(test_u64,  PFNIEMAIMPLBINU64),
     1888    ENTRY_BIN_PFN_CAST_EX(bt_u64, PFNIEMAIMPLBINU64, 1),
     1889    ENTRY_BIN_EX(btc_u64, 1),
     1890    ENTRY_BIN_EX(btc_u64_locked, 1),
     1891    ENTRY_BIN_EX(btr_u64, 1),
     1892    ENTRY_BIN_EX(btr_u64_locked, 1),
     1893    ENTRY_BIN_EX(bts_u64, 1),
     1894    ENTRY_BIN_EX(bts_u64_locked, 1),
     1895    ENTRY_BIN_AMD(  bsf_u64, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1896    ENTRY_BIN_INTEL(bsf_u64, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1897    ENTRY_BIN_AMD(  bsr_u64, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1898    ENTRY_BIN_INTEL(bsr_u64, X86_EFL_CF | X86_EFL_PF | X86_EFL_AF | X86_EFL_SF | X86_EFL_OF),
     1899    ENTRY_BIN_AMD(  imul_two_u64, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
     1900    ENTRY_BIN_INTEL(imul_two_u64, X86_EFL_PF | X86_EFL_AF | X86_EFL_ZF | X86_EFL_SF),
     1901    ENTRY_BIN(adcx_u64),
     1902    ENTRY_BIN(adox_u64),
    18921903};
    18931904TEST_BINARY_OPS(64, uint64_t, "%#018RX64", BINU64_TEST_T, g_aBinU64)
     
    19731984        static struct \
    19741985        { \
    1975             const char                         *pszName; \
    1976             FNIEMAIMPLXADDU ## a_cBits         *pfn; \
     1986            const char * const                  pszName; \
     1987            FNIEMAIMPLXADDU ## a_cBits * const  pfn; \
     1988            bool                                fCompressed; \
     1989            bool                                fBinary; \
    19771990            BINU ## a_cBits ## _TEST_T const   *paTests; \
    19781991            uint32_t const                     *pcTests; \
    1979         } const s_aFuncs[] = \
     1992        } s_aFuncs[] = \
    19801993        { \
    19811994            { "xadd_u" # a_cBits,            iemAImpl_xadd_u ## a_cBits, \
    1982               g_aTests_add_u ## a_cBits, &g_cTests_add_u ## a_cBits }, \
     1995              true, true, g_aTests_add_u ## a_cBits, &g_cbTests_add_u ## a_cBits }, \
    19831996            { "xadd_u" # a_cBits "8_locked", iemAImpl_xadd_u ## a_cBits ## _locked, \
    1984               g_aTests_add_u ## a_cBits, &g_cTests_add_u ## a_cBits }, \
     1997              true, true, g_aTests_add_u ## a_cBits, &g_cbTests_add_u ## a_cBits }, \
    19851998        }; \
    19861999        for (size_t iFn = 0; iFn < RT_ELEMENTS(s_aFuncs); iFn++) \
    19872000        { \
    1988             if (!SubTestAndCheckIfEnabled(s_aFuncs[iFn].pszName)) continue; \
    1989             uint32_t const                           cTests  = *s_aFuncs[iFn].pcTests; \
     2001            if (!SUBTEST_CHECK_IF_ENABLED_AND_DECOMPRESS(s_aFuncs[iFn])) continue; \
    19902002            BINU ## a_cBits ## _TEST_T const * const paTests = s_aFuncs[iFn].paTests; \
     2003            uint32_t const                           cTests  = *s_aFuncs[iFn].pcTests / sizeof(paTests[0]); \
    19912004            if (!cTests) RTTestSkipped(g_hTest, "no tests"); \
    19922005            for (uint32_t iTest = 0; iTest < cTests; iTest++) \
     
    20232036        static struct \
    20242037        { \
    2025             const char                         *pszName; \
    2026             FNIEMAIMPLCMPXCHGU ## a_cBits      *pfn; \
    2027             PFNIEMAIMPLBINU ## a_cBits          pfnSub; \
    2028             BINU ## a_cBits ## _TEST_T const   *paTests; \
    2029             uint32_t const                     *pcTests; \
    2030         } const s_aFuncs[] = \
     2038            const char * const                      pszName; \
     2039            FNIEMAIMPLCMPXCHGU ## a_cBits * const   pfn; \
     2040            PFNIEMAIMPLBINU ## a_cBits const        pfnSub; \
     2041            bool                                    fCompressed; \
     2042            bool                                    fBinary; \
     2043            BINU ## a_cBits ## _TEST_T const       *paTests; \
     2044            uint32_t const                         *pcTests; \
     2045        } s_aFuncs[] = \
    20312046        { \
    20322047            { "cmpxchg_u" # a_cBits,           iemAImpl_cmpxchg_u ## a_cBits, iemAImpl_sub_u ## a_cBits, \
    2033               g_aTests_cmp_u ## a_cBits, &g_cTests_cmp_u ## a_cBits }, \
     2048              true, true, g_aTests_cmp_u ## a_cBits, &g_cbTests_cmp_u ## a_cBits }, \
    20342049            { "cmpxchg_u" # a_cBits "_locked", iemAImpl_cmpxchg_u ## a_cBits ## _locked, iemAImpl_sub_u ## a_cBits, \
    2035               g_aTests_cmp_u ## a_cBits, &g_cTests_cmp_u ## a_cBits }, \
     2050              true, true, g_aTests_cmp_u ## a_cBits, &g_cbTests_cmp_u ## a_cBits }, \
    20362051        }; \
    20372052        for (size_t iFn = 0; iFn < RT_ELEMENTS(s_aFuncs); iFn++) \
    20382053        { \
    2039             if (!SubTestAndCheckIfEnabled(s_aFuncs[iFn].pszName)) continue; \
     2054            if (!SUBTEST_CHECK_IF_ENABLED_AND_DECOMPRESS(s_aFuncs[iFn])) continue; \
    20402055            BINU ## a_cBits ## _TEST_T const * const paTests = s_aFuncs[iFn].paTests; \
    2041             uint32_t const                           cTests  = *s_aFuncs[iFn].pcTests; \
     2056            uint32_t const                           cTests  = *s_aFuncs[iFn].pcTests / sizeof(paTests[0]); \
    20422057            if (!cTests) RTTestSkipped(g_hTest, "no tests"); \
    20432058            for (uint32_t iTest = 0; iTest < cTests; iTest++) \
     
    22772292static a_SubTestType a_aSubTests[] = \
    22782293{ \
    2279     ENTRY_AMD(shld_u ## a_cBits,   X86_EFL_OF | X86_EFL_CF), \
    2280     ENTRY_INTEL(shld_u ## a_cBits, X86_EFL_OF | X86_EFL_CF), \
    2281     ENTRY_AMD(shrd_u ## a_cBits,   X86_EFL_OF | X86_EFL_CF), \
    2282     ENTRY_INTEL(shrd_u ## a_cBits, X86_EFL_OF | X86_EFL_CF), \
     2294    ENTRY_BIN_AMD(shld_u ## a_cBits,   X86_EFL_OF | X86_EFL_CF), \
     2295    ENTRY_BIN_INTEL(shld_u ## a_cBits, X86_EFL_OF | X86_EFL_CF), \
     2296    ENTRY_BIN_AMD(shrd_u ## a_cBits,   X86_EFL_OF | X86_EFL_CF), \
     2297    ENTRY_BIN_INTEL(shrd_u ## a_cBits, X86_EFL_OF | X86_EFL_CF), \
    22832298}; \
    22842299\
     
    22932308        a_TestType const * const        paTests = a_aSubTests[iFn].paTests; \
    22942309        PFNIEMAIMPLSHIFTDBLU ## a_cBits pfn     = a_aSubTests[iFn].pfn; \
    2295         uint32_t const                  cTests  = *a_aSubTests[iFn].pcTests; \
     2310        uint32_t const                  cTests  = *a_aSubTests[iFn].pcTests / sizeof(paTests[0]); \
    22962311        uint32_t const                  cVars   = COUNT_VARIATIONS(a_aSubTests[iFn]); \
    22972312        if (!cTests) RTTestSkipped(g_hTest, "no tests"); \
     
    24092424static a_SubTestType g_aUnaryU ## a_cBits [] = \
    24102425{ \
    2411     ENTRY(inc_u ## a_cBits), \
    2412     ENTRY(inc_u ## a_cBits ## _locked), \
    2413     ENTRY(dec_u ## a_cBits), \
    2414     ENTRY(dec_u ## a_cBits ## _locked), \
    2415     ENTRY(not_u ## a_cBits), \
    2416     ENTRY(not_u ## a_cBits ## _locked), \
    2417     ENTRY(neg_u ## a_cBits), \
    2418     ENTRY(neg_u ## a_cBits ## _locked), \
     2426    ENTRY_BIN(inc_u ## a_cBits), \
     2427    ENTRY_BIN(inc_u ## a_cBits ## _locked), \
     2428    ENTRY_BIN(dec_u ## a_cBits), \
     2429    ENTRY_BIN(dec_u ## a_cBits ## _locked), \
     2430    ENTRY_BIN(not_u ## a_cBits), \
     2431    ENTRY_BIN(not_u ## a_cBits ## _locked), \
     2432    ENTRY_BIN(neg_u ## a_cBits), \
     2433    ENTRY_BIN(neg_u ## a_cBits ## _locked), \
    24192434}; \
    24202435\
     
    24282443            continue; \
    24292444        a_TestType const * const paTests = g_aUnaryU ## a_cBits[iFn].paTests; \
    2430         uint32_t const           cTests  = *g_aUnaryU ## a_cBits[iFn].pcTests; \
     2445        uint32_t const           cTests  = *g_aUnaryU ## a_cBits[iFn].pcTests / sizeof(paTests[0]); \
    24312446        if (!cTests) RTTestSkipped(g_hTest, "no tests"); \
    24322447        for (uint32_t iTest = 0; iTest < cTests; iTest++ ) \
     
    25552570static a_SubTestType a_aSubTests[] = \
    25562571{ \
    2557     ENTRY_AMD(  rol_u ## a_cBits, X86_EFL_OF), \
    2558     ENTRY_INTEL(rol_u ## a_cBits, X86_EFL_OF), \
    2559     ENTRY_AMD(  ror_u ## a_cBits, X86_EFL_OF), \
    2560     ENTRY_INTEL(ror_u ## a_cBits, X86_EFL_OF), \
    2561     ENTRY_AMD(  rcl_u ## a_cBits, X86_EFL_OF), \
    2562     ENTRY_INTEL(rcl_u ## a_cBits, X86_EFL_OF), \
    2563     ENTRY_AMD(  rcr_u ## a_cBits, X86_EFL_OF), \
    2564     ENTRY_INTEL(rcr_u ## a_cBits, X86_EFL_OF), \
    2565     ENTRY_AMD(  shl_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
    2566     ENTRY_INTEL(shl_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
    2567     ENTRY_AMD(  shr_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
    2568     ENTRY_INTEL(shr_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
    2569     ENTRY_AMD(  sar_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
    2570     ENTRY_INTEL(sar_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
     2572    ENTRY_BIN_AMD(  rol_u ## a_cBits, X86_EFL_OF), \
     2573    ENTRY_BIN_INTEL(rol_u ## a_cBits, X86_EFL_OF), \
     2574    ENTRY_BIN_AMD(  ror_u ## a_cBits, X86_EFL_OF), \
     2575    ENTRY_BIN_INTEL(ror_u ## a_cBits, X86_EFL_OF), \
     2576    ENTRY_BIN_AMD(  rcl_u ## a_cBits, X86_EFL_OF), \
     2577    ENTRY_BIN_INTEL(rcl_u ## a_cBits, X86_EFL_OF), \
     2578    ENTRY_BIN_AMD(  rcr_u ## a_cBits, X86_EFL_OF), \
     2579    ENTRY_BIN_INTEL(rcr_u ## a_cBits, X86_EFL_OF), \
     2580    ENTRY_BIN_AMD(  shl_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
     2581    ENTRY_BIN_INTEL(shl_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
     2582    ENTRY_BIN_AMD(  shr_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
     2583    ENTRY_BIN_INTEL(shr_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
     2584    ENTRY_BIN_AMD(  sar_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
     2585    ENTRY_BIN_INTEL(sar_u ## a_cBits, X86_EFL_OF | X86_EFL_AF), \
    25712586}; \
    25722587\
     
    25812596        PFNIEMAIMPLSHIFTU ## a_cBits pfn     = a_aSubTests[iFn].pfn; \
    25822597        a_TestType const * const     paTests = a_aSubTests[iFn].paTests; \
    2583         uint32_t const               cTests  = *a_aSubTests[iFn].pcTests; \
     2598        uint32_t const               cTests  = *a_aSubTests[iFn].pcTests / sizeof(paTests[0]); \
    25842599        uint32_t const               cVars   = COUNT_VARIATIONS(a_aSubTests[iFn]); \
    25852600        if (!cTests) RTTestSkipped(g_hTest, "no tests"); \
     
    26622677static INT_MULDIV_U8_T g_aMulDivU8[] =
    26632678{
    2664     ENTRY_AMD_EX(mul_u8,    X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF,
    2665                             X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF),
    2666     ENTRY_INTEL_EX(mul_u8,  X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0),
    2667     ENTRY_AMD_EX(imul_u8,   X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF,
    2668                             X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF),
    2669     ENTRY_INTEL_EX(imul_u8, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0),
    2670     ENTRY_AMD_EX(div_u8,    X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0),
    2671     ENTRY_INTEL_EX(div_u8,  X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0),
    2672     ENTRY_AMD_EX(idiv_u8,   X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0),
    2673     ENTRY_INTEL_EX(idiv_u8, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0),
     2679    ENTRY_BIN_AMD_EX(mul_u8,    X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF,
     2680                                X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF),
     2681    ENTRY_BIN_INTEL_EX(mul_u8,  X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0),
     2682    ENTRY_BIN_AMD_EX(imul_u8,   X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF,
     2683                                X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF),
     2684    ENTRY_BIN_INTEL_EX(imul_u8, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0),
     2685    ENTRY_BIN_AMD_EX(div_u8,    X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0),
     2686    ENTRY_BIN_INTEL_EX(div_u8,  X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0),
     2687    ENTRY_BIN_AMD_EX(idiv_u8,   X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0),
     2688    ENTRY_BIN_INTEL_EX(idiv_u8, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0),
    26742689};
    26752690
     
    27252740            continue; \
    27262741        MULDIVU8_TEST_T const * const paTests = g_aMulDivU8[iFn].paTests;
    2727         uint32_t const                cTests  = *g_aMulDivU8[iFn].pcTests;
     2742        uint32_t const                cTests  = *g_aMulDivU8[iFn].pcTests / sizeof(paTests[0]);
    27282743        uint32_t const                fEflIgn = g_aMulDivU8[iFn].uExtra;
    27292744        PFNIEMAIMPLMULDIVU8           pfn     = g_aMulDivU8[iFn].pfn;
     
    28152830static a_SubTestType a_aSubTests [] = \
    28162831{ \
    2817     ENTRY_AMD_EX(mul_u ## a_cBits,    X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0), \
    2818     ENTRY_INTEL_EX(mul_u ## a_cBits,  X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0), \
    2819     ENTRY_AMD_EX(imul_u ## a_cBits,   X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0), \
    2820     ENTRY_INTEL_EX(imul_u ## a_cBits, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0), \
    2821     ENTRY_AMD_EX(div_u ## a_cBits,    X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0), \
    2822     ENTRY_INTEL_EX(div_u ## a_cBits,  X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0), \
    2823     ENTRY_AMD_EX(idiv_u ## a_cBits,   X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0), \
    2824     ENTRY_INTEL_EX(idiv_u ## a_cBits, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0), \
     2832    ENTRY_BIN_AMD_EX(mul_u ## a_cBits,    X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0), \
     2833    ENTRY_BIN_INTEL_EX(mul_u ## a_cBits,  X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0), \
     2834    ENTRY_BIN_AMD_EX(imul_u ## a_cBits,   X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0), \
     2835    ENTRY_BIN_INTEL_EX(imul_u ## a_cBits, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF, 0), \
     2836    ENTRY_BIN_AMD_EX(div_u ## a_cBits,    X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0), \
     2837    ENTRY_BIN_INTEL_EX(div_u ## a_cBits,  X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0), \
     2838    ENTRY_BIN_AMD_EX(idiv_u ## a_cBits,   X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0), \
     2839    ENTRY_BIN_INTEL_EX(idiv_u ## a_cBits, X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_CF | X86_EFL_OF, 0), \
    28252840}; \
    28262841\
     
    28342849            continue; \
    28352850        a_TestType const * const      paTests = a_aSubTests[iFn].paTests; \
    2836         uint32_t const                cTests  = *a_aSubTests[iFn].pcTests; \
     2851        uint32_t const                cTests  = *a_aSubTests[iFn].pcTests / sizeof(paTests[0]); \
    28372852        uint32_t const                fEflIgn = a_aSubTests[iFn].uExtra; \
    28382853        PFNIEMAIMPLMULDIVU ## a_cBits pfn     = a_aSubTests[iFn].pfn; \
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