VirtualBox

Changeset 81071 in vbox for trunk/src/VBox/Runtime/testcase


Ignore:
Timestamp:
Sep 30, 2019 10:17:28 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
133675
Message:

SUPDrv,IPRT,VMM: Support host APIC ID above 256 in GIP. (Only tested on 4 core intel.) bugref:9501

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp

    r76553 r81071  
    204204    CHECKVAL(uECX2, s.uECX, "%x");
    205205    CHECKVAL(uEDX2, s.uEDX, "%x");
     206
     207    /*
     208     * Check the extended APIC stuff.
     209     */
     210    uint32_t idExtApic;
     211    if (ASMCpuId_EAX(0) >= 0xb)
     212    {
     213        uint8_t idApic = ASMGetApicId();
     214        do
     215        {
     216            uEAX2 = uEBX2 = uECX2 = uEDX2 = UINT32_C(0x50486744);
     217            ASMCpuIdExSlow(0xb, 0, 0, 0, &uEAX2, &uEBX2, &uECX2, &uEDX2);
     218            idExtApic = ASMGetApicIdExt0B();
     219        } while (ASMGetApicId() != idApic);
     220
     221        CHECKVAL(uEDX2, idExtApic, "%x");
     222        if (idApic != (uint8_t)idExtApic)
     223            RTTestIFailed("ASMGetApicIdExt0B() -> %#x vs ASMGetApicId() -> %#x", idExtApic, idApic);
     224    }
     225    if (ASMCpuId_EAX(UINT32_C(0x80000000)) >= UINT32_C(0x8000001E))
     226    {
     227        uint8_t idApic = ASMGetApicId();
     228        do
     229        {
     230            uEAX2 = uEBX2 = uECX2 = uEDX2 = UINT32_C(0x50486744);
     231            ASMCpuIdExSlow(0x8000001e, 0, 0, 0, &uEAX2, &uEBX2, &uECX2, &uEDX2);
     232            idExtApic = ASMGetApicIdExt8000001E();
     233        } while (ASMGetApicId() != idApic);
     234        CHECKVAL(uEAX2, idExtApic, "%x");
     235        if (idApic != (uint8_t)idExtApic)
     236            RTTestIFailed("ASMGetApicIdExt8000001E() -> %#x vs ASMGetApicId() -> %#x", idExtApic, idApic);
     237    }
    206238
    207239    /*
     
    18821914#if !defined(RT_OS_DARWIN) && !defined(GCC44_32BIT_PIC) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
    18831915    BENCH(s_u8 = ASMGetApicId(),                "ASMGetApicId");
     1916    BENCH(s_u32 = ASMGetApicIdExt0B(),          "ASMGetApicIdExt0B");
     1917    BENCH(s_u32 = ASMGetApicIdExt8000001E(),    "ASMGetApicIdExt8000001E");
    18841918#endif
    18851919#if !defined(GCC44_32BIT_PIC) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
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