VirtualBox

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


Ignore:
Timestamp:
Aug 11, 2014 3:29:24 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95470
Message:

Runtime: Implemented ASMAtomicUo[Inc|Dec]U32() with updated testcase. Also added missing testcase for
ASMAtomicUo[And|Or]U32().

File:
1 edited

Legend:

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

    r49281 r52345  
    948948}
    949949
     950
    950951static void tstASMAtomicAddS32(void)
    951952{
    952953    DO_SIMPLE_TEST(ASMAtomicAddS32, int32_t);
     954}
     955
     956
     957DECLINLINE(void) tstASMAtomicUoIncU32Worker(uint32_t volatile *pu32)
     958{
     959    *pu32 = 0;
     960
     961    CHECKOP(ASMAtomicUoIncU32(pu32), UINT32_C(1), "%#x", uint32_t);
     962    CHECKVAL(*pu32, UINT32_C(1), "%#x");
     963
     964    *pu32 = ~UINT32_C(0);
     965    CHECKOP(ASMAtomicUoIncU32(pu32), 0, "%#x", uint32_t);
     966    CHECKVAL(*pu32, 0, "%#x");
     967
     968    *pu32 = UINT32_C(0x7fffffff);
     969    CHECKOP(ASMAtomicUoIncU32(pu32), UINT32_C(0x80000000), "%#x", uint32_t);
     970    CHECKVAL(*pu32, UINT32_C(0x80000000), "%#x");
     971}
     972
     973
     974static void tstASMAtomicUoIncU32(void)
     975{
     976    DO_SIMPLE_TEST(ASMAtomicUoIncU32, uint32_t);
     977}
     978
     979
     980DECLINLINE(void) tstASMAtomicUoDecU32Worker(uint32_t volatile *pu32)
     981{
     982    *pu32 = 0;
     983
     984    CHECKOP(ASMAtomicUoDecU32(pu32), ~UINT32_C(0), "%#x", uint32_t);
     985    CHECKVAL(*pu32, ~UINT32_C(0), "%#x");
     986
     987    *pu32 = ~UINT32_C(0);
     988    CHECKOP(ASMAtomicUoDecU32(pu32), UINT32_C(0xfffffffe), "%#x", uint32_t);
     989    CHECKVAL(*pu32, UINT32_C(0xfffffffe), "%#x");
     990
     991    *pu32 = UINT32_C(0x80000000);
     992    CHECKOP(ASMAtomicUoDecU32(pu32), UINT32_C(0x7fffffff), "%#x", uint32_t);
     993    CHECKVAL(*pu32, UINT32_C(0x7fffffff), "%#x");
     994}
     995
     996
     997static void tstASMAtomicUoDecU32(void)
     998{
     999    DO_SIMPLE_TEST(ASMAtomicUoDecU32, uint32_t);
    9531000}
    9541001
     
    11801227
    11811228
     1229DECLINLINE(void) tstASMAtomicUoAndOrU32Worker(uint32_t volatile *pu32)
     1230{
     1231    *pu32 = UINT32_C(0xffffffff);
     1232
     1233    ASMAtomicUoOrU32(pu32, UINT32_C(0xffffffff));
     1234    CHECKVAL(*pu32, UINT32_C(0xffffffff), "%#x");
     1235
     1236    ASMAtomicUoAndU32(pu32, UINT32_C(0xffffffff));
     1237    CHECKVAL(*pu32, UINT32_C(0xffffffff), "%#x");
     1238
     1239    ASMAtomicUoAndU32(pu32, UINT32_C(0x8f8f8f8f));
     1240    CHECKVAL(*pu32, UINT32_C(0x8f8f8f8f), "%#x");
     1241
     1242    ASMAtomicUoOrU32(pu32, UINT32_C(0x70707070));
     1243    CHECKVAL(*pu32, UINT32_C(0xffffffff), "%#x");
     1244
     1245    ASMAtomicUoAndU32(pu32, UINT32_C(1));
     1246    CHECKVAL(*pu32, UINT32_C(1), "%#x");
     1247
     1248    ASMAtomicUoOrU32(pu32, UINT32_C(0x80000000));
     1249    CHECKVAL(*pu32, UINT32_C(0x80000001), "%#x");
     1250
     1251    ASMAtomicUoAndU32(pu32, UINT32_C(0x80000000));
     1252    CHECKVAL(*pu32, UINT32_C(0x80000000), "%#x");
     1253
     1254    ASMAtomicUoAndU32(pu32, UINT32_C(0));
     1255    CHECKVAL(*pu32, UINT32_C(0), "%#x");
     1256
     1257    ASMAtomicUoOrU32(pu32, UINT32_C(0x42424242));
     1258    CHECKVAL(*pu32, UINT32_C(0x42424242), "%#x");
     1259}
     1260
     1261
     1262static void tstASMAtomicUoAndOrU32(void)
     1263{
     1264    DO_SIMPLE_TEST(ASMAtomicUoAndOrU32, uint32_t);
     1265}
     1266
     1267
    11821268typedef struct
    11831269{
     
    15201606#endif
    15211607
    1522     BENCH(s_u32 = 0,                            "s_u32 = 0");
    1523     BENCH(ASMAtomicUoReadU8(&s_u8),             "ASMAtomicUoReadU8");
    1524     BENCH(ASMAtomicUoReadS8(&s_i8),             "ASMAtomicUoReadS8");
    1525     BENCH(ASMAtomicUoReadU16(&s_u16),           "ASMAtomicUoReadU16");
    1526     BENCH(ASMAtomicUoReadS16(&s_i16),           "ASMAtomicUoReadS16");
    1527     BENCH(ASMAtomicUoReadU32(&s_u32),           "ASMAtomicUoReadU32");
    1528     BENCH(ASMAtomicUoReadS32(&s_i32),           "ASMAtomicUoReadS32");
    1529     BENCH(ASMAtomicUoReadU64(&s_u64),           "ASMAtomicUoReadU64");
    1530     BENCH(ASMAtomicUoReadS64(&s_i64),           "ASMAtomicUoReadS64");
    1531     BENCH(ASMAtomicReadU8(&s_u8),               "ASMAtomicReadU8");
    1532     BENCH(ASMAtomicReadS8(&s_i8),               "ASMAtomicReadS8");
    1533     BENCH(ASMAtomicReadU16(&s_u16),             "ASMAtomicReadU16");
    1534     BENCH(ASMAtomicReadS16(&s_i16),             "ASMAtomicReadS16");
    1535     BENCH(ASMAtomicReadU32(&s_u32),             "ASMAtomicReadU32");
    1536     BENCH(ASMAtomicReadS32(&s_i32),             "ASMAtomicReadS32");
    1537     BENCH(ASMAtomicReadU64(&s_u64),             "ASMAtomicReadU64");
    1538     BENCH(ASMAtomicReadS64(&s_i64),             "ASMAtomicReadS64");
    1539     BENCH(ASMAtomicUoWriteU8(&s_u8, 0),         "ASMAtomicUoWriteU8");
    1540     BENCH(ASMAtomicUoWriteS8(&s_i8, 0),         "ASMAtomicUoWriteS8");
    1541     BENCH(ASMAtomicUoWriteU16(&s_u16, 0),       "ASMAtomicUoWriteU16");
    1542     BENCH(ASMAtomicUoWriteS16(&s_i16, 0),       "ASMAtomicUoWriteS16");
    1543     BENCH(ASMAtomicUoWriteU32(&s_u32, 0),       "ASMAtomicUoWriteU32");
    1544     BENCH(ASMAtomicUoWriteS32(&s_i32, 0),       "ASMAtomicUoWriteS32");
    1545     BENCH(ASMAtomicUoWriteU64(&s_u64, 0),       "ASMAtomicUoWriteU64");
    1546     BENCH(ASMAtomicUoWriteS64(&s_i64, 0),       "ASMAtomicUoWriteS64");
    1547     BENCH(ASMAtomicWriteU8(&s_u8, 0),           "ASMAtomicWriteU8");
    1548     BENCH(ASMAtomicWriteS8(&s_i8, 0),           "ASMAtomicWriteS8");
    1549     BENCH(ASMAtomicWriteU16(&s_u16, 0),         "ASMAtomicWriteU16");
    1550     BENCH(ASMAtomicWriteS16(&s_i16, 0),         "ASMAtomicWriteS16");
    1551     BENCH(ASMAtomicWriteU32(&s_u32, 0),         "ASMAtomicWriteU32");
    1552     BENCH(ASMAtomicWriteS32(&s_i32, 0),         "ASMAtomicWriteS32");
    1553     BENCH(ASMAtomicWriteU64(&s_u64, 0),         "ASMAtomicWriteU64");
    1554     BENCH(ASMAtomicWriteS64(&s_i64, 0),         "ASMAtomicWriteS64");
    1555     BENCH(ASMAtomicXchgU8(&s_u8, 0),            "ASMAtomicXchgU8");
    1556     BENCH(ASMAtomicXchgS8(&s_i8, 0),            "ASMAtomicXchgS8");
    1557     BENCH(ASMAtomicXchgU16(&s_u16, 0),          "ASMAtomicXchgU16");
    1558     BENCH(ASMAtomicXchgS16(&s_i16, 0),          "ASMAtomicXchgS16");
    1559     BENCH(ASMAtomicXchgU32(&s_u32, 0),          "ASMAtomicXchgU32");
    1560     BENCH(ASMAtomicXchgS32(&s_i32, 0),          "ASMAtomicXchgS32");
    1561     BENCH(ASMAtomicXchgU64(&s_u64, 0),          "ASMAtomicXchgU64");
    1562     BENCH(ASMAtomicXchgS64(&s_i64, 0),          "ASMAtomicXchgS64");
    1563     BENCH(ASMAtomicCmpXchgU32(&s_u32, 0, 0),    "ASMAtomicCmpXchgU32");
    1564     BENCH(ASMAtomicCmpXchgS32(&s_i32, 0, 0),    "ASMAtomicCmpXchgS32");
    1565     BENCH(ASMAtomicCmpXchgU64(&s_u64, 0, 0),    "ASMAtomicCmpXchgU64");
    1566     BENCH(ASMAtomicCmpXchgS64(&s_i64, 0, 0),    "ASMAtomicCmpXchgS64");
    1567     BENCH(ASMAtomicCmpXchgU32(&s_u32, 0, 1),    "ASMAtomicCmpXchgU32/neg");
    1568     BENCH(ASMAtomicCmpXchgS32(&s_i32, 0, 1),    "ASMAtomicCmpXchgS32/neg");
    1569     BENCH(ASMAtomicCmpXchgU64(&s_u64, 0, 1),    "ASMAtomicCmpXchgU64/neg");
    1570     BENCH(ASMAtomicCmpXchgS64(&s_i64, 0, 1),    "ASMAtomicCmpXchgS64/neg");
    1571     BENCH(ASMAtomicIncU32(&s_u32),              "ASMAtomicIncU32");
    1572     BENCH(ASMAtomicIncS32(&s_i32),              "ASMAtomicIncS32");
    1573     BENCH(ASMAtomicDecU32(&s_u32),              "ASMAtomicDecU32");
    1574     BENCH(ASMAtomicDecS32(&s_i32),              "ASMAtomicDecS32");
    1575     BENCH(ASMAtomicAddU32(&s_u32, 5),           "ASMAtomicAddU32");
    1576     BENCH(ASMAtomicAddS32(&s_i32, 5),           "ASMAtomicAddS32");
     1608    BENCH(s_u32 = 0,                             "s_u32 = 0");
     1609    BENCH(ASMAtomicUoReadU8(&s_u8),              "ASMAtomicUoReadU8");
     1610    BENCH(ASMAtomicUoReadS8(&s_i8),              "ASMAtomicUoReadS8");
     1611    BENCH(ASMAtomicUoReadU16(&s_u16),            "ASMAtomicUoReadU16");
     1612    BENCH(ASMAtomicUoReadS16(&s_i16),            "ASMAtomicUoReadS16");
     1613    BENCH(ASMAtomicUoReadU32(&s_u32),            "ASMAtomicUoReadU32");
     1614    BENCH(ASMAtomicUoReadS32(&s_i32),            "ASMAtomicUoReadS32");
     1615    BENCH(ASMAtomicUoReadU64(&s_u64),            "ASMAtomicUoReadU64");
     1616    BENCH(ASMAtomicUoReadS64(&s_i64),            "ASMAtomicUoReadS64");
     1617    BENCH(ASMAtomicReadU8(&s_u8),                "ASMAtomicReadU8");
     1618    BENCH(ASMAtomicReadS8(&s_i8),                "ASMAtomicReadS8");
     1619    BENCH(ASMAtomicReadU16(&s_u16),              "ASMAtomicReadU16");
     1620    BENCH(ASMAtomicReadS16(&s_i16),              "ASMAtomicReadS16");
     1621    BENCH(ASMAtomicReadU32(&s_u32),              "ASMAtomicReadU32");
     1622    BENCH(ASMAtomicReadS32(&s_i32),              "ASMAtomicReadS32");
     1623    BENCH(ASMAtomicReadU64(&s_u64),              "ASMAtomicReadU64");
     1624    BENCH(ASMAtomicReadS64(&s_i64),              "ASMAtomicReadS64");
     1625    BENCH(ASMAtomicUoWriteU8(&s_u8, 0),          "ASMAtomicUoWriteU8");
     1626    BENCH(ASMAtomicUoWriteS8(&s_i8, 0),          "ASMAtomicUoWriteS8");
     1627    BENCH(ASMAtomicUoWriteU16(&s_u16, 0),        "ASMAtomicUoWriteU16");
     1628    BENCH(ASMAtomicUoWriteS16(&s_i16, 0),        "ASMAtomicUoWriteS16");
     1629    BENCH(ASMAtomicUoWriteU32(&s_u32, 0),        "ASMAtomicUoWriteU32");
     1630    BENCH(ASMAtomicUoWriteS32(&s_i32, 0),        "ASMAtomicUoWriteS32");
     1631    BENCH(ASMAtomicUoWriteU64(&s_u64, 0),        "ASMAtomicUoWriteU64");
     1632    BENCH(ASMAtomicUoWriteS64(&s_i64, 0),        "ASMAtomicUoWriteS64");
     1633    BENCH(ASMAtomicWriteU8(&s_u8, 0),            "ASMAtomicWriteU8");
     1634    BENCH(ASMAtomicWriteS8(&s_i8, 0),            "ASMAtomicWriteS8");
     1635    BENCH(ASMAtomicWriteU16(&s_u16, 0),          "ASMAtomicWriteU16");
     1636    BENCH(ASMAtomicWriteS16(&s_i16, 0),          "ASMAtomicWriteS16");
     1637    BENCH(ASMAtomicWriteU32(&s_u32, 0),          "ASMAtomicWriteU32");
     1638    BENCH(ASMAtomicWriteS32(&s_i32, 0),          "ASMAtomicWriteS32");
     1639    BENCH(ASMAtomicWriteU64(&s_u64, 0),          "ASMAtomicWriteU64");
     1640    BENCH(ASMAtomicWriteS64(&s_i64, 0),          "ASMAtomicWriteS64");
     1641    BENCH(ASMAtomicXchgU8(&s_u8, 0),             "ASMAtomicXchgU8");
     1642    BENCH(ASMAtomicXchgS8(&s_i8, 0),             "ASMAtomicXchgS8");
     1643    BENCH(ASMAtomicXchgU16(&s_u16, 0),           "ASMAtomicXchgU16");
     1644    BENCH(ASMAtomicXchgS16(&s_i16, 0),           "ASMAtomicXchgS16");
     1645    BENCH(ASMAtomicXchgU32(&s_u32, 0),           "ASMAtomicXchgU32");
     1646    BENCH(ASMAtomicXchgS32(&s_i32, 0),           "ASMAtomicXchgS32");
     1647    BENCH(ASMAtomicXchgU64(&s_u64, 0),           "ASMAtomicXchgU64");
     1648    BENCH(ASMAtomicXchgS64(&s_i64, 0),           "ASMAtomicXchgS64");
     1649    BENCH(ASMAtomicCmpXchgU32(&s_u32, 0, 0),     "ASMAtomicCmpXchgU32");
     1650    BENCH(ASMAtomicCmpXchgS32(&s_i32, 0, 0),     "ASMAtomicCmpXchgS32");
     1651    BENCH(ASMAtomicCmpXchgU64(&s_u64, 0, 0),     "ASMAtomicCmpXchgU64");
     1652    BENCH(ASMAtomicCmpXchgS64(&s_i64, 0, 0),     "ASMAtomicCmpXchgS64");
     1653    BENCH(ASMAtomicCmpXchgU32(&s_u32, 0, 1),     "ASMAtomicCmpXchgU32/neg");
     1654    BENCH(ASMAtomicCmpXchgS32(&s_i32, 0, 1),     "ASMAtomicCmpXchgS32/neg");
     1655    BENCH(ASMAtomicCmpXchgU64(&s_u64, 0, 1),     "ASMAtomicCmpXchgU64/neg");
     1656    BENCH(ASMAtomicCmpXchgS64(&s_i64, 0, 1),     "ASMAtomicCmpXchgS64/neg");
     1657    BENCH(ASMAtomicIncU32(&s_u32),               "ASMAtomicIncU32");
     1658    BENCH(ASMAtomicIncS32(&s_i32),               "ASMAtomicIncS32");
     1659    BENCH(ASMAtomicDecU32(&s_u32),               "ASMAtomicDecU32");
     1660    BENCH(ASMAtomicDecS32(&s_i32),               "ASMAtomicDecS32");
     1661    BENCH(ASMAtomicAddU32(&s_u32, 5),            "ASMAtomicAddU32");
     1662    BENCH(ASMAtomicAddS32(&s_i32, 5),            "ASMAtomicAddS32");
     1663    BENCH(ASMAtomicUoIncU32(&s_u32),             "ASMAtomicUoIncU32");
     1664    BENCH(ASMAtomicUoDecU32(&s_u32),             "ASMAtomicUoDecU32");
     1665    BENCH(ASMAtomicUoAndU32(&s_u32, 0xffffffff), "ASMAtomicUoAndU32");
     1666    BENCH(ASMAtomicUoOrU32(&s_u32, 0xffffffff),  "ASMAtomicUoOrU32");
     1667
    15771668    /* The Darwin gcc does not like this ... */
    15781669#if !defined(RT_OS_DARWIN) && !defined(GCC44_32BIT_PIC) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86))
     
    16191710    tstASMAtomicAndOrU64();
    16201711
     1712    tstASMAtomicUoIncU32();
     1713    tstASMAtomicUoDecU32();
     1714    tstASMAtomicUoAndOrU32();
     1715
    16211716    tstASMMemZeroPage();
    16221717    tstASMMemIsZeroPage(g_hTest);
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