VirtualBox

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


Ignore:
Timestamp:
Jan 31, 2008 9:40:28 AM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
27709
Message:

Add CmpXchg functions to IPRT which additionally pass back the old value, including some testcases.

File:
1 edited

Legend:

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

    r5999 r6644  
    658658    CHECKOP(ASMAtomicCmpXchgU64(&u64, 0x80040008008efdULL, 0), true, "%d", bool);
    659659    CHECKVAL(u64, 0x80040008008efdULL, "%x");
     660}
     661
     662
     663static void tstASMAtomicCmpXchgExU32(void)
     664{
     665    uint32_t u32 = 0xffffffff;
     666    uint32_t u32Old = 0x80005111;
     667
     668    CHECKOP(ASMAtomicCmpXchgExU32(&u32, 0, 0, &u32Old), false, "%d", bool);
     669    CHECKVAL(u32, 0xffffffff, "%x");
     670    CHECKVAL(u32Old, 0xffffffff, "%x");
     671
     672    CHECKOP(ASMAtomicCmpXchgExU32(&u32, 0, 0xffffffff, &u32Old), true, "%d", bool);
     673    CHECKVAL(u32, 0, "%x");
     674    CHECKVAL(u32Old, 0xffffffff, "%x");
     675
     676    CHECKOP(ASMAtomicCmpXchgExU32(&u32, 0x8008efd, 0xffffffff, &u32Old), false, "%d", bool);
     677    CHECKVAL(u32, 0, "%x");
     678    CHECKVAL(u32Old, 0, "%x");
     679
     680    CHECKOP(ASMAtomicCmpXchgExU32(&u32, 0x8008efd, 0, &u32Old), true, "%d", bool);
     681    CHECKVAL(u32, 0x8008efd, "%x");
     682    CHECKVAL(u32Old, 0, "%x");
     683
     684    CHECKOP(ASMAtomicCmpXchgExU32(&u32, 0, 0x8008efd, &u32Old), true, "%d", bool);
     685    CHECKVAL(u32, 0, "%x");
     686    CHECKVAL(u32Old, 0x8008efd, "%x");
     687}
     688
     689
     690static void tstASMAtomicCmpXchgExU64(void)
     691{
     692    uint64_t u64 = 0xffffffffffffffffULL;
     693    uint64_t u64Old = 0x8000000051111111ULL;
     694
     695    CHECKOP(ASMAtomicCmpXchgExU64(&u64, 0, 0, &u64Old), false, "%d", bool);
     696    CHECKVAL(u64, 0xffffffffffffffffULL, "%llx");
     697    CHECKVAL(u64Old, 0xffffffffffffffffULL, "%llx");
     698
     699    CHECKOP(ASMAtomicCmpXchgExU64(&u64, 0, 0xffffffffffffffffULL, &u64Old), true, "%d", bool);
     700    CHECKVAL(u64, 0ULL, "%llx");
     701    CHECKVAL(u64Old, 0xffffffffffffffffULL, "%llx");
     702
     703    CHECKOP(ASMAtomicCmpXchgExU64(&u64, 0x80040008008efdULL, 0xffffffff, &u64Old), false, "%d", bool);
     704    CHECKVAL(u64, 0ULL, "%llx");
     705    CHECKVAL(u64Old, 0ULL, "%llx");
     706
     707    CHECKOP(ASMAtomicCmpXchgExU64(&u64, 0x80040008008efdULL, 0xffffffff00000000ULL, &u64Old), false, "%d", bool);
     708    CHECKVAL(u64, 0ULL, "%llx");
     709    CHECKVAL(u64Old, 0ULL, "%llx");
     710
     711    CHECKOP(ASMAtomicCmpXchgExU64(&u64, 0x80040008008efdULL, 0, &u64Old), true, "%d", bool);
     712    CHECKVAL(u64, 0x80040008008efdULL, "%llx");
     713    CHECKVAL(u64Old, 0ULL, "%llx");
     714
     715    CHECKOP(ASMAtomicCmpXchgExU64(&u64, 0, 0x80040008008efdULL, &u64Old), true, "%d", bool);
     716    CHECKVAL(u64, 0ULL, "%llx");
     717    CHECKVAL(u64Old, 0x80040008008efdULL, "%llx");
    660718}
    661719
     
    885943    tstASMAtomicCmpXchgU32();
    886944    tstASMAtomicCmpXchgU64();
     945    tstASMAtomicCmpXchgExU32();
     946    tstASMAtomicCmpXchgExU64();
    887947    tstASMAtomicReadU64();
    888948    tstASMAtomicDecIncS32();
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