VirtualBox

Changeset 95342 in vbox


Ignore:
Timestamp:
Jun 22, 2022 1:48:46 PM (2 years ago)
Author:
vboxsync
Message:

ValKit/bs3-cpu-instr-2: Added simple BZHI, PDEP and PEXT tests. bugref:9898

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.c

    r95340 r95342  
    139139extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_bextr_EAX_EBX_ECX_icebp);
    140140extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_bextr_EAX_FSxBX_ECX_icebp);
     141
     142extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_bzhi_RAX_RBX_RCX_icebp);
     143extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_bzhi_RAX_FSxBX_RCX_icebp);
     144extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_bzhi_EAX_EBX_ECX_icebp);
     145extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_bzhi_EAX_FSxBX_ECX_icebp);
     146
     147extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_pdep_RAX_RCX_RBX_icebp);
     148extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_pdep_RAX_RCX_FSxBX_icebp);
     149extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_pdep_EAX_ECX_EBX_icebp);
     150extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_pdep_EAX_ECX_FSxBX_icebp);
     151
     152extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_pext_RAX_RCX_RBX_icebp);
     153extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_pext_RAX_RCX_FSxBX_icebp);
     154extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_pext_EAX_ECX_EBX_icebp);
     155extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_pext_EAX_ECX_FSxBX_icebp);
    141156
    142157extern FNBS3FAR     BS3_CMN_NM(bs3CpuInstr2_shlx_RAX_RBX_RCX_icebp);
     
    808823                    if (   (TrapFrame.Ctx.rflags.u16 & paTests[i].fEflCheck)
    809824                        != (paTests[i].paSubTests[k].fEflOut & paTests[i].fEflCheck))
    810                         Bs3TestFailedF("Expected EFLAGS = %#06RX64, got %#06RX64 (output)",
     825                        Bs3TestFailedF("Expected EFLAGS = %#06RX32, got %#06RX32 (output)",
    811826                                       paTests[i].paSubTests[k].fEflOut & paTests[i].fEflCheck,
    812827                                       TrapFrame.Ctx.rflags.u16 & paTests[i].fEflCheck);
     
    14541469                if (   (TrapFrame.Ctx.rflags.u16 & ANDN_CHECK_EFLAGS)
    14551470                    != ((fOkay ? s_aTests[i].fEFlags : Ctx.rflags.u16) & ANDN_CHECK_EFLAGS))
    1456                     Bs3TestFailedF("Expected EFLAGS = %#06RX64, got %#06RX64 (output)",
     1471                    Bs3TestFailedF("Expected EFLAGS = %#06RX32, got %#06RX32 (output)",
    14571472                                   (fOkay ? s_aTests[i].fEFlags : Ctx.rflags.u16) & ANDN_CHECK_EFLAGS, TrapFrame.Ctx.rflags.u16 & ANDN_CHECK_EFLAGS);
    14581473                if (   (TrapFrame.Ctx.rflags.u16 & ~(ANDN_CHECK_EFLAGS | ANDN_IGNORE_EFLAGS) & X86_EFL_STATUS_BITS)
    14591474                    != (Ctx.rflags.u16           & ~(ANDN_CHECK_EFLAGS | ANDN_IGNORE_EFLAGS) & X86_EFL_STATUS_BITS))
    1460                     Bs3TestFailedF("Expected EFLAGS = %#06RX64, got %#06RX64 (immutable)",
     1475                    Bs3TestFailedF("Expected EFLAGS = %#06RX32, got %#06RX32 (immutable)",
    14611476                                   Ctx.rflags.u16           & ~(ANDN_CHECK_EFLAGS | ANDN_IGNORE_EFLAGS) & X86_EFL_STATUS_BITS,
    14621477                                   TrapFrame.Ctx.rflags.u16 & ~(ANDN_CHECK_EFLAGS | ANDN_IGNORE_EFLAGS) & X86_EFL_STATUS_BITS);
     
    15911606                    if (   (TrapFrame.Ctx.rflags.u16 & fEflCheck)
    15921607                        != ((fOkay ? paTests[i].paSubTests[k].fEflOut : Ctx.rflags.u16) & fEflCheck))
    1593                         Bs3TestFailedF("Expected EFLAGS = %#06RX64, got %#06RX64 (output)",
     1608                        Bs3TestFailedF("Expected EFLAGS = %#06RX32, got %#06RX32 (output)",
    15941609                                       (fOkay ? paTests[i].paSubTests[k].fEflOut : Ctx.rflags.u16) & fEflCheck,
    15951610                                       TrapFrame.Ctx.rflags.u16 & fEflCheck);
    15961611                    if (   (TrapFrame.Ctx.rflags.u16 & ~(fEflCheck | fEflIgnore) & X86_EFL_STATUS_BITS)
    15971612                        != (Ctx.rflags.u16           & ~(fEflCheck | fEflIgnore) & X86_EFL_STATUS_BITS))
    1598                         Bs3TestFailedF("Expected EFLAGS = %#06RX64, got %#06RX64 (immutable)",
     1613                        Bs3TestFailedF("Expected EFLAGS = %#06RX32, got %#06RX32 (immutable)",
    15991614                                       Ctx.rflags.u16           & ~(fEflCheck | fEflIgnore) & X86_EFL_STATUS_BITS,
    16001615                                       TrapFrame.Ctx.rflags.u16 & ~(fEflCheck | fEflIgnore) & X86_EFL_STATUS_BITS);
     
    16531668    return bs3CpuInstr2_Common_Gy_Ey_By(bMode, s_aTests, RT_ELEMENTS(s_aTests), X86_CPUID_STEXT_FEATURE_EBX_BMI1,
    16541669                                        X86_EFL_STATUS_BITS, X86_EFL_AF | X86_EFL_SF | X86_EFL_PF);
     1670}
     1671
     1672
     1673BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_bzhi)(uint8_t bMode)
     1674{
     1675    /* 64 bits register width (32 bits in 32- and 16-bit modes): */
     1676    static BS3CPUINSTR2_SUBTEST_Gy_Ey_By_T const s_aSubTests64[] =
     1677    {
     1678        {   0,                  0,                      /* -> */ 0,                     X86_EFL_ZF },
     1679        {   0,                  ~(RTCCUINTXREG)255,     /* -> */ 0,                     X86_EFL_ZF },
     1680        {   0,                  64,                     /* -> */ 0,                     X86_EFL_ZF | X86_EFL_CF },
     1681        {   ~(RTCCUINTXREG)0,   64,                     /* -> */ ~(RTCCUINTXREG)0,      X86_EFL_CF | X86_EFL_SF },
     1682        {   ~(RTCCUINTXREG)0,   63,
     1683        /* -> */ ARCH_BITS >= 64 ? ~(RTCCUINTXREG)0 >> 1 : ~(RTCCUINTXREG)0, ARCH_BITS >= 64 ? 0 : X86_EFL_CF | X86_EFL_SF },
     1684        {   ~(RTCCUINTXREG)0 << 31 | UINT32_C(0x63849607), 24, /* -> */ UINT32_C(0x00849607), 0 },
     1685        {   ~(RTCCUINTXREG)0 << 31 | UINT32_C(0x63849607), 33,
     1686        /* -> */ ARCH_BITS >= 64 ? UINT64_C(0x1e3849607) : UINT32_C(0xe3849607), ARCH_BITS >= 64 ? 0 : X86_EFL_CF | X86_EFL_SF },
     1687    };
     1688
     1689    /* 32-bit register width */
     1690    static BS3CPUINSTR2_SUBTEST_Gy_Ey_By_T const s_aSubTests32[] =
     1691    {
     1692        {   0,                  0,                      /* -> */ 0,                     X86_EFL_ZF },
     1693        {   0,                  ~(RTCCUINTXREG)255,     /* -> */ 0,                     X86_EFL_ZF },
     1694        {   0,                  32,                     /* -> */ 0,                     X86_EFL_ZF | X86_EFL_CF },
     1695        {   ~(RTCCUINTXREG)0,   32,                     /* -> */ UINT32_MAX,            X86_EFL_CF | X86_EFL_SF },
     1696        {   ~(RTCCUINTXREG)0,   31,                     /* -> */ UINT32_MAX >> 1,       0 },
     1697        {   UINT32_C(0x1230fd34), 15,                   /* -> */ UINT32_C(0x00007d34),  0 },
     1698    };
     1699
     1700    static BS3CPUINSTR2_TEST_Gy_Ey_By_T const s_aTests[] =
     1701    {
     1702        { BS3_CMN_NM(bs3CpuInstr2_bzhi_RAX_RBX_RCX_icebp),   false, 5, RT_ELEMENTS(s_aSubTests64), s_aSubTests64 },
     1703        { BS3_CMN_NM(bs3CpuInstr2_bzhi_RAX_FSxBX_RCX_icebp), true,  6, RT_ELEMENTS(s_aSubTests64), s_aSubTests64 },
     1704        { BS3_CMN_NM(bs3CpuInstr2_bzhi_EAX_EBX_ECX_icebp),   false, 5, RT_ELEMENTS(s_aSubTests32), s_aSubTests32 },
     1705        { BS3_CMN_NM(bs3CpuInstr2_bzhi_EAX_FSxBX_ECX_icebp), true,  6, RT_ELEMENTS(s_aSubTests32), s_aSubTests32 },
     1706    };
     1707    return bs3CpuInstr2_Common_Gy_Ey_By(bMode, s_aTests, RT_ELEMENTS(s_aTests), X86_CPUID_STEXT_FEATURE_EBX_BMI2,
     1708                                        X86_EFL_STATUS_BITS, 0);
     1709}
     1710
     1711
     1712/** @note This is a Gy_By_Ey format instruction, so we're switching the two
     1713 *        source registers around when calling bs3CpuInstr2_Common_Gy_Ey_By.
     1714 *        Sorry for the confusion, but it saves some unnecessary code dup. */
     1715BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_pdep)(uint8_t bMode)
     1716{
     1717    /* 64 bits register width (32 bits in 32- and 16-bit modes): */
     1718    static BS3CPUINSTR2_SUBTEST_Gy_Ey_By_T const s_aSubTests64[] =
     1719    {   /*  Mask (RBX/[FS:xBX]), source=RCX */
     1720        {   0,                  0,                      /* -> */ 0,                     0 },
     1721        {   0,                  ~(RTCCUINTXREG)0,       /* -> */ 0,                     0 },
     1722        {   ~(RTCCUINTXREG)0,   0,                      /* -> */ 0,                     0 },
     1723        {   ~(RTCCUINTXREG)0,   ~(RTCCUINTXREG)0,       /* -> */ ~(RTCCUINTXREG)0,      0 },
     1724#if ARCH_BITS >= 64
     1725        {   UINT64_C(0x3586049947589201), ~(RTCCUINTXREG)0,         /* -> */ UINT64_C(0x3586049947589201),  0 },
     1726        {   UINT64_C(0x3586049947589201), ~(RTCCUINTXREG)7,         /* -> */ UINT64_C(0x3586049947588000),  0 },
     1727#endif
     1728        {           UINT32_C(0x47589201), ~(RTCCUINTXREG)0,         /* -> */         UINT32_C(0x47589201),  0 },
     1729        {           UINT32_C(0x47589201), ~(RTCCUINTXREG)7,         /* -> */         UINT32_C(0x47588000),  0 },
     1730    };
     1731
     1732    /* 32-bit register width */
     1733    static BS3CPUINSTR2_SUBTEST_Gy_Ey_By_T const s_aSubTests32[] =
     1734    {   /*  Mask (EBX/[FS:xBX]), source=ECX */
     1735        {   0,                  0,                      /* -> */ 0,                     0 },
     1736        {   0,                  ~(RTCCUINTXREG)0,       /* -> */ 0,                     0 },
     1737        {   ~(RTCCUINTXREG)0,   0,                      /* -> */ 0,                     0 },
     1738        {   ~(RTCCUINTXREG)0,   ~(RTCCUINTXREG)0,       /* -> */ UINT32_MAX,            0 },
     1739        {   UINT32_C(0x01010101), ~(RTCCUINTXREG)0,     /* -> */ UINT32_C(0x01010101),  0 },
     1740        {   UINT32_C(0x01010101), ~(RTCCUINTXREG)3,     /* -> */ UINT32_C(0x01010000),  0 },
     1741        {   UINT32_C(0x47589201), ~(RTCCUINTXREG)0,     /* -> */ UINT32_C(0x47589201),  0 },
     1742    };
     1743
     1744    static BS3CPUINSTR2_TEST_Gy_Ey_By_T const s_aTests[] =
     1745    {
     1746        { BS3_CMN_NM(bs3CpuInstr2_pdep_RAX_RCX_RBX_icebp),   false, 5, RT_ELEMENTS(s_aSubTests64), s_aSubTests64 },
     1747        { BS3_CMN_NM(bs3CpuInstr2_pdep_RAX_RCX_FSxBX_icebp), true,  6, RT_ELEMENTS(s_aSubTests64), s_aSubTests64 },
     1748        { BS3_CMN_NM(bs3CpuInstr2_pdep_EAX_ECX_EBX_icebp),   false, 5, RT_ELEMENTS(s_aSubTests32), s_aSubTests32 },
     1749        { BS3_CMN_NM(bs3CpuInstr2_pdep_EAX_ECX_FSxBX_icebp), true,  6, RT_ELEMENTS(s_aSubTests32), s_aSubTests32 },
     1750    };
     1751    return bs3CpuInstr2_Common_Gy_Ey_By(bMode, s_aTests, RT_ELEMENTS(s_aTests), X86_CPUID_STEXT_FEATURE_EBX_BMI2, 0, 0);
     1752}
     1753
     1754
     1755/** @note Same note as for bs3CpuInstr2_pdep */
     1756BS3_DECL_FAR(uint8_t) BS3_CMN_NM(bs3CpuInstr2_pext)(uint8_t bMode)
     1757{
     1758    /* 64 bits register width (32 bits in 32- and 16-bit modes): */
     1759    static BS3CPUINSTR2_SUBTEST_Gy_Ey_By_T const s_aSubTests64[] =
     1760    {   /*  Mask (RBX/[FS:xBX]), source=RCX */
     1761        {   0,                  0,                      /* -> */ 0,                     0 },
     1762        {   0,                  ~(RTCCUINTXREG)0,       /* -> */ 0,                     0 },
     1763        {   ~(RTCCUINTXREG)0,   0,                      /* -> */ 0,                     0 },
     1764        {   ~(RTCCUINTXREG)0,   ~(RTCCUINTXREG)0,       /* -> */ ~(RTCCUINTXREG)0,      0 },
     1765#if ARCH_BITS >= 64
     1766        {   UINT64_C(0x3586049947589201), ~(RTCCUINTXREG)0,         /* -> */ UINT64_C(0x00000000007fffff),  0 },
     1767        {   UINT64_C(0x3586049947589201), ~(RTCCUINTXREG)7,         /* -> */ UINT64_C(0x00000000007ffffe),  0 },
     1768#endif
     1769        {           UINT32_C(0x47589201), ~(RTCCUINTXREG)0,         /* -> */         UINT32_C(0x000007ff),  0 },
     1770        {           UINT32_C(0x47589201), ~(RTCCUINTXREG)7,         /* -> */         UINT32_C(0x000007fe),  0 },
     1771    };
     1772
     1773    /* 32-bit register width */
     1774    static BS3CPUINSTR2_SUBTEST_Gy_Ey_By_T const s_aSubTests32[] =
     1775    {   /*  Mask (EBX/[FS:xBX]), source=ECX */
     1776        {   0,                  0,                      /* -> */ 0,                     0 },
     1777        {   0,                  ~(RTCCUINTXREG)0,       /* -> */ 0,                     0 },
     1778        {   ~(RTCCUINTXREG)0,   0,                      /* -> */ 0,                     0 },
     1779        {   ~(RTCCUINTXREG)0,   ~(RTCCUINTXREG)0,       /* -> */ UINT32_MAX,            0 },
     1780        {   UINT32_C(0x01010101), ~(RTCCUINTXREG)0,     /* -> */ UINT32_C(0x0000000f),  0 },
     1781        {   UINT32_C(0x01010101), ~(RTCCUINTXREG)3,     /* -> */ UINT32_C(0x0000000e),  0 },
     1782        {   UINT32_C(0x47589201), ~(RTCCUINTXREG)0,     /* -> */ UINT32_C(0x000007ff),  0 },
     1783        {   UINT32_C(0x47589201), ~(RTCCUINTXREG)7,     /* -> */ UINT32_C(0x000007fe),  0 },
     1784    };
     1785
     1786    static BS3CPUINSTR2_TEST_Gy_Ey_By_T const s_aTests[] =
     1787    {
     1788        { BS3_CMN_NM(bs3CpuInstr2_pext_RAX_RCX_RBX_icebp),   false, 5, RT_ELEMENTS(s_aSubTests64), s_aSubTests64 },
     1789        { BS3_CMN_NM(bs3CpuInstr2_pext_RAX_RCX_FSxBX_icebp), true,  6, RT_ELEMENTS(s_aSubTests64), s_aSubTests64 },
     1790        { BS3_CMN_NM(bs3CpuInstr2_pext_EAX_ECX_EBX_icebp),   false, 5, RT_ELEMENTS(s_aSubTests32), s_aSubTests32 },
     1791        { BS3_CMN_NM(bs3CpuInstr2_pext_EAX_ECX_FSxBX_icebp), true,  6, RT_ELEMENTS(s_aSubTests32), s_aSubTests32 },
     1792    };
     1793    return bs3CpuInstr2_Common_Gy_Ey_By(bMode, s_aTests, RT_ELEMENTS(s_aTests), X86_CPUID_STEXT_FEATURE_EBX_BMI2, 0, 0);
    16551794}
    16561795
     
    18662005                    if (   (TrapFrame.Ctx.rflags.u16 & fEflCheck)
    18672006                        != ((fOkay ? paTests[i].paSubTests[k].fEflOut : Ctx.rflags.u16) & fEflCheck))
    1868                         Bs3TestFailedF("Expected EFLAGS = %#06RX64, got %#06RX64 (output)",
     2007                        Bs3TestFailedF("Expected EFLAGS = %#06RX32, got %#06RX32 (output)",
    18692008                                       (fOkay ? paTests[i].paSubTests[k].fEflOut : Ctx.rflags.u16) & fEflCheck,
    18702009                                       TrapFrame.Ctx.rflags.u16 & fEflCheck);
    18712010                    if (   (TrapFrame.Ctx.rflags.u16 & ~(fEflCheck | fEflIgnore) & X86_EFL_STATUS_BITS)
    18722011                        != (Ctx.rflags.u16           & ~(fEflCheck | fEflIgnore) & X86_EFL_STATUS_BITS))
    1873                         Bs3TestFailedF("Expected EFLAGS = %#06RX64, got %#06RX64 (immutable)",
     2012                        Bs3TestFailedF("Expected EFLAGS = %#06RX32, got %#06RX32 (immutable)",
    18742013                                       Ctx.rflags.u16           & ~(fEflCheck | fEflIgnore) & X86_EFL_STATUS_BITS,
    18752014                                       TrapFrame.Ctx.rflags.u16 & ~(fEflCheck | fEflIgnore) & X86_EFL_STATUS_BITS);
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2-template.mac

    r95340 r95342  
    269269
    270270;
    271 ; BEXTR / SHLX / SARX / SHRX - BMI1
    272 ; These are encoded in the exact same way, only the VEX.pp differs.
     271; BEXTR / SHLX / SARX / SHRX - BMI1 (opcode f7h)
     272; BZHI                       - BMI2 (opcode f5h)
     273;
     274; @param %1 instruction
     275; @param %2 opcode
     276; @param %3 prefix
    273277;
    274278%ifndef SHLX_SARX_SHRX_DEFINED
    275279%define SHLX_SARX_SHRX_DEFINED
    276 %macro SHLX_SARX_SHRX 2
     280%macro SHLX_SARX_SHRX 3
    277281
    278282BS3_PROC_BEGIN_CMN bs3CpuInstr2_ %+ %1 %+ _RAX_RBX_RCX_icebp, BS3_PBC_NEAR
     
    280284        %1      rax, rbx, rcx                   ; SHLX=C4E2F1F7C3
    281285 %else
    282         db      0C4h,0E2h,0F0h|%2,0F7h,0C3h     ; 32-bit & 16-bit ignores VEX.W=1 (10980xe)
     286        db      0C4h,0E2h,0F0h|%3,%2,0C3h       ; 32-bit & 16-bit ignores VEX.W=1 (10980xe)
    283287 %endif
    284288.again:
     
    298302        %1      rax, [fs:rbx], rcx              ; SHLX=64C4E2F1F703
    299303 %elif TMPL_BITS == 32
    300         db      064h,0C4h,0E2h,0F0h|%2,0F7h,003h
     304        db      064h,0C4h,0E2h,0F0h|%3,%2,003h
    301305 %else
    302         db      064h,0C4h,0E2h,0F0h|%2,0F7h,007h
     306        db      064h,0C4h,0E2h,0F0h|%3,%2,007h
    303307 %endif
    304308.again:
     
    317321%endif
    318322
    319 SHLX_SARX_SHRX bextr, 0 ; none
    320 SHLX_SARX_SHRX shlx,  1 ; 66h
    321 SHLX_SARX_SHRX sarx,  2 ; f3h
    322 SHLX_SARX_SHRX shrx,  3 ; f2h
     323SHLX_SARX_SHRX bextr, 0f7h, 0 ; none
     324SHLX_SARX_SHRX shlx,  0f7h, 1 ; 66h
     325SHLX_SARX_SHRX sarx,  0f7h, 2 ; f3h
     326SHLX_SARX_SHRX shrx,  0f7h, 3 ; f2h
     327SHLX_SARX_SHRX bzhi,  0f5h, 0 ; none
     328
     329;
     330; PPEP / PEXT - BMI2 (opcode f5h)
     331;
     332; @param %1 instruction
     333; @param %2 opcode
     334; @param %3 prefix
     335;
     336%ifndef PDEP_PEXT_DEFINED
     337%define PDEP_PEXT_DEFINED
     338%macro PDEP_PEXT_ 3
     339
     340BS3_PROC_BEGIN_CMN bs3CpuInstr2_ %+ %1 %+ _RAX_RCX_RBX_icebp, BS3_PBC_NEAR
     341 %if TMPL_BITS == 64
     342        %1      rax, rcx, rbx
     343 %else
     344        db      0C4h,0E2h,0F0h|%3,%2,0C3h       ; 32-bit & 16-bit ignores VEX.W=1 (10980xe)
     345 %endif
     346.again:
     347        icebp
     348        jmp     .again
     349BS3_PROC_END_CMN   bs3CpuInstr2_ %+ %1 %+ _RAX_RCX_RBX_icebp
     350
     351BS3_PROC_BEGIN_CMN bs3CpuInstr2_ %+ %1 %+ _EAX_ECX_EBX_icebp, BS3_PBC_NEAR
     352        %1      eax, ecx, ebx
     353.again:
     354        icebp
     355        jmp     .again
     356BS3_PROC_END_CMN   bs3CpuInstr2_ %+ %1 %+ _EAX_ECX_EBX_icebp
     357
     358BS3_PROC_BEGIN_CMN bs3CpuInstr2_ %+ %1 %+ _RAX_RCX_FSxBX_icebp, BS3_PBC_NEAR
     359 %if TMPL_BITS == 64
     360        %1      rax, rcx, [fs:rbx]
     361 %elif TMPL_BITS == 32
     362        db      064h,0C4h,0E2h,0F0h|%3,%2,003h
     363 %else
     364        db      064h,0C4h,0E2h,0F0h|%3,%2,007h
     365 %endif
     366.again:
     367        icebp
     368        jmp     .again
     369BS3_PROC_END_CMN   bs3CpuInstr2_ %+ %1 %+ _RAX_RCX_FSxBX_icebp
     370
     371BS3_PROC_BEGIN_CMN bs3CpuInstr2_ %+ %1 %+ _EAX_ECX_FSxBX_icebp, BS3_PBC_NEAR
     372        %1      eax, ecx, [fs:xBX]
     373.again:
     374        icebp
     375        jmp     .again
     376BS3_PROC_END_CMN   bs3CpuInstr2_ %+ %1 %+ _EAX_ECX_FSxBX_icebp
     377
     378%endmacro
     379%endif
     380
     381PDEP_PEXT_ pext,  0f5h, 2 ; f3h
     382PDEP_PEXT_ pdep,  0f5h, 3 ; f2h
    323383
    324384;
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-2.c

    r95340 r95342  
    4646BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_blsmsk);
    4747BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_blsi);
     48BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_bzhi);
     49BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_pdep);
     50BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_pext);
    4851BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_rorx);
    4952BS3TESTMODE_PROTOTYPES_CMN(bs3CpuInstr2_shlx);
     
    8083#endif
    8184#if 1 /* BMI2 */
     85    BS3TESTMODEENTRY_CMN("bzhi",  bs3CpuInstr2_bzhi),
     86    BS3TESTMODEENTRY_CMN("pdep",  bs3CpuInstr2_pdep),
     87    BS3TESTMODEENTRY_CMN("pext",  bs3CpuInstr2_pext),
    8288    BS3TESTMODEENTRY_CMN("rorx",  bs3CpuInstr2_rorx),
    8389    BS3TESTMODEENTRY_CMN("shlx",  bs3CpuInstr2_shlx),
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