X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Futil%2Fu_atomic_test.c;h=7a77768c966fec1719231b729b2806119bbffe0c;hb=1abae9e54ac15f9ed29fddf4e8f1ad607307af5a;hp=4845e753e6e691e6e8eda335e370dedd78bab642;hpb=ff80b92a58ef802e2721d1b51da6157be696c932;p=mesa.git diff --git a/src/util/u_atomic_test.c b/src/util/u_atomic_test.c index 4845e753e6e..7a77768c966 100644 --- a/src/util/u_atomic_test.c +++ b/src/util/u_atomic_test.c @@ -26,7 +26,7 @@ **************************************************************************/ -/* Force assertions, even on debug builds. */ +/* Force assertions, even on release builds. */ #undef NDEBUG @@ -36,9 +36,15 @@ #include "u_atomic.h" +#ifdef _MSC_VER +#pragma warning( disable : 28112 ) /* Accessing a local variable via an Interlocked function */ +#pragma warning( disable : 28113 ) /* A variable which is accessed via an Interlocked function must always be accessed via an Interlocked function */ +#endif -#define test_atomic_cmpxchg(type, ones) \ - static void test_atomic_cmpxchg_##type (void) { \ + +/* Test only assignment-like operations, which are supported on all types */ +#define test_atomic_assign(type, ones) \ + static void test_atomic_assign_##type (void) { \ type v, r; \ \ p_atomic_set(&v, ones); \ @@ -59,14 +65,33 @@ } +/* Test arithmetic operations that are supported on 8 bits integer types */ +#define test_atomic_8bits(type, ones) \ + test_atomic_assign(type, ones) \ + \ + static void test_atomic_8bits_##type (void) { \ + type v, r; \ + \ + test_atomic_assign_##type(); \ + \ + v = 23; \ + p_atomic_add(&v, 42); \ + r = p_atomic_read(&v); \ + assert(r == 65 && "p_atomic_add"); \ + \ + (void) r; \ + } + + +/* Test all operations */ #define test_atomic(type, ones) \ - test_atomic_cmpxchg(type, ones) \ + test_atomic_8bits(type, ones) \ \ static void test_atomic_##type (void) { \ type v, r; \ bool b; \ \ - test_atomic_cmpxchg_##type(); \ + test_atomic_8bits_##type(); \ \ v = 2; \ b = p_atomic_dec_zero(&v); \ @@ -112,9 +137,9 @@ test_atomic(uint32_t, UINT32_C(0xffffffff)) test_atomic(int64_t, INT64_C(-1)) test_atomic(uint64_t, UINT64_C(0xffffffffffffffff)) -test_atomic_cmpxchg(int8_t, INT8_C(-1)) -test_atomic_cmpxchg(uint8_t, UINT8_C(0xff)) -test_atomic_cmpxchg(bool, true) +test_atomic_8bits(int8_t, INT8_C(-1)) +test_atomic_8bits(uint8_t, UINT8_C(0xff)) +test_atomic_assign(bool, true) int main() @@ -129,9 +154,9 @@ main() test_atomic_int64_t(); test_atomic_uint64_t(); - test_atomic_cmpxchg_int8_t(); - test_atomic_cmpxchg_uint8_t(); - test_atomic_cmpxchg_bool(); + test_atomic_8bits_int8_t(); + test_atomic_8bits_uint8_t(); + test_atomic_assign_bool(); return 0; }