Changeset 90640 in vbox for trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp
- Timestamp:
- Aug 11, 2021 11:40:23 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 146252
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp
r87256 r90640 100 100 CHECKVAL(*a_pVar, a_ExpectVarVal, a_FmtVar); \ 101 101 CHECKVAL(a_uVar2, a_ExpectVarVal2, a_FmtVar); \ 102 } while (0) 103 104 #define CHECKVAL128(a_pu128Val, a_u64HiExpect, a_u64LoExpect) \ 105 do \ 106 { \ 107 if ((a_pu128Val)->s.Hi != (a_u64HiExpect) || (a_pu128Val)->s.Lo != (a_u64LoExpect)) \ 108 RTTestFailed(g_hTest, "%s, %d: " #a_pu128Val ": expected %#RX64'%016RX64 got %#RX64'%016RX64\n", \ 109 __FUNCTION__, __LINE__, (a_u64HiExpect), (a_u64LoExpect), (a_pu128Val)->s.Hi, (a_pu128Val)->s.Lo); \ 110 } while (0) 111 #define CHECKVAL128_C(a_pu128Val, a_u64HiExpect, a_u64LoExpect) \ 112 do \ 113 { \ 114 if ((a_pu128Val)->s.Hi != UINT64_C(a_u64HiExpect) || (a_pu128Val)->s.Lo != UINT64_C(a_u64LoExpect)) \ 115 RTTestFailed(g_hTest, "%s, %d: " #a_pu128Val ": expected %#RX64'%016RX64 got %#RX64'%016RX64\n", \ 116 __FUNCTION__, __LINE__, UINT64_C(a_u64HiExpect), UINT64_C(a_u64LoExpect), \ 117 (a_pu128Val)->s.Hi, (a_pu128Val)->s.Lo); \ 118 } while (0) 119 #define CHECK_OP_AND_VAL_128(a_TypeRet, a_FmtRet, a_pu128Val, a_Operation, a_ExpectRetVal, a_u64HiExpect, a_u64LoExpect) \ 120 do { \ 121 CHECKOP(a_Operation, a_ExpectRetVal, a_FmtRet, a_TypeRet); \ 122 CHECKVAL128(a_pu128Val, a_u64HiExpect, a_u64LoExpect); \ 123 } while (0) 124 #define CHECK_OP_AND_VAL_128_C(a_TypeRet, a_FmtRet, a_pu128Val, a_Operation, a_ExpectRetVal, a_u64HiExpect, a_u64LoExpect) \ 125 do { \ 126 CHECKOP(a_Operation, a_ExpectRetVal, a_FmtRet, a_TypeRet); \ 127 CHECKVAL128_C(a_pu128Val, a_u64HiExpect, a_u64LoExpect); \ 102 128 } while (0) 103 129 … … 1482 1508 1483 1509 1510 #ifdef RTASM_HAVE_CMP_WRITE_U128 1511 DECLINLINE(void) tstASMAtomicCmpWriteU128Worker(RTUINT128U volatile *pu128) 1512 { 1513 pu128->s.Lo = UINT64_C(0xffffffffffffff); 1514 pu128->s.Hi = UINT64_C(0xffffffffffffff); 1515 1516 RTUINT128U u128A, u128B; 1517 CHECK_OP_AND_VAL_128_C(bool, "%d", pu128, ASMAtomicCmpWriteU128U(pu128, 1518 u128A = RTUINT128_INIT_C(0, 0), 1519 u128B = RTUINT128_INIT_C(0, 0)), 1520 false, 0xffffffffffffff, 0xffffffffffffff); 1521 CHECK_OP_AND_VAL_128_C(bool, "%d", pu128, ASMAtomicCmpWriteU128U(pu128, 1522 u128A = RTUINT128_INIT_C(0, 0), 1523 u128B = RTUINT128_INIT_C(0xffffffffffffff, 0xffffffffffffff)), 1524 true, 0, 0); 1525 1526 CHECK_OP_AND_VAL_128_C(bool, "%d", pu128, ASMAtomicCmpWriteU128U(pu128, 1527 u128A = RTUINT128_INIT_C(0x80040008008efd, 0x40080004004def), 1528 u128B = RTUINT128_INIT_C(0, 1)), 1529 false, 0, 0); 1530 CHECK_OP_AND_VAL_128_C(bool, "%d", pu128, ASMAtomicCmpWriteU128U(pu128, 1531 u128A = RTUINT128_INIT_C(0x80040008008efd, 0x40080004004def), 1532 u128B = RTUINT128_INIT_C(1, 0)), 1533 false, 0, 0); 1534 CHECK_OP_AND_VAL_128_C(bool, "%d", pu128, ASMAtomicCmpWriteU128U(pu128, 1535 u128A = RTUINT128_INIT_C(0x80040008008efd, 0x40080004004def), 1536 u128B = RTUINT128_INIT_C(0, 0)), 1537 true, 0x80040008008efd, 0x40080004004def); 1538 1539 CHECK_OP_AND_VAL_128_C(bool, "%d", pu128, ASMAtomicCmpWriteU128U(pu128, 1540 u128A = RTUINT128_INIT_C(0xfff40ff8f08ef3, 0x4ee8ee04cc4de4), 1541 u128B = RTUINT128_INIT_C(0x80040008008efd, 0)), 1542 false, 0x80040008008efd, 0x40080004004def); 1543 CHECK_OP_AND_VAL_128_C(bool, "%d", pu128, ASMAtomicCmpWriteU128U(pu128, 1544 u128A = RTUINT128_INIT_C(0xfff40ff8f08ef3, 0x4ee8ee04cc4de4), 1545 u128B = RTUINT128_INIT_C(0, 0x40080004004def)), 1546 false, 0x80040008008efd, 0x40080004004def); 1547 CHECK_OP_AND_VAL_128_C(bool, "%d", pu128, ASMAtomicCmpWriteU128U(pu128, 1548 u128A = RTUINT128_INIT_C(0xfff40ff8f08ef3, 0x4ee8ee04cc4de4), 1549 u128B = RTUINT128_INIT_C(0x80040008008efd, 0x40080004004def)), 1550 true, 0xfff40ff8f08ef3, 0x4ee8ee04cc4de4); 1551 } 1552 #endif /* RTASM_HAVE_CMP_WRITE_U128 */ 1553 1554 1484 1555 static void tstASMAtomicCmpXchg(void) 1485 1556 { … … 1487 1558 DO_SIMPLE_TEST(ASMAtomicCmpXchgU32, uint32_t); 1488 1559 DO_SIMPLE_TEST(ASMAtomicCmpXchgU64, uint64_t); 1560 #ifdef RTASM_HAVE_CMP_WRITE_U128 1561 # ifdef RT_ARCH_AMD64 1562 if (ASMCpuId_ECX(1) & X86_CPUID_FEATURE_ECX_CX16) 1563 # endif 1564 { 1565 RTTestISub("ASMAtomicCmpWriteU128U"); 1566 DO_SIMPLE_TEST_NO_SUB_NO_STACK(tstASMAtomicCmpWriteU128Worker, RTUINT128U); 1567 } 1568 #endif 1489 1569 } 1490 1570
Note:
See TracChangeset
for help on using the changeset viewer.