VirtualBox

Changeset 44260 in vbox for trunk/src


Ignore:
Timestamp:
Jan 9, 2013 1:29:07 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
83131
Message:

Fixed ASMCpuId_Idx_ECX on windows (didn't consider ECX input).

Location:
trunk/src/VBox/Runtime
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/Makefile.kmk

    r44030 r44260  
    182182        common/asm/ASMAtomicCmpXchgU8.asm \
    183183        common/asm/ASMMultU64ByU32DivByU32.asm \
     184        common/asm/ASMCpuId_Idx_ECX.asm \
    184185        common/asm/ASMNopPause.asm
    185186
     
    189190RuntimeWin32ASM_SOURCES = \
    190191        common/asm/ASMAtomicCmpXchgU8.asm \
    191         common/asm/ASMMultU64ByU32DivByU32.asm
     192        common/asm/ASMMultU64ByU32DivByU32.asm \
     193        common/asm/ASMCpuId_Idx_ECX.asm
    192194
    193195#
  • trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp

    r33207 r44260  
    210210                      iStd, s.uEAX, s.uEBX, s.uECX, s.uEDX, iStd <= cFunctions ? "" : "*");
    211211
    212         if (iStd == 0x04 || iStd == 0x0b || iStd == 0x0d || iStd > cFunctions)
    213             continue; /* Leaf 04 and leaf 0d output depend on the initial value of ECX
    214                        * The same seems to apply to invalid standard functions */
    215 
    216         u32 = ASMCpuId_EAX(iStd);
    217         CHECKVAL(u32, s.uEAX, "%x");
    218         u32 = ASMCpuId_EBX(iStd);
    219         CHECKVAL(u32, s.uEBX, "%x");
    220         u32 = ASMCpuId_ECX(iStd);
    221         CHECKVAL(u32, s.uECX, "%x");
    222         u32 = ASMCpuId_EDX(iStd);
    223         CHECKVAL(u32, s.uEDX, "%x");
    224 
    225         uECX2 = s.uECX - 1;
    226         uEDX2 = s.uEDX - 1;
    227         ASMCpuId_ECX_EDX(iStd, &uECX2, &uEDX2);
    228         CHECKVAL(uECX2, s.uECX, "%x");
    229         CHECKVAL(uEDX2, s.uEDX, "%x");
     212        /* Leaf 04 and leaf 0d output depend on the initial value of ECX
     213         * The same seems to apply to invalid standard functions */
     214        if (iStd > cFunctions)
     215            continue;
     216        if (iStd != 0x04 && iStd != 0x0b && iStd != 0x0d)
     217        {
     218            u32 = ASMCpuId_EAX(iStd);
     219            CHECKVAL(u32, s.uEAX, "%x");
     220            u32 = ASMCpuId_EBX(iStd);
     221            CHECKVAL(u32, s.uEBX, "%x");
     222            u32 = ASMCpuId_ECX(iStd);
     223            CHECKVAL(u32, s.uECX, "%x");
     224            u32 = ASMCpuId_EDX(iStd);
     225            CHECKVAL(u32, s.uEDX, "%x");
     226
     227            uECX2 = s.uECX - 1;
     228            uEDX2 = s.uEDX - 1;
     229            ASMCpuId_ECX_EDX(iStd, &uECX2, &uEDX2);
     230            CHECKVAL(uECX2, s.uECX, "%x");
     231            CHECKVAL(uEDX2, s.uEDX, "%x");
     232        }
     233
     234        if (iStd == 0x04)
     235            for (uint32_t uECX = 1; s.uEAX & 0x1f; uECX++)
     236            {
     237                ASMCpuId_Idx_ECX(iStd, uECX, &s.uEAX, &s.uEBX, &s.uECX, &s.uEDX);
     238                RTTestIPrintf(RTTESTLVL_ALWAYS, "    [%02x]  %08x %08x %08x %08x\n", uECX, s.uEAX, s.uEBX, s.uECX, s.uEDX);
     239                RTTESTI_CHECK_BREAK(uECX < 128);
     240            }
     241        else if (iStd == 0x0b)
     242            for (uint32_t uECX = 1; (s.uEAX & 0x1f) && (s.uEBX & 0xffff); uECX++)
     243            {
     244                ASMCpuId_Idx_ECX(iStd, uECX, &s.uEAX, &s.uEBX, &s.uECX, &s.uEDX);
     245                RTTestIPrintf(RTTESTLVL_ALWAYS, "    [%02x]  %08x %08x %08x %08x\n", uECX, s.uEAX, s.uEBX, s.uECX, s.uEDX);
     246                RTTESTI_CHECK_BREAK(uECX < 128);
     247            }
     248        else if (iStd == 0x0d)
     249            for (uint32_t uECX = 1; s.uEAX != 0 || s.uEBX != 0 || s.uECX != 0 || s.uEDX != 0; uECX++)
     250            {
     251                ASMCpuId_Idx_ECX(iStd, uECX, &s.uEAX, &s.uEBX, &s.uECX, &s.uEDX);
     252                RTTestIPrintf(RTTESTLVL_ALWAYS, "    [%02x]  %08x %08x %08x %08x\n", uECX, s.uEAX, s.uEBX, s.uECX, s.uEDX);
     253                RTTESTI_CHECK_BREAK(uECX < 128);
     254            }
    230255    }
    231256
     
    15201545    tstASMCpuId();
    15211546#endif
     1547#if 1
    15221548    tstASMAtomicXchgU8();
    15231549    tstASMAtomicXchgU16();
     
    15501576
    15511577    tstASMBench();
     1578#endif
    15521579
    15531580    /*
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette