VirtualBox

Changeset 54812 in vbox


Ignore:
Timestamp:
Mar 17, 2015 3:32:35 PM (10 years ago)
Author:
vboxsync
Message:

cpuid dumping updates.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp

    r54799 r54812  
    43554355
    43564356
     4357static PCCPUMCPUIDLEAF cpumR3CpuIdInfoRawRange(PCDBGFINFOHLP pHlp, PCCPUMCPUIDLEAF paLeaves, uint32_t cLeaves,
     4358                                               PCCPUMCPUIDLEAF pCurLeaf, uint32_t uUpToLeaf, const char *pszTitle)
     4359{
     4360    if (   pCurLeaf - paLeaves < cLeaves
     4361        && pCurLeaf->uLeaf <= uUpToLeaf)
     4362    {
     4363        pHlp->pfnPrintf(pHlp,
     4364                        "         %s\n"
     4365                        "     Leaf/sub-leaf  eax      ebx      ecx      edx\n", pszTitle);
     4366        while (   pCurLeaf - paLeaves < cLeaves
     4367               && pCurLeaf->uLeaf <= uUpToLeaf)
     4368        {
     4369            CPUMCPUID Host;
     4370            ASMCpuIdExSlow(pCurLeaf->uLeaf, pCurLeaf->uSubLeaf, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     4371            pHlp->pfnPrintf(pHlp,
     4372                            "Gst: %08x/%04x  %08x %08x %08x %08x\n"
     4373                            "Hst:                %08x %08x %08x %08x\n",
     4374                            pCurLeaf->uLeaf, pCurLeaf->uSubLeaf, pCurLeaf->uEax, pCurLeaf->uEbx, pCurLeaf->uEcx, pCurLeaf->uEdx,
     4375                            Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
     4376            pCurLeaf++;
     4377        }
     4378    }
     4379
     4380    return pCurLeaf;
     4381}
     4382
     4383
    43574384/**
    43584385 * Display the guest CpuId leaves.
     
    43774404    }
    43784405
     4406    uint32_t        uLeaf;
     4407    CPUMCPUID       Host;
     4408    uint32_t        dummy;
     4409    uint32_t        cLeaves  = pVM->cpum.s.GuestInfo.cCpuIdLeaves;
     4410    PCPUMCPUIDLEAF  paLeaves = pVM->cpum.s.GuestInfo.paCpuIdLeavesR3;
     4411    PCCPUMCPUIDLEAF pCurLeaf;
     4412    PCCPUMCPUIDLEAF pNextLeaf;
     4413
    43794414    /*
    4380      * Start cracking.
    4381      */
    4382     CPUMCPUID   Host;
    4383     CPUMCPUID   Guest;
    4384     unsigned    cStdMax = pVM->cpum.s.aGuestCpuIdPatmStd[0].uEax;
    4385 
    4386     uint32_t    cStdHstMax;
    4387     uint32_t    dummy;
    4388     ASMCpuIdExSlow(0, 0, 0, 0, &cStdHstMax, &dummy, &dummy, &dummy);
    4389 
    4390     unsigned    cStdLstMax = RT_MAX(RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd), cStdHstMax);
    4391 
     4415     * Standard leaves.  Custom raw dump here due to ECX sub-leaves host handling.
     4416     */
     4417    uint32_t        cHstMax = ASMCpuId_EAX(0);
     4418    uint32_t        cGstMax = paLeaves[0].uLeaf == 0 ? paLeaves[0].uEax : 0;
     4419    uint32_t        cMax    = RT_MAX(cGstMax, cHstMax);
    43924420    pHlp->pfnPrintf(pHlp,
    4393                     "         RAW Standard CPUIDs\n"
    4394                     "     Function  eax      ebx      ecx      edx\n");
    4395     for (unsigned i = 0; i <= cStdLstMax ; i++)
    4396     {
    4397         if (i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmStd))
    4398         {
    4399             Guest = pVM->cpum.s.aGuestCpuIdPatmStd[i];
    4400             ASMCpuIdExSlow(i, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    4401 
    4402             pHlp->pfnPrintf(pHlp,
    4403                             "Gst: %08x  %08x %08x %08x %08x%s\n"
    4404                             "Hst:           %08x %08x %08x %08x\n",
    4405                             i, Guest.uEax, Guest.uEbx, Guest.uEcx, Guest.uEdx,
    4406                             i <= cStdMax ? "" : "*",
    4407                             Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
    4408         }
    4409         else
    4410         {
    4411             ASMCpuIdExSlow(i, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    4412 
    4413             pHlp->pfnPrintf(pHlp,
    4414                             "Hst: %08x  %08x %08x %08x %08x\n",
    4415                             i, Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
     4421                    "         Raw Standard CPUID Leaves\n"
     4422                    "     Leaf/sub-leaf  eax      ebx      ecx      edx\n");
     4423    for (uLeaf = 0, pCurLeaf = paLeaves; uLeaf <= cMax; uLeaf++)
     4424    {
     4425        uint32_t cMaxSubLeaves = 1;
     4426        if (uLeaf == 4 || uLeaf == 7 || uLeaf == 0xb)
     4427            cMaxSubLeaves = 16;
     4428        else if (uLeaf == 0xd)
     4429            cMaxSubLeaves = 128;
     4430
     4431        for (uint32_t uSubLeaf = 0; uSubLeaf < cMaxSubLeaves; uSubLeaf++)
     4432        {
     4433            ASMCpuIdExSlow(uLeaf, uSubLeaf, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     4434            if (   pCurLeaf - paLeaves < cLeaves
     4435                && pCurLeaf->uLeaf    == uLeaf
     4436                && pCurLeaf->uSubLeaf == uSubLeaf)
     4437            {
     4438                pHlp->pfnPrintf(pHlp,
     4439                                "Gst: %08x/%04x  %08x %08x %08x %08x\n"
     4440                                "Hst:               %08x %08x %08x %08x\n",
     4441                                uLeaf, uSubLeaf, pCurLeaf->uEax, pCurLeaf->uEbx, pCurLeaf->uEcx, pCurLeaf->uEdx,
     4442                                Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
     4443                pCurLeaf++;
     4444            }
     4445            else if (   uLeaf != 0xd
     4446                     || uSubLeaf <= 1
     4447                     || Host.uEbx != 0 )
     4448                pHlp->pfnPrintf(pHlp,
     4449                                "Hst: %08x/%04x  %08x %08x %08x %08x\n",
     4450                                uLeaf, uSubLeaf, Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
     4451
     4452            /* Done? */
     4453            if (   (   pCurLeaf - paLeaves >= cLeaves
     4454                    || pCurLeaf->uLeaf != uLeaf)
     4455                && (   (uLeaf == 0x4 && ((Host.uEax & 0x000f) == 0 || (Host.uEax & 0x000f) >= 8))
     4456                    || (uLeaf == 0x7 && Host.uEax == 0)
     4457                    || (uLeaf == 0xb && ((Host.uEcx & 0xff00) == 0 || (Host.uEcx & 0xff00) >= 8))
     4458                    || (uLeaf == 0xb && (Host.uEcx & 0xff) != uSubLeaf)
     4459                    || (uLeaf == 0xd && uSubLeaf >= 128)
     4460                   )
     4461               )
     4462                break;
    44164463        }
    44174464    }
     
    44204467     * If verbose, decode it.
    44214468     */
    4422     if (iVerbosity)
    4423     {
    4424         Guest = pVM->cpum.s.aGuestCpuIdPatmStd[0];
     4469    if (iVerbosity && paLeaves[0].uLeaf == 0)
    44254470        pHlp->pfnPrintf(pHlp,
    44264471                        "Name:                            %.04s%.04s%.04s\n"
    44274472                        "Supports:                        0-%x\n",
    4428                         &Guest.uEbx, &Guest.uEdx, &Guest.uEcx, Guest.uEax);
    4429     }
     4473                        &paLeaves[0].uEbx, &paLeaves[0].uEdx, &paLeaves[0].uEcx, paLeaves[0].uEax);
    44304474
    44314475    /*
     
    44354479                                        pVM->cpum.s.aGuestCpuIdPatmStd[0].uEcx,
    44364480                                        pVM->cpum.s.aGuestCpuIdPatmStd[0].uEdx);
    4437     if (cStdMax >= 1 && iVerbosity)
     4481    if (cGstMax >= 1 && iVerbosity)
    44384482    {
    44394483        static const char * const s_apszTypes[4] = { "primary", "overdrive", "MP", "reserved" };
    44404484
    4441         Guest = pVM->cpum.s.aGuestCpuIdPatmStd[1];
    4442         uint32_t uEAX = Guest.uEax;
     4485        PCPUMCPUIDLEAF pFeatures = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, 1, 0);
     4486        uint32_t uEAX = pFeatures ? pFeatures->uEax : 0;
     4487        uint32_t uEBX = pFeatures ? pFeatures->uEbx : 0;
    44434488
    44444489        pHlp->pfnPrintf(pHlp,
     
    44554500                        ASMGetCpuStepping(uEAX),
    44564501                        (uEAX >> 12) & 3, s_apszTypes[(uEAX >> 12) & 3],
    4457                         (Guest.uEbx >> 24) & 0xff,
    4458                         (Guest.uEbx >> 16) & 0xff,
    4459                         (Guest.uEbx >>  8) & 0xff,
    4460                         (Guest.uEbx >>  0) & 0xff);
     4502                        (uEBX >> 24) & 0xff,
     4503                        (uEBX >> 16) & 0xff,
     4504                        (uEBX >>  8) & 0xff,
     4505                        (uEBX >>  0) & 0xff);
    44614506        if (iVerbosity == 1)
    44624507        {
    4463             uint32_t uEDX = Guest.uEdx;
     4508            uint32_t uEDX = pFeatures ? pFeatures->uEdx : 0;
    44644509            pHlp->pfnPrintf(pHlp, "Features EDX:                   ");
    44654510            if (uEDX & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " FPU");
     
    44974542            pHlp->pfnPrintf(pHlp, "\n");
    44984543
    4499             uint32_t uECX = Guest.uEcx;
     4544            uint32_t uECX = pFeatures ? pFeatures->uEcx : 0;
    45004545            pHlp->pfnPrintf(pHlp, "Features ECX:                   ");
    45014546            if (uECX & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " SSE3");
     
    45394584            X86CPUIDFEATEDX EdxHost  = *(PX86CPUIDFEATEDX)&Host.uEdx;
    45404585            X86CPUIDFEATECX EcxHost  = *(PX86CPUIDFEATECX)&Host.uEcx;
    4541             X86CPUIDFEATEDX EdxGuest = *(PX86CPUIDFEATEDX)&Guest.uEdx;
    4542             X86CPUIDFEATECX EcxGuest = *(PX86CPUIDFEATECX)&Guest.uEcx;
     4586            X86CPUIDFEATEDX EdxGuest;
     4587            X86CPUIDFEATECX EcxGuest;
     4588            if (pFeatures)
     4589            {
     4590                EdxGuest = *(PX86CPUIDFEATEDX)&pFeatures->uEdx;
     4591                EcxGuest = *(PX86CPUIDFEATECX)&pFeatures->uEcx;
     4592            }
     4593            else
     4594            {
     4595                RT_ZERO(EdxGuest);
     4596                RT_ZERO(EcxGuest);
     4597            }
    45434598
    45444599            pHlp->pfnPrintf(pHlp, "Mnemonic - Description                 = guest (host)\n");
     
    46104665        }
    46114666    }
    4612     if (cStdMax >= 2 && iVerbosity)
     4667    if (cGstMax >= 2 && iVerbosity)
    46134668    {
    46144669        /** @todo */
    46154670    }
    4616 
    4617     /*
    4618      * Extended.
    4619      * Implemented after AMD specs.
    4620      */
    4621     unsigned    cExtMax = pVM->cpum.s.aGuestCpuIdPatmExt[0].uEax & 0xffff;
    4622 
    4623     pHlp->pfnPrintf(pHlp,
    4624                     "\n"
    4625                     "         RAW Extended CPUIDs\n"
    4626                     "     Function  eax      ebx      ecx      edx\n");
    4627     bool fSupportsInvariantTsc = false;
    4628     for (unsigned i = 0; i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmExt); i++)
    4629     {
    4630         Guest = pVM->cpum.s.aGuestCpuIdPatmExt[i];
    4631         ASMCpuIdExSlow(0x80000000 | i, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    4632 
    4633         if (   i == 7
    4634             && (Host.uEdx & X86_CPUID_AMD_ADVPOWER_EDX_TSCINVAR))
    4635         {
    4636             fSupportsInvariantTsc = true;
    4637         }
    4638         pHlp->pfnPrintf(pHlp,
    4639                         "Gst: %08x  %08x %08x %08x %08x%s\n"
    4640                         "Hst:           %08x %08x %08x %08x\n",
    4641                         0x80000000 | i, Guest.uEax, Guest.uEbx, Guest.uEcx, Guest.uEdx,
    4642                         i <= cExtMax ? "" : "*",
    4643                         Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
    4644     }
    4645 
    4646     /*
    4647      * Understandable output
    4648      */
    4649     if (iVerbosity)
    4650     {
    4651         Guest = pVM->cpum.s.aGuestCpuIdPatmExt[0];
    4652         pHlp->pfnPrintf(pHlp,
    4653                         "Ext Name:                        %.4s%.4s%.4s\n"
    4654                         "Ext Supports:                    0x80000000-%#010x\n",
    4655                         &Guest.uEbx, &Guest.uEdx, &Guest.uEcx, Guest.uEax);
    4656     }
    4657 
    4658     if (iVerbosity && cExtMax >= 1)
    4659     {
    4660         Guest = pVM->cpum.s.aGuestCpuIdPatmExt[1];
    4661         uint32_t uEAX = Guest.uEax;
    4662         pHlp->pfnPrintf(pHlp,
    4663                         "Family:                          %d  \tExtended: %d \tEffective: %d\n"
    4664                         "Model:                           %d  \tExtended: %d \tEffective: %d\n"
    4665                         "Stepping:                        %d\n"
    4666                         "Brand ID:                        %#05x\n",
    4667                         (uEAX >> 8) & 0xf, (uEAX >> 20) & 0x7f, ASMGetCpuFamily(uEAX),
    4668                         (uEAX >> 4) & 0xf, (uEAX >> 16) & 0x0f, ASMGetCpuModel(uEAX, fIntel),
    4669                         ASMGetCpuStepping(uEAX),
    4670                         Guest.uEbx & 0xfff);
    4671 
    4672         if (iVerbosity == 1)
    4673         {
    4674             uint32_t uEDX = Guest.uEdx;
    4675             pHlp->pfnPrintf(pHlp, "Features EDX:                   ");
    4676             if (uEDX & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " FPU");
    4677             if (uEDX & RT_BIT(1))   pHlp->pfnPrintf(pHlp, " VME");
    4678             if (uEDX & RT_BIT(2))   pHlp->pfnPrintf(pHlp, " DE");
    4679             if (uEDX & RT_BIT(3))   pHlp->pfnPrintf(pHlp, " PSE");
    4680             if (uEDX & RT_BIT(4))   pHlp->pfnPrintf(pHlp, " TSC");
    4681             if (uEDX & RT_BIT(5))   pHlp->pfnPrintf(pHlp, " MSR");
    4682             if (uEDX & RT_BIT(6))   pHlp->pfnPrintf(pHlp, " PAE");
    4683             if (uEDX & RT_BIT(7))   pHlp->pfnPrintf(pHlp, " MCE");
    4684             if (uEDX & RT_BIT(8))   pHlp->pfnPrintf(pHlp, " CX8");
    4685             if (uEDX & RT_BIT(9))   pHlp->pfnPrintf(pHlp, " APIC");
    4686             if (uEDX & RT_BIT(10))  pHlp->pfnPrintf(pHlp, " 10");
    4687             if (uEDX & RT_BIT(11))  pHlp->pfnPrintf(pHlp, " SCR");
    4688             if (uEDX & RT_BIT(12))  pHlp->pfnPrintf(pHlp, " MTRR");
    4689             if (uEDX & RT_BIT(13))  pHlp->pfnPrintf(pHlp, " PGE");
    4690             if (uEDX & RT_BIT(14))  pHlp->pfnPrintf(pHlp, " MCA");
    4691             if (uEDX & RT_BIT(15))  pHlp->pfnPrintf(pHlp, " CMOV");
    4692             if (uEDX & RT_BIT(16))  pHlp->pfnPrintf(pHlp, " PAT");
    4693             if (uEDX & RT_BIT(17))  pHlp->pfnPrintf(pHlp, " PSE36");
    4694             if (uEDX & RT_BIT(18))  pHlp->pfnPrintf(pHlp, " 18");
    4695             if (uEDX & RT_BIT(19))  pHlp->pfnPrintf(pHlp, " 19");
    4696             if (uEDX & RT_BIT(20))  pHlp->pfnPrintf(pHlp, " NX");
    4697             if (uEDX & RT_BIT(21))  pHlp->pfnPrintf(pHlp, " 21");
    4698             if (uEDX & RT_BIT(22))  pHlp->pfnPrintf(pHlp, " ExtMMX");
    4699             if (uEDX & RT_BIT(23))  pHlp->pfnPrintf(pHlp, " MMX");
    4700             if (uEDX & RT_BIT(24))  pHlp->pfnPrintf(pHlp, " FXSR");
    4701             if (uEDX & RT_BIT(25))  pHlp->pfnPrintf(pHlp, " FastFXSR");
    4702             if (uEDX & RT_BIT(26))  pHlp->pfnPrintf(pHlp, " Page1GB");
    4703             if (uEDX & RT_BIT(27))  pHlp->pfnPrintf(pHlp, " RDTSCP");
    4704             if (uEDX & RT_BIT(28))  pHlp->pfnPrintf(pHlp, " 28");
    4705             if (uEDX & RT_BIT(29))  pHlp->pfnPrintf(pHlp, " LongMode");
    4706             if (uEDX & RT_BIT(30))  pHlp->pfnPrintf(pHlp, " Ext3DNow");
    4707             if (uEDX & RT_BIT(31))  pHlp->pfnPrintf(pHlp, " 3DNow");
    4708             pHlp->pfnPrintf(pHlp, "\n");
    4709 
    4710             uint32_t uECX = Guest.uEcx;
    4711             pHlp->pfnPrintf(pHlp, "Features ECX:                   ");
    4712             if (uECX & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " LAHF/SAHF");
    4713             if (uECX & RT_BIT(1))   pHlp->pfnPrintf(pHlp, " CMPL");
    4714             if (uECX & RT_BIT(2))   pHlp->pfnPrintf(pHlp, " SVM");
    4715             if (uECX & RT_BIT(3))   pHlp->pfnPrintf(pHlp, " ExtAPIC");
    4716             if (uECX & RT_BIT(4))   pHlp->pfnPrintf(pHlp, " CR8L");
    4717             if (uECX & RT_BIT(5))   pHlp->pfnPrintf(pHlp, " ABM");
    4718             if (uECX & RT_BIT(6))   pHlp->pfnPrintf(pHlp, " SSE4A");
    4719             if (uECX & RT_BIT(7))   pHlp->pfnPrintf(pHlp, " MISALNSSE");
    4720             if (uECX & RT_BIT(8))   pHlp->pfnPrintf(pHlp, " 3DNOWPRF");
    4721             if (uECX & RT_BIT(9))   pHlp->pfnPrintf(pHlp, " OSVW");
    4722             if (uECX & RT_BIT(10))  pHlp->pfnPrintf(pHlp, " IBS");
    4723             if (uECX & RT_BIT(11))  pHlp->pfnPrintf(pHlp, " SSE5");
    4724             if (uECX & RT_BIT(12))  pHlp->pfnPrintf(pHlp, " SKINIT");
    4725             if (uECX & RT_BIT(13))  pHlp->pfnPrintf(pHlp, " WDT");
    4726             for (unsigned iBit = 5; iBit < 32; iBit++)
    4727                 if (uECX & RT_BIT(iBit))
    4728                     pHlp->pfnPrintf(pHlp, " %d", iBit);
    4729             pHlp->pfnPrintf(pHlp, "\n");
    4730         }
    4731         else
    4732         {
    4733             ASMCpuIdExSlow(0x80000001, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    4734 
    4735             uint32_t uEdxGst = Guest.uEdx;
    4736             uint32_t uEdxHst = Host.uEdx;
    4737             pHlp->pfnPrintf(pHlp, "Mnemonic - Description                 = guest (host)\n");
    4738             pHlp->pfnPrintf(pHlp, "FPU - x87 FPU on Chip                  = %d (%d)\n",  !!(uEdxGst & RT_BIT( 0)),  !!(uEdxHst & RT_BIT( 0)));
    4739             pHlp->pfnPrintf(pHlp, "VME - Virtual 8086 Mode Enhancements   = %d (%d)\n",  !!(uEdxGst & RT_BIT( 1)),  !!(uEdxHst & RT_BIT( 1)));
    4740             pHlp->pfnPrintf(pHlp, "DE - Debugging extensions              = %d (%d)\n",  !!(uEdxGst & RT_BIT( 2)),  !!(uEdxHst & RT_BIT( 2)));
    4741             pHlp->pfnPrintf(pHlp, "PSE - Page Size Extension              = %d (%d)\n",  !!(uEdxGst & RT_BIT( 3)),  !!(uEdxHst & RT_BIT( 3)));
    4742             pHlp->pfnPrintf(pHlp, "TSC - Time Stamp Counter               = %d (%d)\n",  !!(uEdxGst & RT_BIT( 4)),  !!(uEdxHst & RT_BIT( 4)));
    4743             pHlp->pfnPrintf(pHlp, "MSR - K86 Model Specific Registers     = %d (%d)\n",  !!(uEdxGst & RT_BIT( 5)),  !!(uEdxHst & RT_BIT( 5)));
    4744             pHlp->pfnPrintf(pHlp, "PAE - Physical Address Extension       = %d (%d)\n",  !!(uEdxGst & RT_BIT( 6)),  !!(uEdxHst & RT_BIT( 6)));
    4745             pHlp->pfnPrintf(pHlp, "MCE - Machine Check Exception          = %d (%d)\n",  !!(uEdxGst & RT_BIT( 7)),  !!(uEdxHst & RT_BIT( 7)));
    4746             pHlp->pfnPrintf(pHlp, "CX8 - CMPXCHG8B instruction            = %d (%d)\n",  !!(uEdxGst & RT_BIT( 8)),  !!(uEdxHst & RT_BIT( 8)));
    4747             pHlp->pfnPrintf(pHlp, "APIC - APIC On-Chip                    = %d (%d)\n",  !!(uEdxGst & RT_BIT( 9)),  !!(uEdxHst & RT_BIT( 9)));
    4748             pHlp->pfnPrintf(pHlp, "10 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(10)),  !!(uEdxHst & RT_BIT(10)));
    4749             pHlp->pfnPrintf(pHlp, "SEP - SYSCALL and SYSRET               = %d (%d)\n",  !!(uEdxGst & RT_BIT(11)),  !!(uEdxHst & RT_BIT(11)));
    4750             pHlp->pfnPrintf(pHlp, "MTRR - Memory Type Range Registers     = %d (%d)\n",  !!(uEdxGst & RT_BIT(12)),  !!(uEdxHst & RT_BIT(12)));
    4751             pHlp->pfnPrintf(pHlp, "PGE - PTE Global Bit                   = %d (%d)\n",  !!(uEdxGst & RT_BIT(13)),  !!(uEdxHst & RT_BIT(13)));
    4752             pHlp->pfnPrintf(pHlp, "MCA - Machine Check Architecture       = %d (%d)\n",  !!(uEdxGst & RT_BIT(14)),  !!(uEdxHst & RT_BIT(14)));
    4753             pHlp->pfnPrintf(pHlp, "CMOV - Conditional Move Instructions   = %d (%d)\n",  !!(uEdxGst & RT_BIT(15)),  !!(uEdxHst & RT_BIT(15)));
    4754             pHlp->pfnPrintf(pHlp, "PAT - Page Attribute Table             = %d (%d)\n",  !!(uEdxGst & RT_BIT(16)),  !!(uEdxHst & RT_BIT(16)));
    4755             pHlp->pfnPrintf(pHlp, "PSE-36 - 36-bit Page Size Extention    = %d (%d)\n",  !!(uEdxGst & RT_BIT(17)),  !!(uEdxHst & RT_BIT(17)));
    4756             pHlp->pfnPrintf(pHlp, "18 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(18)),  !!(uEdxHst & RT_BIT(18)));
    4757             pHlp->pfnPrintf(pHlp, "19 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(19)),  !!(uEdxHst & RT_BIT(19)));
    4758             pHlp->pfnPrintf(pHlp, "NX - No-Execute Page Protection        = %d (%d)\n",  !!(uEdxGst & RT_BIT(20)),  !!(uEdxHst & RT_BIT(20)));
    4759             pHlp->pfnPrintf(pHlp, "DS - Debug Store                       = %d (%d)\n",  !!(uEdxGst & RT_BIT(21)),  !!(uEdxHst & RT_BIT(21)));
    4760             pHlp->pfnPrintf(pHlp, "AXMMX - AMD Extensions to MMX Instr.   = %d (%d)\n",  !!(uEdxGst & RT_BIT(22)),  !!(uEdxHst & RT_BIT(22)));
    4761             pHlp->pfnPrintf(pHlp, "MMX - Intel MMX Technology             = %d (%d)\n",  !!(uEdxGst & RT_BIT(23)),  !!(uEdxHst & RT_BIT(23)));
    4762             pHlp->pfnPrintf(pHlp, "FXSR - FXSAVE and FXRSTOR Instructions = %d (%d)\n",  !!(uEdxGst & RT_BIT(24)),  !!(uEdxHst & RT_BIT(24)));
    4763             pHlp->pfnPrintf(pHlp, "25 - AMD fast FXSAVE and FXRSTOR Instr.= %d (%d)\n",  !!(uEdxGst & RT_BIT(25)),  !!(uEdxHst & RT_BIT(25)));
    4764             pHlp->pfnPrintf(pHlp, "26 - 1 GB large page support           = %d (%d)\n",  !!(uEdxGst & RT_BIT(26)),  !!(uEdxHst & RT_BIT(26)));
    4765             pHlp->pfnPrintf(pHlp, "27 - RDTSCP instruction                = %d (%d)\n",  !!(uEdxGst & RT_BIT(27)),  !!(uEdxHst & RT_BIT(27)));
    4766             pHlp->pfnPrintf(pHlp, "28 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(28)),  !!(uEdxHst & RT_BIT(28)));
    4767             pHlp->pfnPrintf(pHlp, "29 - AMD Long Mode                     = %d (%d)\n",  !!(uEdxGst & RT_BIT(29)),  !!(uEdxHst & RT_BIT(29)));
    4768             pHlp->pfnPrintf(pHlp, "30 - AMD Extensions to 3DNow!          = %d (%d)\n",  !!(uEdxGst & RT_BIT(30)),  !!(uEdxHst & RT_BIT(30)));
    4769             pHlp->pfnPrintf(pHlp, "31 - AMD 3DNow!                        = %d (%d)\n",  !!(uEdxGst & RT_BIT(31)),  !!(uEdxHst & RT_BIT(31)));
    4770 
    4771             uint32_t uEcxGst = Guest.uEcx;
    4772             uint32_t uEcxHst = Host.uEcx;
    4773             pHlp->pfnPrintf(pHlp, "LahfSahf - LAHF/SAHF in 64-bit mode    = %d (%d)\n",  !!(uEcxGst & RT_BIT( 0)),  !!(uEcxHst & RT_BIT( 0)));
    4774             pHlp->pfnPrintf(pHlp, "CmpLegacy - Core MP legacy mode (depr) = %d (%d)\n",  !!(uEcxGst & RT_BIT( 1)),  !!(uEcxHst & RT_BIT( 1)));
    4775             pHlp->pfnPrintf(pHlp, "SVM - AMD VM Extensions                = %d (%d)\n",  !!(uEcxGst & RT_BIT( 2)),  !!(uEcxHst & RT_BIT( 2)));
    4776             pHlp->pfnPrintf(pHlp, "APIC registers starting at 0x400       = %d (%d)\n",  !!(uEcxGst & RT_BIT( 3)),  !!(uEcxHst & RT_BIT( 3)));
    4777             pHlp->pfnPrintf(pHlp, "AltMovCR8 - LOCK MOV CR0 means MOV CR8 = %d (%d)\n",  !!(uEcxGst & RT_BIT( 4)),  !!(uEcxHst & RT_BIT( 4)));
    4778             pHlp->pfnPrintf(pHlp, "5  - Advanced bit manipulation         = %d (%d)\n",  !!(uEcxGst & RT_BIT( 5)),  !!(uEcxHst & RT_BIT( 5)));
    4779             pHlp->pfnPrintf(pHlp, "6  - SSE4A instruction support         = %d (%d)\n",  !!(uEcxGst & RT_BIT( 6)),  !!(uEcxHst & RT_BIT( 6)));
    4780             pHlp->pfnPrintf(pHlp, "7  - Misaligned SSE mode               = %d (%d)\n",  !!(uEcxGst & RT_BIT( 7)),  !!(uEcxHst & RT_BIT( 7)));
    4781             pHlp->pfnPrintf(pHlp, "8  - PREFETCH and PREFETCHW instruction= %d (%d)\n",  !!(uEcxGst & RT_BIT( 8)),  !!(uEcxHst & RT_BIT( 8)));
    4782             pHlp->pfnPrintf(pHlp, "9  - OS visible workaround             = %d (%d)\n",  !!(uEcxGst & RT_BIT( 9)),  !!(uEcxHst & RT_BIT( 9)));
    4783             pHlp->pfnPrintf(pHlp, "10 - Instruction based sampling        = %d (%d)\n",  !!(uEcxGst & RT_BIT(10)),  !!(uEcxHst & RT_BIT(10)));
    4784             pHlp->pfnPrintf(pHlp, "11 - SSE5 support                      = %d (%d)\n",  !!(uEcxGst & RT_BIT(11)),  !!(uEcxHst & RT_BIT(11)));
    4785             pHlp->pfnPrintf(pHlp, "12 - SKINIT, STGI, and DEV support     = %d (%d)\n",  !!(uEcxGst & RT_BIT(12)),  !!(uEcxHst & RT_BIT(12)));
    4786             pHlp->pfnPrintf(pHlp, "13 - Watchdog timer support.           = %d (%d)\n",  !!(uEcxGst & RT_BIT(13)),  !!(uEcxHst & RT_BIT(13)));
    4787             pHlp->pfnPrintf(pHlp, "31:14 - Reserved                       = %#x (%#x)\n",   uEcxGst >> 14,          uEcxHst >> 14);
    4788         }
    4789     }
    4790 
    4791     if (iVerbosity && cExtMax >= 2)
    4792     {
    4793         char szString[4*4*3+1] = {0};
    4794         uint32_t *pu32 = (uint32_t *)szString;
    4795         *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[2].uEax;
    4796         *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[2].uEbx;
    4797         *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[2].uEcx;
    4798         *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[2].uEdx;
    4799         if (cExtMax >= 3)
    4800         {
    4801             *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[3].uEax;
    4802             *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[3].uEbx;
    4803             *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[3].uEcx;
    4804             *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[3].uEdx;
    4805         }
    4806         if (cExtMax >= 4)
    4807         {
    4808             *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[4].uEax;
    4809             *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[4].uEbx;
    4810             *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[4].uEcx;
    4811             *pu32++ = pVM->cpum.s.aGuestCpuIdPatmExt[4].uEdx;
    4812         }
    4813         pHlp->pfnPrintf(pHlp, "Full Name:                       %s\n", szString);
    4814     }
    4815 
    4816     if (iVerbosity && cExtMax >= 5)
    4817     {
    4818         uint32_t uEAX = pVM->cpum.s.aGuestCpuIdPatmExt[5].uEax;
    4819         uint32_t uEBX = pVM->cpum.s.aGuestCpuIdPatmExt[5].uEbx;
    4820         uint32_t uECX = pVM->cpum.s.aGuestCpuIdPatmExt[5].uEcx;
    4821         uint32_t uEDX = pVM->cpum.s.aGuestCpuIdPatmExt[5].uEdx;
    4822         char sz1[32];
    4823         char sz2[32];
    4824 
    4825         pHlp->pfnPrintf(pHlp,
    4826                         "TLB 2/4M Instr/Uni:              %s %3d entries\n"
    4827                         "TLB 2/4M Data:                   %s %3d entries\n",
    4828                         getCacheAss((uEAX >>  8) & 0xff, sz1), (uEAX >>  0) & 0xff,
    4829                         getCacheAss((uEAX >> 24) & 0xff, sz2), (uEAX >> 16) & 0xff);
    4830         pHlp->pfnPrintf(pHlp,
    4831                         "TLB 4K Instr/Uni:                %s %3d entries\n"
    4832                         "TLB 4K Data:                     %s %3d entries\n",
    4833                         getCacheAss((uEBX >>  8) & 0xff, sz1), (uEBX >>  0) & 0xff,
    4834                         getCacheAss((uEBX >> 24) & 0xff, sz2), (uEBX >> 16) & 0xff);
    4835         pHlp->pfnPrintf(pHlp, "L1 Instr Cache Line Size:        %d bytes\n"
    4836                         "L1 Instr Cache Lines Per Tag:    %d\n"
    4837                         "L1 Instr Cache Associativity:    %s\n"
    4838                         "L1 Instr Cache Size:             %d KB\n",
    4839                         (uEDX >> 0) & 0xff,
    4840                         (uEDX >> 8) & 0xff,
    4841                         getCacheAss((uEDX >> 16) & 0xff, sz1),
    4842                         (uEDX >> 24) & 0xff);
    4843         pHlp->pfnPrintf(pHlp,
    4844                         "L1 Data Cache Line Size:         %d bytes\n"
    4845                         "L1 Data Cache Lines Per Tag:     %d\n"
    4846                         "L1 Data Cache Associativity:     %s\n"
    4847                         "L1 Data Cache Size:              %d KB\n",
    4848                         (uECX >> 0) & 0xff,
    4849                         (uECX >> 8) & 0xff,
    4850                         getCacheAss((uECX >> 16) & 0xff, sz1),
    4851                         (uECX >> 24) & 0xff);
    4852     }
    4853 
    4854     if (iVerbosity && cExtMax >= 6)
    4855     {
    4856         uint32_t uEAX = pVM->cpum.s.aGuestCpuIdPatmExt[6].uEax;
    4857         uint32_t uEBX = pVM->cpum.s.aGuestCpuIdPatmExt[6].uEbx;
    4858         uint32_t uEDX = pVM->cpum.s.aGuestCpuIdPatmExt[6].uEdx;
    4859 
    4860         pHlp->pfnPrintf(pHlp,
    4861                         "L2 TLB 2/4M Instr/Uni:           %s %4d entries\n"
    4862                         "L2 TLB 2/4M Data:                %s %4d entries\n",
    4863                         getL2CacheAss((uEAX >> 12) & 0xf),  (uEAX >>  0) & 0xfff,
    4864                         getL2CacheAss((uEAX >> 28) & 0xf),  (uEAX >> 16) & 0xfff);
    4865         pHlp->pfnPrintf(pHlp,
    4866                         "L2 TLB 4K Instr/Uni:             %s %4d entries\n"
    4867                         "L2 TLB 4K Data:                  %s %4d entries\n",
    4868                         getL2CacheAss((uEBX >> 12) & 0xf),  (uEBX >>  0) & 0xfff,
    4869                         getL2CacheAss((uEBX >> 28) & 0xf),  (uEBX >> 16) & 0xfff);
    4870         pHlp->pfnPrintf(pHlp,
    4871                         "L2 Cache Line Size:              %d bytes\n"
    4872                         "L2 Cache Lines Per Tag:          %d\n"
    4873                         "L2 Cache Associativity:          %s\n"
    4874                         "L2 Cache Size:                   %d KB\n",
    4875                         (uEDX >> 0) & 0xff,
    4876                         (uEDX >> 8) & 0xf,
    4877                         getL2CacheAss((uEDX >> 12) & 0xf),
    4878                         (uEDX >> 16) & 0xffff);
    4879     }
    4880 
    4881     if (iVerbosity && cExtMax >= 7)
    4882     {
    4883         uint32_t uEDX = pVM->cpum.s.aGuestCpuIdPatmExt[7].uEdx;
    4884 
    4885         pHlp->pfnPrintf(pHlp, "Host Invariant-TSC support:      %RTbool\n", fSupportsInvariantTsc);
    4886         pHlp->pfnPrintf(pHlp, "APM Features:                   ");
    4887         if (uEDX & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " TS");
    4888         if (uEDX & RT_BIT(1))   pHlp->pfnPrintf(pHlp, " FID");
    4889         if (uEDX & RT_BIT(2))   pHlp->pfnPrintf(pHlp, " VID");
    4890         if (uEDX & RT_BIT(3))   pHlp->pfnPrintf(pHlp, " TTP");
    4891         if (uEDX & RT_BIT(4))   pHlp->pfnPrintf(pHlp, " TM");
    4892         if (uEDX & RT_BIT(5))   pHlp->pfnPrintf(pHlp, " STC");
    4893         if (uEDX & RT_BIT(6))   pHlp->pfnPrintf(pHlp, " MC");
    4894         if (uEDX & RT_BIT(7))   pHlp->pfnPrintf(pHlp, " HWPSTATE");
    4895         if (uEDX & RT_BIT(8))   pHlp->pfnPrintf(pHlp, " TscInvariant");
    4896         if (uEDX & RT_BIT(9))   pHlp->pfnPrintf(pHlp, " CPB");
    4897         if (uEDX & RT_BIT(10))  pHlp->pfnPrintf(pHlp, " EffFreqRO");
    4898         if (uEDX & RT_BIT(11))  pHlp->pfnPrintf(pHlp, " PFI");
    4899         if (uEDX & RT_BIT(12))  pHlp->pfnPrintf(pHlp, " PA");
    4900         for (unsigned iBit = 13; iBit < 32; iBit++)
    4901             if (uEDX & RT_BIT(iBit))
    4902                 pHlp->pfnPrintf(pHlp, " %d", iBit);
    4903         pHlp->pfnPrintf(pHlp, "\n");
    4904     }
    4905 
    4906     if (iVerbosity && cExtMax >= 8)
    4907     {
    4908         uint32_t uEAX = pVM->cpum.s.aGuestCpuIdPatmExt[8].uEax;
    4909         uint32_t uECX = pVM->cpum.s.aGuestCpuIdPatmExt[8].uEcx;
    4910 
    4911         pHlp->pfnPrintf(pHlp,
    4912                         "Physical Address Width:          %d bits\n"
    4913                         "Virtual Address Width:           %d bits\n"
    4914                         "Guest Physical Address Width:    %d bits\n",
    4915                         (uEAX >> 0) & 0xff,
    4916                         (uEAX >> 8) & 0xff,
    4917                         (uEAX >> 16) & 0xff);
    4918         pHlp->pfnPrintf(pHlp,
    4919                         "Physical Core Count:             %d\n",
    4920                         (uECX >> 0) & 0xff);
    4921     }
    4922 
    49234671
    49244672    /*
     
    49284676     * aren't a subset of the host CPUID bits.
    49294677     */
    4930     RT_ZERO(Host);
    4931     if (cStdHstMax >= 1)
    4932         ASMCpuIdExSlow(1, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    4933     bool fHostHvp  = RT_BOOL(Host.uEcx & X86_CPUID_FEATURE_ECX_HVP);
    4934     bool fGuestHvp = false;
    4935     if (cStdMax >= 1)
    4936     {
    4937         Guest     = pVM->cpum.s.aGuestCpuIdPatmStd[1];
    4938         fGuestHvp = RT_BOOL(Guest.uEcx & X86_CPUID_FEATURE_ECX_HVP);
    4939     }
    4940 
    4941     if (   fHostHvp
    4942         || fGuestHvp)
    4943     {
    4944         uint32_t const uHyperLeaf = 0x40000000;
     4678    pCurLeaf = cpumR3CpuIdInfoRawRange(pHlp, paLeaves, cLeaves, pCurLeaf, UINT32_C(0x3fffffff), "Unknown CPUID Leaves");
     4679
     4680    ASMCpuIdExSlow(UINT32_C(0x40000000), 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     4681    cHstMax  = Host.uEax >= UINT32_C(0x40000001) && Host.uEax <= UINT32_C(0x40000fff) ? Host.uEax : 0;
     4682    cGstMax  = pCurLeaf - paLeaves < cLeaves && pCurLeaf->uLeaf == UINT32_C(0x40000000)
     4683             ? RT_MIN(pCurLeaf->uEax, UINT32_C(0x40000fff)) : 0;
     4684    cMax     = RT_MAX(cHstMax, cGstMax);
     4685    if (cMax >= UINT32_C(0x40000000))
     4686    {
     4687        pNextLeaf = cpumR3CpuIdInfoRawRange(pHlp, paLeaves, cLeaves, pCurLeaf, cMax, "Raw Hypervisor CPUID Leaves");
     4688
     4689        /** @todo dump these in more detail. */
     4690
     4691        pCurLeaf = pNextLeaf;
     4692    }
     4693
     4694
     4695    /*
     4696     * Extended.  Custom raw dump here due to ECX sub-leaves host handling.
     4697     * Implemented after AMD specs.
     4698     */
     4699    pCurLeaf = cpumR3CpuIdInfoRawRange(pHlp, paLeaves, cLeaves, pCurLeaf, UINT32_C(0x7fffffff), "Unknown CPUID Leaves");
     4700
     4701    ASMCpuIdExSlow(UINT32_C(0x80000000), 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     4702    cHstMax  = ASMIsValidExtRange(Host.uEax) ? RT_MIN(Host.uEax, UINT32_C(0x80000fff)) : 0;
     4703    cGstMax  = pCurLeaf - paLeaves < cLeaves && pCurLeaf->uLeaf == UINT32_C(0x80000000)
     4704             ? RT_MIN(pCurLeaf->uEax, UINT32_C(0x80000fff)) : 0;
     4705    cMax     = RT_MAX(cHstMax, cGstMax);
     4706    if (cMax >= UINT32_C(0x80000000))
     4707    {
     4708
    49454709        pHlp->pfnPrintf(pHlp,
    4946                         "\n"
    4947                         "         Hypervisor CPUIDs\n"
    4948                         "     Function  eax      ebx      ecx      edx\n");
    4949 
    4950         PCCPUMCPUIDLEAF pHyperLeafGst = NULL;
    4951         if (fGuestHvp)
    4952         {
    4953             pHyperLeafGst = cpumR3CpuIdGetLeaf(pVM->cpum.s.GuestInfo.paCpuIdLeavesR3, pVM->cpum.s.GuestInfo.cCpuIdLeaves,
    4954                                                uHyperLeaf, 0 /* uSubLeaf */);
    4955         }
    4956 
    4957         RT_ZERO(Host);
    4958         if (fHostHvp)
    4959             ASMCpuIdExSlow(uHyperLeaf, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    4960 
    4961         CPUMCPUIDLEAF  GuestLeaf;
    4962         uint32_t const cHyperGstMax = pHyperLeafGst ? pHyperLeafGst->uEax : 0;
    4963         uint32_t const cHyperHstMax = Host.uEax;
    4964         uint32_t const cHyperMax    = RT_MAX(cHyperHstMax, cHyperGstMax);
    4965         for (uint32_t i = uHyperLeaf; i <= cHyperMax; i++)
    4966         {
    4967             RT_ZERO(Host);
    4968             RT_ZERO(GuestLeaf);
    4969             if (i <= cHyperHstMax)
    4970                 ASMCpuIdExSlow(i, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    4971             CPUMR3CpuIdGetLeaf(pVM, &GuestLeaf, i, 0 /* uSubLeaf */);
    4972             if (!fHostHvp)
     4710                        "         Raw Extended CPUID Leaves\n"
     4711                        "     Leaf/sub-leaf  eax      ebx      ecx      edx\n");
     4712        PCCPUMCPUIDLEAF pExtLeaf = pCurLeaf;
     4713        for (uLeaf = UINT32_C(0x80000000); uLeaf <= cMax; uLeaf++)
     4714        {
     4715            uint32_t cMaxSubLeaves = 1;
     4716            if (uLeaf == UINT32_C(0x8000001d))
     4717                cMaxSubLeaves = 16;
     4718
     4719            for (uint32_t uSubLeaf = 0; uSubLeaf < cMaxSubLeaves; uSubLeaf++)
    49734720            {
    4974                 pHlp->pfnPrintf(pHlp,
    4975                                 "Gst: %08x  %08x %08x %08x %08x\n",
    4976                                 i, GuestLeaf.uEax, GuestLeaf.uEbx, GuestLeaf.uEcx, GuestLeaf.uEdx);
     4721                ASMCpuIdExSlow(uLeaf, uSubLeaf, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     4722                if (   pCurLeaf - paLeaves < cLeaves
     4723                    && pCurLeaf->uLeaf    == uLeaf
     4724                    && pCurLeaf->uSubLeaf == uSubLeaf)
     4725                {
     4726                    pHlp->pfnPrintf(pHlp,
     4727                                    "Gst: %08x/%04x  %08x %08x %08x %08x\n"
     4728                                    "Hst:                 %08x %08x %08x %08x\n",
     4729                                    uLeaf, uSubLeaf, pCurLeaf->uEax, pCurLeaf->uEbx, pCurLeaf->uEcx, pCurLeaf->uEdx,
     4730                                    Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
     4731                    pCurLeaf++;
     4732                }
     4733                else if (   uLeaf != 0xd
     4734                         || uSubLeaf <= 1
     4735                         || Host.uEbx != 0 )
     4736                    pHlp->pfnPrintf(pHlp,
     4737                                    "Hst: %08x/%04x  %08x %08x %08x %08x\n",
     4738                                    uLeaf, uSubLeaf, Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
     4739
     4740                /* Done? */
     4741                if (   (   pCurLeaf - paLeaves >= cLeaves
     4742                        || pCurLeaf->uLeaf != uLeaf)
     4743                    && (uLeaf == UINT32_C(0x8000001d) && ((Host.uEax & 0x000f) == 0 || (Host.uEax & 0x000f) >= 8)) )
     4744                    break;
     4745            }
     4746        }
     4747        pNextLeaf = pCurLeaf;
     4748
     4749        /*
     4750         * Understandable output
     4751         */
     4752        if (iVerbosity)
     4753            pHlp->pfnPrintf(pHlp,
     4754                            "Ext Name:                        %.4s%.4s%.4s\n"
     4755                            "Ext Supports:                    0x80000000-%#010x\n",
     4756                            &pExtLeaf->uEbx, &pExtLeaf->uEdx, &pExtLeaf->uEcx, pExtLeaf->uEax);
     4757
     4758        pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000001), 0);
     4759        if (iVerbosity && pCurLeaf)
     4760        {
     4761            uint32_t uEAX = pCurLeaf->uEax;
     4762            pHlp->pfnPrintf(pHlp,
     4763                            "Family:                          %d  \tExtended: %d \tEffective: %d\n"
     4764                            "Model:                           %d  \tExtended: %d \tEffective: %d\n"
     4765                            "Stepping:                        %d\n"
     4766                            "Brand ID:                        %#05x\n",
     4767                            (uEAX >> 8) & 0xf, (uEAX >> 20) & 0x7f, ASMGetCpuFamily(uEAX),
     4768                            (uEAX >> 4) & 0xf, (uEAX >> 16) & 0x0f, ASMGetCpuModel(uEAX, fIntel),
     4769                            ASMGetCpuStepping(uEAX),
     4770                            pCurLeaf->uEbx & 0xfff);
     4771
     4772            if (iVerbosity == 1)
     4773            {
     4774                uint32_t uEDX = pCurLeaf->uEdx;
     4775                pHlp->pfnPrintf(pHlp, "Features EDX:                   ");
     4776                if (uEDX & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " FPU");
     4777                if (uEDX & RT_BIT(1))   pHlp->pfnPrintf(pHlp, " VME");
     4778                if (uEDX & RT_BIT(2))   pHlp->pfnPrintf(pHlp, " DE");
     4779                if (uEDX & RT_BIT(3))   pHlp->pfnPrintf(pHlp, " PSE");
     4780                if (uEDX & RT_BIT(4))   pHlp->pfnPrintf(pHlp, " TSC");
     4781                if (uEDX & RT_BIT(5))   pHlp->pfnPrintf(pHlp, " MSR");
     4782                if (uEDX & RT_BIT(6))   pHlp->pfnPrintf(pHlp, " PAE");
     4783                if (uEDX & RT_BIT(7))   pHlp->pfnPrintf(pHlp, " MCE");
     4784                if (uEDX & RT_BIT(8))   pHlp->pfnPrintf(pHlp, " CX8");
     4785                if (uEDX & RT_BIT(9))   pHlp->pfnPrintf(pHlp, " APIC");
     4786                if (uEDX & RT_BIT(10))  pHlp->pfnPrintf(pHlp, " 10");
     4787                if (uEDX & RT_BIT(11))  pHlp->pfnPrintf(pHlp, " SCR");
     4788                if (uEDX & RT_BIT(12))  pHlp->pfnPrintf(pHlp, " MTRR");
     4789                if (uEDX & RT_BIT(13))  pHlp->pfnPrintf(pHlp, " PGE");
     4790                if (uEDX & RT_BIT(14))  pHlp->pfnPrintf(pHlp, " MCA");
     4791                if (uEDX & RT_BIT(15))  pHlp->pfnPrintf(pHlp, " CMOV");
     4792                if (uEDX & RT_BIT(16))  pHlp->pfnPrintf(pHlp, " PAT");
     4793                if (uEDX & RT_BIT(17))  pHlp->pfnPrintf(pHlp, " PSE36");
     4794                if (uEDX & RT_BIT(18))  pHlp->pfnPrintf(pHlp, " 18");
     4795                if (uEDX & RT_BIT(19))  pHlp->pfnPrintf(pHlp, " 19");
     4796                if (uEDX & RT_BIT(20))  pHlp->pfnPrintf(pHlp, " NX");
     4797                if (uEDX & RT_BIT(21))  pHlp->pfnPrintf(pHlp, " 21");
     4798                if (uEDX & RT_BIT(22))  pHlp->pfnPrintf(pHlp, " ExtMMX");
     4799                if (uEDX & RT_BIT(23))  pHlp->pfnPrintf(pHlp, " MMX");
     4800                if (uEDX & RT_BIT(24))  pHlp->pfnPrintf(pHlp, " FXSR");
     4801                if (uEDX & RT_BIT(25))  pHlp->pfnPrintf(pHlp, " FastFXSR");
     4802                if (uEDX & RT_BIT(26))  pHlp->pfnPrintf(pHlp, " Page1GB");
     4803                if (uEDX & RT_BIT(27))  pHlp->pfnPrintf(pHlp, " RDTSCP");
     4804                if (uEDX & RT_BIT(28))  pHlp->pfnPrintf(pHlp, " 28");
     4805                if (uEDX & RT_BIT(29))  pHlp->pfnPrintf(pHlp, " LongMode");
     4806                if (uEDX & RT_BIT(30))  pHlp->pfnPrintf(pHlp, " Ext3DNow");
     4807                if (uEDX & RT_BIT(31))  pHlp->pfnPrintf(pHlp, " 3DNow");
     4808                pHlp->pfnPrintf(pHlp, "\n");
     4809
     4810                uint32_t uECX = pCurLeaf->uEcx;
     4811                pHlp->pfnPrintf(pHlp, "Features ECX:                   ");
     4812                if (uECX & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " LAHF/SAHF");
     4813                if (uECX & RT_BIT(1))   pHlp->pfnPrintf(pHlp, " CMPL");
     4814                if (uECX & RT_BIT(2))   pHlp->pfnPrintf(pHlp, " SVM");
     4815                if (uECX & RT_BIT(3))   pHlp->pfnPrintf(pHlp, " ExtAPIC");
     4816                if (uECX & RT_BIT(4))   pHlp->pfnPrintf(pHlp, " CR8L");
     4817                if (uECX & RT_BIT(5))   pHlp->pfnPrintf(pHlp, " ABM");
     4818                if (uECX & RT_BIT(6))   pHlp->pfnPrintf(pHlp, " SSE4A");
     4819                if (uECX & RT_BIT(7))   pHlp->pfnPrintf(pHlp, " MISALNSSE");
     4820                if (uECX & RT_BIT(8))   pHlp->pfnPrintf(pHlp, " 3DNOWPRF");
     4821                if (uECX & RT_BIT(9))   pHlp->pfnPrintf(pHlp, " OSVW");
     4822                if (uECX & RT_BIT(10))  pHlp->pfnPrintf(pHlp, " IBS");
     4823                if (uECX & RT_BIT(11))  pHlp->pfnPrintf(pHlp, " SSE5");
     4824                if (uECX & RT_BIT(12))  pHlp->pfnPrintf(pHlp, " SKINIT");
     4825                if (uECX & RT_BIT(13))  pHlp->pfnPrintf(pHlp, " WDT");
     4826                for (unsigned iBit = 5; iBit < 32; iBit++)
     4827                    if (uECX & RT_BIT(iBit))
     4828                        pHlp->pfnPrintf(pHlp, " %d", iBit);
     4829                pHlp->pfnPrintf(pHlp, "\n");
    49774830            }
    49784831            else
    49794832            {
    4980                 pHlp->pfnPrintf(pHlp,
    4981                                 "Gst: %08x  %08x %08x %08x %08x%s\n"
    4982                                 "Hst:           %08x %08x %08x %08x%s\n",
    4983                                 i, GuestLeaf.uEax, GuestLeaf.uEbx, GuestLeaf.uEcx, GuestLeaf.uEdx,
    4984                                 i <= cHyperGstMax ? "" : "*",
    4985                                 Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx, i <= cHyperHstMax ? "" : "*");
     4833                ASMCpuIdExSlow(0x80000001, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     4834
     4835                uint32_t uEdxGst = pCurLeaf->uEdx;
     4836                uint32_t uEdxHst = Host.uEdx;
     4837                pHlp->pfnPrintf(pHlp, "Mnemonic - Description                 = guest (host)\n");
     4838                pHlp->pfnPrintf(pHlp, "FPU - x87 FPU on Chip                  = %d (%d)\n",  !!(uEdxGst & RT_BIT( 0)),  !!(uEdxHst & RT_BIT( 0)));
     4839                pHlp->pfnPrintf(pHlp, "VME - Virtual 8086 Mode Enhancements   = %d (%d)\n",  !!(uEdxGst & RT_BIT( 1)),  !!(uEdxHst & RT_BIT( 1)));
     4840                pHlp->pfnPrintf(pHlp, "DE - Debugging extensions              = %d (%d)\n",  !!(uEdxGst & RT_BIT( 2)),  !!(uEdxHst & RT_BIT( 2)));
     4841                pHlp->pfnPrintf(pHlp, "PSE - Page Size Extension              = %d (%d)\n",  !!(uEdxGst & RT_BIT( 3)),  !!(uEdxHst & RT_BIT( 3)));
     4842                pHlp->pfnPrintf(pHlp, "TSC - Time Stamp Counter               = %d (%d)\n",  !!(uEdxGst & RT_BIT( 4)),  !!(uEdxHst & RT_BIT( 4)));
     4843                pHlp->pfnPrintf(pHlp, "MSR - K86 Model Specific Registers     = %d (%d)\n",  !!(uEdxGst & RT_BIT( 5)),  !!(uEdxHst & RT_BIT( 5)));
     4844                pHlp->pfnPrintf(pHlp, "PAE - Physical Address Extension       = %d (%d)\n",  !!(uEdxGst & RT_BIT( 6)),  !!(uEdxHst & RT_BIT( 6)));
     4845                pHlp->pfnPrintf(pHlp, "MCE - Machine Check Exception          = %d (%d)\n",  !!(uEdxGst & RT_BIT( 7)),  !!(uEdxHst & RT_BIT( 7)));
     4846                pHlp->pfnPrintf(pHlp, "CX8 - CMPXCHG8B instruction            = %d (%d)\n",  !!(uEdxGst & RT_BIT( 8)),  !!(uEdxHst & RT_BIT( 8)));
     4847                pHlp->pfnPrintf(pHlp, "APIC - APIC On-Chip                    = %d (%d)\n",  !!(uEdxGst & RT_BIT( 9)),  !!(uEdxHst & RT_BIT( 9)));
     4848                pHlp->pfnPrintf(pHlp, "10 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(10)),  !!(uEdxHst & RT_BIT(10)));
     4849                pHlp->pfnPrintf(pHlp, "SEP - SYSCALL and SYSRET               = %d (%d)\n",  !!(uEdxGst & RT_BIT(11)),  !!(uEdxHst & RT_BIT(11)));
     4850                pHlp->pfnPrintf(pHlp, "MTRR - Memory Type Range Registers     = %d (%d)\n",  !!(uEdxGst & RT_BIT(12)),  !!(uEdxHst & RT_BIT(12)));
     4851                pHlp->pfnPrintf(pHlp, "PGE - PTE Global Bit                   = %d (%d)\n",  !!(uEdxGst & RT_BIT(13)),  !!(uEdxHst & RT_BIT(13)));
     4852                pHlp->pfnPrintf(pHlp, "MCA - Machine Check Architecture       = %d (%d)\n",  !!(uEdxGst & RT_BIT(14)),  !!(uEdxHst & RT_BIT(14)));
     4853                pHlp->pfnPrintf(pHlp, "CMOV - Conditional Move Instructions   = %d (%d)\n",  !!(uEdxGst & RT_BIT(15)),  !!(uEdxHst & RT_BIT(15)));
     4854                pHlp->pfnPrintf(pHlp, "PAT - Page Attribute Table             = %d (%d)\n",  !!(uEdxGst & RT_BIT(16)),  !!(uEdxHst & RT_BIT(16)));
     4855                pHlp->pfnPrintf(pHlp, "PSE-36 - 36-bit Page Size Extention    = %d (%d)\n",  !!(uEdxGst & RT_BIT(17)),  !!(uEdxHst & RT_BIT(17)));
     4856                pHlp->pfnPrintf(pHlp, "18 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(18)),  !!(uEdxHst & RT_BIT(18)));
     4857                pHlp->pfnPrintf(pHlp, "19 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(19)),  !!(uEdxHst & RT_BIT(19)));
     4858                pHlp->pfnPrintf(pHlp, "NX - No-Execute Page Protection        = %d (%d)\n",  !!(uEdxGst & RT_BIT(20)),  !!(uEdxHst & RT_BIT(20)));
     4859                pHlp->pfnPrintf(pHlp, "DS - Debug Store                       = %d (%d)\n",  !!(uEdxGst & RT_BIT(21)),  !!(uEdxHst & RT_BIT(21)));
     4860                pHlp->pfnPrintf(pHlp, "AXMMX - AMD Extensions to MMX Instr.   = %d (%d)\n",  !!(uEdxGst & RT_BIT(22)),  !!(uEdxHst & RT_BIT(22)));
     4861                pHlp->pfnPrintf(pHlp, "MMX - Intel MMX Technology             = %d (%d)\n",  !!(uEdxGst & RT_BIT(23)),  !!(uEdxHst & RT_BIT(23)));
     4862                pHlp->pfnPrintf(pHlp, "FXSR - FXSAVE and FXRSTOR Instructions = %d (%d)\n",  !!(uEdxGst & RT_BIT(24)),  !!(uEdxHst & RT_BIT(24)));
     4863                pHlp->pfnPrintf(pHlp, "25 - AMD fast FXSAVE and FXRSTOR Instr.= %d (%d)\n",  !!(uEdxGst & RT_BIT(25)),  !!(uEdxHst & RT_BIT(25)));
     4864                pHlp->pfnPrintf(pHlp, "26 - 1 GB large page support           = %d (%d)\n",  !!(uEdxGst & RT_BIT(26)),  !!(uEdxHst & RT_BIT(26)));
     4865                pHlp->pfnPrintf(pHlp, "27 - RDTSCP instruction                = %d (%d)\n",  !!(uEdxGst & RT_BIT(27)),  !!(uEdxHst & RT_BIT(27)));
     4866                pHlp->pfnPrintf(pHlp, "28 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(28)),  !!(uEdxHst & RT_BIT(28)));
     4867                pHlp->pfnPrintf(pHlp, "29 - AMD Long Mode                     = %d (%d)\n",  !!(uEdxGst & RT_BIT(29)),  !!(uEdxHst & RT_BIT(29)));
     4868                pHlp->pfnPrintf(pHlp, "30 - AMD Extensions to 3DNow!          = %d (%d)\n",  !!(uEdxGst & RT_BIT(30)),  !!(uEdxHst & RT_BIT(30)));
     4869                pHlp->pfnPrintf(pHlp, "31 - AMD 3DNow!                        = %d (%d)\n",  !!(uEdxGst & RT_BIT(31)),  !!(uEdxHst & RT_BIT(31)));
     4870
     4871                uint32_t uEcxGst = pCurLeaf->uEcx;
     4872                uint32_t uEcxHst = Host.uEcx;
     4873                pHlp->pfnPrintf(pHlp, "LahfSahf - LAHF/SAHF in 64-bit mode    = %d (%d)\n",  !!(uEcxGst & RT_BIT( 0)),  !!(uEcxHst & RT_BIT( 0)));
     4874                pHlp->pfnPrintf(pHlp, "CmpLegacy - Core MP legacy mode (depr) = %d (%d)\n",  !!(uEcxGst & RT_BIT( 1)),  !!(uEcxHst & RT_BIT( 1)));
     4875                pHlp->pfnPrintf(pHlp, "SVM - AMD VM Extensions                = %d (%d)\n",  !!(uEcxGst & RT_BIT( 2)),  !!(uEcxHst & RT_BIT( 2)));
     4876                pHlp->pfnPrintf(pHlp, "APIC registers starting at 0x400       = %d (%d)\n",  !!(uEcxGst & RT_BIT( 3)),  !!(uEcxHst & RT_BIT( 3)));
     4877                pHlp->pfnPrintf(pHlp, "AltMovCR8 - LOCK MOV CR0 means MOV CR8 = %d (%d)\n",  !!(uEcxGst & RT_BIT( 4)),  !!(uEcxHst & RT_BIT( 4)));
     4878                pHlp->pfnPrintf(pHlp, "5  - Advanced bit manipulation         = %d (%d)\n",  !!(uEcxGst & RT_BIT( 5)),  !!(uEcxHst & RT_BIT( 5)));
     4879                pHlp->pfnPrintf(pHlp, "6  - SSE4A instruction support         = %d (%d)\n",  !!(uEcxGst & RT_BIT( 6)),  !!(uEcxHst & RT_BIT( 6)));
     4880                pHlp->pfnPrintf(pHlp, "7  - Misaligned SSE mode               = %d (%d)\n",  !!(uEcxGst & RT_BIT( 7)),  !!(uEcxHst & RT_BIT( 7)));
     4881                pHlp->pfnPrintf(pHlp, "8  - PREFETCH and PREFETCHW instruction= %d (%d)\n",  !!(uEcxGst & RT_BIT( 8)),  !!(uEcxHst & RT_BIT( 8)));
     4882                pHlp->pfnPrintf(pHlp, "9  - OS visible workaround             = %d (%d)\n",  !!(uEcxGst & RT_BIT( 9)),  !!(uEcxHst & RT_BIT( 9)));
     4883                pHlp->pfnPrintf(pHlp, "10 - Instruction based sampling        = %d (%d)\n",  !!(uEcxGst & RT_BIT(10)),  !!(uEcxHst & RT_BIT(10)));
     4884                pHlp->pfnPrintf(pHlp, "11 - SSE5 support                      = %d (%d)\n",  !!(uEcxGst & RT_BIT(11)),  !!(uEcxHst & RT_BIT(11)));
     4885                pHlp->pfnPrintf(pHlp, "12 - SKINIT, STGI, and DEV support     = %d (%d)\n",  !!(uEcxGst & RT_BIT(12)),  !!(uEcxHst & RT_BIT(12)));
     4886                pHlp->pfnPrintf(pHlp, "13 - Watchdog timer support.           = %d (%d)\n",  !!(uEcxGst & RT_BIT(13)),  !!(uEcxHst & RT_BIT(13)));
     4887                pHlp->pfnPrintf(pHlp, "31:14 - Reserved                       = %#x (%#x)\n",   uEcxGst >> 14,          uEcxHst >> 14);
    49864888            }
    49874889        }
    4988     }
     4890
     4891        if (iVerbosity && (pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000002), 0)) != NULL)
     4892        {
     4893            char szString[4*4*3+1] = {0};
     4894            uint32_t *pu32 = (uint32_t *)szString;
     4895            *pu32++ = pCurLeaf->uEax;
     4896            *pu32++ = pCurLeaf->uEbx;
     4897            *pu32++ = pCurLeaf->uEcx;
     4898            *pu32++ = pCurLeaf->uEdx;
     4899            pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000003), 0);
     4900            if (pCurLeaf)
     4901            {
     4902                *pu32++ = pCurLeaf->uEax;
     4903                *pu32++ = pCurLeaf->uEbx;
     4904                *pu32++ = pCurLeaf->uEcx;
     4905                *pu32++ = pCurLeaf->uEdx;
     4906            }
     4907            pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000004), 0);
     4908            if (pCurLeaf)
     4909            {
     4910                *pu32++ = pCurLeaf->uEax;
     4911                *pu32++ = pCurLeaf->uEbx;
     4912                *pu32++ = pCurLeaf->uEcx;
     4913                *pu32++ = pCurLeaf->uEdx;
     4914            }
     4915            pHlp->pfnPrintf(pHlp, "Full Name:                       %s\n", szString);
     4916        }
     4917
     4918        if (iVerbosity && (pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000005), 0)) != NULL)
     4919        {
     4920            uint32_t uEAX = pCurLeaf->uEax;
     4921            uint32_t uEBX = pCurLeaf->uEbx;
     4922            uint32_t uECX = pCurLeaf->uEcx;
     4923            uint32_t uEDX = pCurLeaf->uEdx;
     4924            char sz1[32];
     4925            char sz2[32];
     4926
     4927            pHlp->pfnPrintf(pHlp,
     4928                            "TLB 2/4M Instr/Uni:              %s %3d entries\n"
     4929                            "TLB 2/4M Data:                   %s %3d entries\n",
     4930                            getCacheAss((uEAX >>  8) & 0xff, sz1), (uEAX >>  0) & 0xff,
     4931                            getCacheAss((uEAX >> 24) & 0xff, sz2), (uEAX >> 16) & 0xff);
     4932            pHlp->pfnPrintf(pHlp,
     4933                            "TLB 4K Instr/Uni:                %s %3d entries\n"
     4934                            "TLB 4K Data:                     %s %3d entries\n",
     4935                            getCacheAss((uEBX >>  8) & 0xff, sz1), (uEBX >>  0) & 0xff,
     4936                            getCacheAss((uEBX >> 24) & 0xff, sz2), (uEBX >> 16) & 0xff);
     4937            pHlp->pfnPrintf(pHlp, "L1 Instr Cache Line Size:        %d bytes\n"
     4938                            "L1 Instr Cache Lines Per Tag:    %d\n"
     4939                            "L1 Instr Cache Associativity:    %s\n"
     4940                            "L1 Instr Cache Size:             %d KB\n",
     4941                            (uEDX >> 0) & 0xff,
     4942                            (uEDX >> 8) & 0xff,
     4943                            getCacheAss((uEDX >> 16) & 0xff, sz1),
     4944                            (uEDX >> 24) & 0xff);
     4945            pHlp->pfnPrintf(pHlp,
     4946                            "L1 Data Cache Line Size:         %d bytes\n"
     4947                            "L1 Data Cache Lines Per Tag:     %d\n"
     4948                            "L1 Data Cache Associativity:     %s\n"
     4949                            "L1 Data Cache Size:              %d KB\n",
     4950                            (uECX >> 0) & 0xff,
     4951                            (uECX >> 8) & 0xff,
     4952                            getCacheAss((uECX >> 16) & 0xff, sz1),
     4953                            (uECX >> 24) & 0xff);
     4954        }
     4955
     4956        if (iVerbosity && (pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000006), 0)) != NULL)
     4957        {
     4958            uint32_t uEAX = pCurLeaf->uEax;
     4959            uint32_t uEBX = pCurLeaf->uEbx;
     4960            uint32_t uEDX = pCurLeaf->uEdx;
     4961
     4962            pHlp->pfnPrintf(pHlp,
     4963                            "L2 TLB 2/4M Instr/Uni:           %s %4d entries\n"
     4964                            "L2 TLB 2/4M Data:                %s %4d entries\n",
     4965                            getL2CacheAss((uEAX >> 12) & 0xf),  (uEAX >>  0) & 0xfff,
     4966                            getL2CacheAss((uEAX >> 28) & 0xf),  (uEAX >> 16) & 0xfff);
     4967            pHlp->pfnPrintf(pHlp,
     4968                            "L2 TLB 4K Instr/Uni:             %s %4d entries\n"
     4969                            "L2 TLB 4K Data:                  %s %4d entries\n",
     4970                            getL2CacheAss((uEBX >> 12) & 0xf),  (uEBX >>  0) & 0xfff,
     4971                            getL2CacheAss((uEBX >> 28) & 0xf),  (uEBX >> 16) & 0xfff);
     4972            pHlp->pfnPrintf(pHlp,
     4973                            "L2 Cache Line Size:              %d bytes\n"
     4974                            "L2 Cache Lines Per Tag:          %d\n"
     4975                            "L2 Cache Associativity:          %s\n"
     4976                            "L2 Cache Size:                   %d KB\n",
     4977                            (uEDX >> 0) & 0xff,
     4978                            (uEDX >> 8) & 0xf,
     4979                            getL2CacheAss((uEDX >> 12) & 0xf),
     4980                            (uEDX >> 16) & 0xffff);
     4981        }
     4982
     4983        if (iVerbosity && (pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000007), 0)) != NULL)
     4984        {
     4985            uint32_t uEDX = pCurLeaf->uEdx;
     4986
     4987            pHlp->pfnPrintf(pHlp, "APM Features:                   ");
     4988            if (uEDX & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " TS");
     4989            if (uEDX & RT_BIT(1))   pHlp->pfnPrintf(pHlp, " FID");
     4990            if (uEDX & RT_BIT(2))   pHlp->pfnPrintf(pHlp, " VID");
     4991            if (uEDX & RT_BIT(3))   pHlp->pfnPrintf(pHlp, " TTP");
     4992            if (uEDX & RT_BIT(4))   pHlp->pfnPrintf(pHlp, " TM");
     4993            if (uEDX & RT_BIT(5))   pHlp->pfnPrintf(pHlp, " STC");
     4994            if (uEDX & RT_BIT(6))   pHlp->pfnPrintf(pHlp, " MC");
     4995            if (uEDX & RT_BIT(7))   pHlp->pfnPrintf(pHlp, " HWPSTATE");
     4996            if (uEDX & RT_BIT(8))   pHlp->pfnPrintf(pHlp, " TscInvariant");
     4997            if (uEDX & RT_BIT(9))   pHlp->pfnPrintf(pHlp, " CPB");
     4998            if (uEDX & RT_BIT(10))  pHlp->pfnPrintf(pHlp, " EffFreqRO");
     4999            if (uEDX & RT_BIT(11))  pHlp->pfnPrintf(pHlp, " PFI");
     5000            if (uEDX & RT_BIT(12))  pHlp->pfnPrintf(pHlp, " PA");
     5001            for (unsigned iBit = 13; iBit < 32; iBit++)
     5002                if (uEDX & RT_BIT(iBit))
     5003                    pHlp->pfnPrintf(pHlp, " %d", iBit);
     5004            pHlp->pfnPrintf(pHlp, "\n");
     5005
     5006            ASMCpuIdExSlow(UINT32_C(0x80000007), 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     5007            pHlp->pfnPrintf(pHlp, "Host Invariant-TSC support:      %RTbool\n",
     5008                            cHstMax >= UINT32_C(0x80000007) && (Host.uEdx & RT_BIT(8)));
     5009
     5010        }
     5011
     5012        if (iVerbosity && (pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0x80000008), 0)) != NULL)
     5013        {
     5014            uint32_t uEAX = pCurLeaf->uEax;
     5015            uint32_t uECX = pCurLeaf->uEcx;
     5016
     5017            pHlp->pfnPrintf(pHlp,
     5018                            "Physical Address Width:          %d bits\n"
     5019                            "Virtual Address Width:           %d bits\n"
     5020                            "Guest Physical Address Width:    %d bits\n",
     5021                            (uEAX >> 0) & 0xff,
     5022                            (uEAX >> 8) & 0xff,
     5023                            (uEAX >> 16) & 0xff);
     5024            pHlp->pfnPrintf(pHlp,
     5025                            "Physical Core Count:             %d\n",
     5026                            (uECX >> 0) & 0xff);
     5027        }
     5028
     5029        pCurLeaf = pNextLeaf;
     5030    }
     5031
     5032
    49895033
    49905034    /*
    49915035     * Centaur.
    49925036     */
    4993     unsigned cCentaurMax = pVM->cpum.s.aGuestCpuIdPatmCentaur[0].uEax & 0xffff;
    4994 
    4995     pHlp->pfnPrintf(pHlp,
    4996                     "\n"
    4997                     "         RAW Centaur CPUIDs\n"
    4998                     "     Function  eax      ebx      ecx      edx\n");
    4999     for (unsigned i = 0; i < RT_ELEMENTS(pVM->cpum.s.aGuestCpuIdPatmCentaur); i++)
    5000     {
    5001         Guest = pVM->cpum.s.aGuestCpuIdPatmCentaur[i];
    5002         ASMCpuIdExSlow(0xc0000000 | i, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    5003 
    5004         pHlp->pfnPrintf(pHlp,
    5005                         "Gst: %08x  %08x %08x %08x %08x%s\n"
    5006                         "Hst:           %08x %08x %08x %08x\n",
    5007                         0xc0000000 | i, Guest.uEax, Guest.uEbx, Guest.uEcx, Guest.uEdx,
    5008                         i <= cCentaurMax ? "" : "*",
    5009                         Host.uEax, Host.uEbx, Host.uEcx, Host.uEdx);
     5037    pCurLeaf = cpumR3CpuIdInfoRawRange(pHlp, paLeaves, cLeaves, pCurLeaf, UINT32_C(0xbfffffff), "Unknown CPUID Leaves");
     5038
     5039    ASMCpuIdExSlow(UINT32_C(0xc0000000), 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     5040    cHstMax  = Host.uEax >= UINT32_C(0xc0000001) && Host.uEax <= UINT32_C(0xc0000fff)
     5041             ? RT_MIN(Host.uEax,      UINT32_C(0xc0000fff)) : 0;
     5042    cGstMax  = pCurLeaf - paLeaves < cLeaves && pCurLeaf->uLeaf == UINT32_C(0xc0000000)
     5043             ? RT_MIN(pCurLeaf->uEax, UINT32_C(0xc0000fff)) : 0;
     5044    cMax     = RT_MAX(cHstMax, cGstMax);
     5045    if (cMax >= UINT32_C(0xc0000000))
     5046    {
     5047        pNextLeaf = cpumR3CpuIdInfoRawRange(pHlp, paLeaves, cLeaves, pCurLeaf, cMax, "Raw Centaur CPUID Leaves");
     5048
     5049        /*
     5050         * Understandable output
     5051         */
     5052        if (iVerbosity && (pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0xc0000000), 0)) != NULL)
     5053            pHlp->pfnPrintf(pHlp,
     5054                            "Centaur Supports:                0xc0000000-%#010x\n",
     5055                            pCurLeaf->uEax);
     5056
     5057        if (iVerbosity && (pCurLeaf = cpumR3CpuIdGetLeaf(paLeaves, cLeaves, UINT32_C(0xc0000001), 0)) != NULL)
     5058        {
     5059            ASMCpuIdExSlow(0xc0000001, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
     5060            uint32_t uEdxGst = pCurLeaf->uEdx;
     5061            uint32_t uEdxHst = Host.uEdx;
     5062
     5063            if (iVerbosity == 1)
     5064            {
     5065                pHlp->pfnPrintf(pHlp, "Centaur Features EDX:           ");
     5066                if (uEdxGst & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " AIS");
     5067                if (uEdxGst & RT_BIT(1))   pHlp->pfnPrintf(pHlp, " AIS-E");
     5068                if (uEdxGst & RT_BIT(2))   pHlp->pfnPrintf(pHlp, " RNG");
     5069                if (uEdxGst & RT_BIT(3))   pHlp->pfnPrintf(pHlp, " RNG-E");
     5070                if (uEdxGst & RT_BIT(4))   pHlp->pfnPrintf(pHlp, " LH");
     5071                if (uEdxGst & RT_BIT(5))   pHlp->pfnPrintf(pHlp, " FEMMS");
     5072                if (uEdxGst & RT_BIT(6))   pHlp->pfnPrintf(pHlp, " ACE");
     5073                if (uEdxGst & RT_BIT(7))   pHlp->pfnPrintf(pHlp, " ACE-E");
     5074                /* possibly indicating MM/HE and MM/HE-E on older chips... */
     5075                if (uEdxGst & RT_BIT(8))   pHlp->pfnPrintf(pHlp, " ACE2");
     5076                if (uEdxGst & RT_BIT(9))   pHlp->pfnPrintf(pHlp, " ACE2-E");
     5077                if (uEdxGst & RT_BIT(10))  pHlp->pfnPrintf(pHlp, " PHE");
     5078                if (uEdxGst & RT_BIT(11))  pHlp->pfnPrintf(pHlp, " PHE-E");
     5079                if (uEdxGst & RT_BIT(12))  pHlp->pfnPrintf(pHlp, " PMM");
     5080                if (uEdxGst & RT_BIT(13))  pHlp->pfnPrintf(pHlp, " PMM-E");
     5081                for (unsigned iBit = 14; iBit < 32; iBit++)
     5082                    if (uEdxGst & RT_BIT(iBit))
     5083                        pHlp->pfnPrintf(pHlp, " %d", iBit);
     5084                pHlp->pfnPrintf(pHlp, "\n");
     5085            }
     5086            else
     5087            {
     5088                pHlp->pfnPrintf(pHlp, "Mnemonic - Description                 = guest (host)\n");
     5089                pHlp->pfnPrintf(pHlp, "AIS - Alternate Instruction Set        = %d (%d)\n",  !!(uEdxGst & RT_BIT( 0)),  !!(uEdxHst & RT_BIT( 0)));
     5090                pHlp->pfnPrintf(pHlp, "AIS-E - AIS enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT( 1)),  !!(uEdxHst & RT_BIT( 1)));
     5091                pHlp->pfnPrintf(pHlp, "RNG - Random Number Generator          = %d (%d)\n",  !!(uEdxGst & RT_BIT( 2)),  !!(uEdxHst & RT_BIT( 2)));
     5092                pHlp->pfnPrintf(pHlp, "RNG-E - RNG enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT( 3)),  !!(uEdxHst & RT_BIT( 3)));
     5093                pHlp->pfnPrintf(pHlp, "LH - LongHaul MSR 0000_110Ah           = %d (%d)\n",  !!(uEdxGst & RT_BIT( 4)),  !!(uEdxHst & RT_BIT( 4)));
     5094                pHlp->pfnPrintf(pHlp, "FEMMS - FEMMS                          = %d (%d)\n",  !!(uEdxGst & RT_BIT( 5)),  !!(uEdxHst & RT_BIT( 5)));
     5095                pHlp->pfnPrintf(pHlp, "ACE - Advanced Cryptography Engine     = %d (%d)\n",  !!(uEdxGst & RT_BIT( 6)),  !!(uEdxHst & RT_BIT( 6)));
     5096                pHlp->pfnPrintf(pHlp, "ACE-E - ACE enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT( 7)),  !!(uEdxHst & RT_BIT( 7)));
     5097                /* possibly indicating MM/HE and MM/HE-E on older chips... */
     5098                pHlp->pfnPrintf(pHlp, "ACE2 - Advanced Cryptography Engine 2  = %d (%d)\n",  !!(uEdxGst & RT_BIT( 8)),  !!(uEdxHst & RT_BIT( 8)));
     5099                pHlp->pfnPrintf(pHlp, "ACE2-E - ACE enabled                   = %d (%d)\n",  !!(uEdxGst & RT_BIT( 9)),  !!(uEdxHst & RT_BIT( 9)));
     5100                pHlp->pfnPrintf(pHlp, "PHE - Padlock Hash Engine              = %d (%d)\n",  !!(uEdxGst & RT_BIT(10)),  !!(uEdxHst & RT_BIT(10)));
     5101                pHlp->pfnPrintf(pHlp, "PHE-E - PHE enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT(11)),  !!(uEdxHst & RT_BIT(11)));
     5102                pHlp->pfnPrintf(pHlp, "PMM - Montgomery Multiplier            = %d (%d)\n",  !!(uEdxGst & RT_BIT(12)),  !!(uEdxHst & RT_BIT(12)));
     5103                pHlp->pfnPrintf(pHlp, "PMM-E - PMM enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT(13)),  !!(uEdxHst & RT_BIT(13)));
     5104                pHlp->pfnPrintf(pHlp, "14 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(14)),  !!(uEdxHst & RT_BIT(14)));
     5105                pHlp->pfnPrintf(pHlp, "15 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(15)),  !!(uEdxHst & RT_BIT(15)));
     5106                pHlp->pfnPrintf(pHlp, "Parallax                               = %d (%d)\n",  !!(uEdxGst & RT_BIT(16)),  !!(uEdxHst & RT_BIT(16)));
     5107                pHlp->pfnPrintf(pHlp, "Parallax enabled                       = %d (%d)\n",  !!(uEdxGst & RT_BIT(17)),  !!(uEdxHst & RT_BIT(17)));
     5108                pHlp->pfnPrintf(pHlp, "Overstress                             = %d (%d)\n",  !!(uEdxGst & RT_BIT(18)),  !!(uEdxHst & RT_BIT(18)));
     5109                pHlp->pfnPrintf(pHlp, "Overstress enabled                     = %d (%d)\n",  !!(uEdxGst & RT_BIT(19)),  !!(uEdxHst & RT_BIT(19)));
     5110                pHlp->pfnPrintf(pHlp, "TM3 - Temperature Monitoring 3         = %d (%d)\n",  !!(uEdxGst & RT_BIT(20)),  !!(uEdxHst & RT_BIT(20)));
     5111                pHlp->pfnPrintf(pHlp, "TM3-E - TM3 enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT(21)),  !!(uEdxHst & RT_BIT(21)));
     5112                pHlp->pfnPrintf(pHlp, "RNG2 - Random Number Generator 2       = %d (%d)\n",  !!(uEdxGst & RT_BIT(22)),  !!(uEdxHst & RT_BIT(22)));
     5113                pHlp->pfnPrintf(pHlp, "RNG2-E - RNG2 enabled                  = %d (%d)\n",  !!(uEdxGst & RT_BIT(23)),  !!(uEdxHst & RT_BIT(23)));
     5114                pHlp->pfnPrintf(pHlp, "24 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(24)),  !!(uEdxHst & RT_BIT(24)));
     5115                pHlp->pfnPrintf(pHlp, "PHE2 - Padlock Hash Engine 2           = %d (%d)\n",  !!(uEdxGst & RT_BIT(25)),  !!(uEdxHst & RT_BIT(25)));
     5116                pHlp->pfnPrintf(pHlp, "PHE2-E - PHE2 enabled                  = %d (%d)\n",  !!(uEdxGst & RT_BIT(26)),  !!(uEdxHst & RT_BIT(26)));
     5117                for (unsigned iBit = 27; iBit < 32; iBit++)
     5118                    if ((uEdxGst | uEdxHst) & RT_BIT(iBit))
     5119                        pHlp->pfnPrintf(pHlp, "Bit %d                                 = %d (%d)\n", iBit, !!(uEdxGst & RT_BIT(iBit)), !!(uEdxHst & RT_BIT(iBit)));
     5120                pHlp->pfnPrintf(pHlp, "\n");
     5121            }
     5122        }
     5123
     5124        pCurLeaf = pNextLeaf;
    50105125    }
    50115126
    50125127    /*
    5013      * Understandable output
    5014      */
    5015     if (iVerbosity)
    5016     {
    5017         Guest = pVM->cpum.s.aGuestCpuIdPatmCentaur[0];
    5018         pHlp->pfnPrintf(pHlp,
    5019                         "Centaur Supports:                0xc0000000-%#010x\n",
    5020                         Guest.uEax);
    5021     }
    5022 
    5023     if (iVerbosity && cCentaurMax >= 1)
    5024     {
    5025         ASMCpuIdExSlow(0xc0000001, 0, 0, 0, &Host.uEax, &Host.uEbx, &Host.uEcx, &Host.uEdx);
    5026         uint32_t uEdxGst = pVM->cpum.s.aGuestCpuIdPatmCentaur[1].uEdx;
    5027         uint32_t uEdxHst = Host.uEdx;
    5028 
    5029         if (iVerbosity == 1)
    5030         {
    5031             pHlp->pfnPrintf(pHlp, "Centaur Features EDX:           ");
    5032             if (uEdxGst & RT_BIT(0))   pHlp->pfnPrintf(pHlp, " AIS");
    5033             if (uEdxGst & RT_BIT(1))   pHlp->pfnPrintf(pHlp, " AIS-E");
    5034             if (uEdxGst & RT_BIT(2))   pHlp->pfnPrintf(pHlp, " RNG");
    5035             if (uEdxGst & RT_BIT(3))   pHlp->pfnPrintf(pHlp, " RNG-E");
    5036             if (uEdxGst & RT_BIT(4))   pHlp->pfnPrintf(pHlp, " LH");
    5037             if (uEdxGst & RT_BIT(5))   pHlp->pfnPrintf(pHlp, " FEMMS");
    5038             if (uEdxGst & RT_BIT(6))   pHlp->pfnPrintf(pHlp, " ACE");
    5039             if (uEdxGst & RT_BIT(7))   pHlp->pfnPrintf(pHlp, " ACE-E");
    5040             /* possibly indicating MM/HE and MM/HE-E on older chips... */
    5041             if (uEdxGst & RT_BIT(8))   pHlp->pfnPrintf(pHlp, " ACE2");
    5042             if (uEdxGst & RT_BIT(9))   pHlp->pfnPrintf(pHlp, " ACE2-E");
    5043             if (uEdxGst & RT_BIT(10))  pHlp->pfnPrintf(pHlp, " PHE");
    5044             if (uEdxGst & RT_BIT(11))  pHlp->pfnPrintf(pHlp, " PHE-E");
    5045             if (uEdxGst & RT_BIT(12))  pHlp->pfnPrintf(pHlp, " PMM");
    5046             if (uEdxGst & RT_BIT(13))  pHlp->pfnPrintf(pHlp, " PMM-E");
    5047             for (unsigned iBit = 14; iBit < 32; iBit++)
    5048                 if (uEdxGst & RT_BIT(iBit))
    5049                     pHlp->pfnPrintf(pHlp, " %d", iBit);
    5050             pHlp->pfnPrintf(pHlp, "\n");
    5051         }
    5052         else
    5053         {
    5054             pHlp->pfnPrintf(pHlp, "Mnemonic - Description                 = guest (host)\n");
    5055             pHlp->pfnPrintf(pHlp, "AIS - Alternate Instruction Set        = %d (%d)\n",  !!(uEdxGst & RT_BIT( 0)),  !!(uEdxHst & RT_BIT( 0)));
    5056             pHlp->pfnPrintf(pHlp, "AIS-E - AIS enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT( 1)),  !!(uEdxHst & RT_BIT( 1)));
    5057             pHlp->pfnPrintf(pHlp, "RNG - Random Number Generator          = %d (%d)\n",  !!(uEdxGst & RT_BIT( 2)),  !!(uEdxHst & RT_BIT( 2)));
    5058             pHlp->pfnPrintf(pHlp, "RNG-E - RNG enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT( 3)),  !!(uEdxHst & RT_BIT( 3)));
    5059             pHlp->pfnPrintf(pHlp, "LH - LongHaul MSR 0000_110Ah           = %d (%d)\n",  !!(uEdxGst & RT_BIT( 4)),  !!(uEdxHst & RT_BIT( 4)));
    5060             pHlp->pfnPrintf(pHlp, "FEMMS - FEMMS                          = %d (%d)\n",  !!(uEdxGst & RT_BIT( 5)),  !!(uEdxHst & RT_BIT( 5)));
    5061             pHlp->pfnPrintf(pHlp, "ACE - Advanced Cryptography Engine     = %d (%d)\n",  !!(uEdxGst & RT_BIT( 6)),  !!(uEdxHst & RT_BIT( 6)));
    5062             pHlp->pfnPrintf(pHlp, "ACE-E - ACE enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT( 7)),  !!(uEdxHst & RT_BIT( 7)));
    5063             /* possibly indicating MM/HE and MM/HE-E on older chips... */
    5064             pHlp->pfnPrintf(pHlp, "ACE2 - Advanced Cryptography Engine 2  = %d (%d)\n",  !!(uEdxGst & RT_BIT( 8)),  !!(uEdxHst & RT_BIT( 8)));
    5065             pHlp->pfnPrintf(pHlp, "ACE2-E - ACE enabled                   = %d (%d)\n",  !!(uEdxGst & RT_BIT( 9)),  !!(uEdxHst & RT_BIT( 9)));
    5066             pHlp->pfnPrintf(pHlp, "PHE - Padlock Hash Engine              = %d (%d)\n",  !!(uEdxGst & RT_BIT(10)),  !!(uEdxHst & RT_BIT(10)));
    5067             pHlp->pfnPrintf(pHlp, "PHE-E - PHE enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT(11)),  !!(uEdxHst & RT_BIT(11)));
    5068             pHlp->pfnPrintf(pHlp, "PMM - Montgomery Multiplier            = %d (%d)\n",  !!(uEdxGst & RT_BIT(12)),  !!(uEdxHst & RT_BIT(12)));
    5069             pHlp->pfnPrintf(pHlp, "PMM-E - PMM enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT(13)),  !!(uEdxHst & RT_BIT(13)));
    5070             pHlp->pfnPrintf(pHlp, "14 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(14)),  !!(uEdxHst & RT_BIT(14)));
    5071             pHlp->pfnPrintf(pHlp, "15 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(15)),  !!(uEdxHst & RT_BIT(15)));
    5072             pHlp->pfnPrintf(pHlp, "Parallax                               = %d (%d)\n",  !!(uEdxGst & RT_BIT(16)),  !!(uEdxHst & RT_BIT(16)));
    5073             pHlp->pfnPrintf(pHlp, "Parallax enabled                       = %d (%d)\n",  !!(uEdxGst & RT_BIT(17)),  !!(uEdxHst & RT_BIT(17)));
    5074             pHlp->pfnPrintf(pHlp, "Overstress                             = %d (%d)\n",  !!(uEdxGst & RT_BIT(18)),  !!(uEdxHst & RT_BIT(18)));
    5075             pHlp->pfnPrintf(pHlp, "Overstress enabled                     = %d (%d)\n",  !!(uEdxGst & RT_BIT(19)),  !!(uEdxHst & RT_BIT(19)));
    5076             pHlp->pfnPrintf(pHlp, "TM3 - Temperature Monitoring 3         = %d (%d)\n",  !!(uEdxGst & RT_BIT(20)),  !!(uEdxHst & RT_BIT(20)));
    5077             pHlp->pfnPrintf(pHlp, "TM3-E - TM3 enabled                    = %d (%d)\n",  !!(uEdxGst & RT_BIT(21)),  !!(uEdxHst & RT_BIT(21)));
    5078             pHlp->pfnPrintf(pHlp, "RNG2 - Random Number Generator 2       = %d (%d)\n",  !!(uEdxGst & RT_BIT(22)),  !!(uEdxHst & RT_BIT(22)));
    5079             pHlp->pfnPrintf(pHlp, "RNG2-E - RNG2 enabled                  = %d (%d)\n",  !!(uEdxGst & RT_BIT(23)),  !!(uEdxHst & RT_BIT(23)));
    5080             pHlp->pfnPrintf(pHlp, "24 - Reserved                          = %d (%d)\n",  !!(uEdxGst & RT_BIT(24)),  !!(uEdxHst & RT_BIT(24)));
    5081             pHlp->pfnPrintf(pHlp, "PHE2 - Padlock Hash Engine 2           = %d (%d)\n",  !!(uEdxGst & RT_BIT(25)),  !!(uEdxHst & RT_BIT(25)));
    5082             pHlp->pfnPrintf(pHlp, "PHE2-E - PHE2 enabled                  = %d (%d)\n",  !!(uEdxGst & RT_BIT(26)),  !!(uEdxHst & RT_BIT(26)));
    5083             for (unsigned iBit = 27; iBit < 32; iBit++)
    5084                 if ((uEdxGst | uEdxHst) & RT_BIT(iBit))
    5085                     pHlp->pfnPrintf(pHlp, "Bit %d                                 = %d (%d)\n", iBit, !!(uEdxGst & RT_BIT(iBit)), !!(uEdxHst & RT_BIT(iBit)));
    5086             pHlp->pfnPrintf(pHlp, "\n");
    5087         }
    5088     }
     5128     * The remainder.
     5129     */
     5130    pCurLeaf = cpumR3CpuIdInfoRawRange(pHlp, paLeaves, cLeaves, pCurLeaf, UINT32_C(0xffffffff), "Unknown CPUID Leaves");
    50895131}
    50905132
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