From 1de913282989ffc039fc2a7b0879df2e1dbaead4 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Mon, 9 Sep 2024 15:29:14 -0700 Subject: [PATCH] [test] Cleanup gcc pthread operations tests - Convert to C - Tabs to spaces - And some print status --- ...st_pthread_gcc_64bit_atomic_fetch_and_op.c | 269 +++++++++--------- ...st_pthread_gcc_64bit_atomic_op_and_fetch.c | 269 +++++++++--------- .../test_pthread_gcc_atomic_fetch_and_op.c | 246 ++++++++-------- .../test_pthread_gcc_atomic_op_and_fetch.c | 248 ++++++++-------- test/pthread/test_pthread_gcc_atomics.c | 132 ++++----- test/pthread/test_pthread_gcc_spinlock.c | 71 +++-- 6 files changed, 603 insertions(+), 632 deletions(-) diff --git a/test/pthread/test_pthread_gcc_64bit_atomic_fetch_and_op.c b/test/pthread/test_pthread_gcc_64bit_atomic_fetch_and_op.c index 3150e801f3ca8..6b0c5b5dc2db3 100644 --- a/test/pthread/test_pthread_gcc_64bit_atomic_fetch_and_op.c +++ b/test/pthread/test_pthread_gcc_64bit_atomic_fetch_and_op.c @@ -16,161 +16,154 @@ #define T uint64_t -void *thread_fetch_and_add(void *arg) -{ - for(int i = 0; i < 10000; ++i) - __sync_fetch_and_add((T*)arg, 0x0000000100000001ULL); - pthread_exit(0); +void *thread_fetch_and_add(void *arg) { + for (int i = 0; i < 10000; ++i) { + __sync_fetch_and_add((T*)arg, 0x0000000100000001ULL); + } + pthread_exit(0); } -void *thread_fetch_and_sub(void *arg) -{ - for(int i = 0; i < 10000; ++i) - __sync_fetch_and_sub((T*)arg, 0x0000000100000001ULL); - pthread_exit(0); +void *thread_fetch_and_sub(void *arg) { + for (int i = 0; i < 10000; ++i) { + __sync_fetch_and_sub((T*)arg, 0x0000000100000001ULL); + } + pthread_exit(0); } + volatile T fetch_and_or_data = 0; -void *thread_fetch_and_or(void *arg) -{ - for(int i = 0; i < 10000; ++i) - __sync_fetch_and_or((T*)&fetch_and_or_data, *(T*)arg); - pthread_exit(0); +void *thread_fetch_and_or(void *arg) { + for (int i = 0; i < 10000; ++i) { + __sync_fetch_and_or((T*)&fetch_and_or_data, *(T*)arg); + } + pthread_exit(0); } volatile T fetch_and_and_data = 0; -void *thread_fetch_and_and(void *arg) -{ - for(int i = 0; i < 10000; ++i) - __sync_fetch_and_and((T*)&fetch_and_and_data, *(T*)arg); - pthread_exit(0); +void *thread_fetch_and_and(void *arg) { + for (int i = 0; i < 10000; ++i) { + __sync_fetch_and_and((T*)&fetch_and_and_data, *(T*)arg); + } + pthread_exit(0); } volatile T fetch_and_xor_data = 0; -void *thread_fetch_and_xor(void *arg) -{ - for(int i = 0; i < 9999; ++i) // Odd number of times so that the operation doesn't cancel itself out. - __sync_fetch_and_xor((T*)&fetch_and_xor_data, *(T*)arg); - pthread_exit(0); +void *thread_fetch_and_xor(void *arg) { + for (int i = 0; i < 9999; ++i) { // Odd number of times so that the operation doesn't cancel itself out. + __sync_fetch_and_xor((T*)&fetch_and_xor_data, *(T*)arg); + } + pthread_exit(0); } volatile long fetch_and_nand_data = 0; -void *thread_fetch_and_nand(void *arg) -{ - for(int i = 0; i < 9999; ++i) // Odd number of times so that the operation doesn't cancel itself out. - __sync_fetch_and_nand((long*)&fetch_and_nand_data, (long)arg); - pthread_exit(0); +void *thread_fetch_and_nand(void *arg) { + for (int i = 0; i < 9999; ++i) { // Odd number of times so that the operation doesn't cancel itself out. + __sync_fetch_and_nand((long*)&fetch_and_nand_data, (long)arg); + } + pthread_exit(0); } -T threadArg[NUM_THREADS]; -pthread_t thread[NUM_THREADS]; - #define HILO(hi, lo) ((((uint64_t)(hi)) << 32) | ((uint64_t)(lo))) #define DUP(x) HILO((x), (x)) -int main() -{ - { - T x = HILO(5, 3); - T y = __sync_fetch_and_add(&x, DUP(1)); - assert(y == HILO(5, 3)); - assert(x == HILO(6, 4)); - volatile T n = HILO(2, 1); - if (emscripten_has_threading_support()) - { - for(int i = 0; i < NUM_THREADS; ++i) pthread_create(&thread[i], NULL, thread_fetch_and_add, (void*)&n); - for(int i = 0; i < NUM_THREADS; ++i) pthread_join(thread[i], NULL); - printf("n: %llx\n", n); - assert(n == HILO(NUM_THREADS*10000ULL+2ULL, NUM_THREADS*10000ULL+1ULL)); - } - } - { - T x = HILO(15, 13); - T y = __sync_fetch_and_sub(&x, HILO(10, 10)); - assert(y == HILO(15, 13)); - assert(x == HILO(5, 3)); - volatile T n = HILO(NUM_THREADS*10000ULL+5ULL, NUM_THREADS*10000ULL+3ULL); - if (emscripten_has_threading_support()) - { - for(int i = 0; i < NUM_THREADS; ++i) pthread_create(&thread[i], NULL, thread_fetch_and_sub, (void*)&n); - for(int i = 0; i < NUM_THREADS; ++i) pthread_join(thread[i], NULL); - printf("n: %llx\n", n); - assert(n == HILO(5,3)); - } - } - { - T x = HILO(32768 + 5, 5); - T y = __sync_fetch_and_or(&x, HILO(65536 + 9, 9)); - assert(y == HILO(32768 + 5, 5)); - assert(x == HILO(32768 + 65536 + 13, 13)); - if (emscripten_has_threading_support()) - { - for(int x = 0; x < 100; ++x) // Test a few times for robustness, since this test is so short-lived. - { - fetch_and_or_data = HILO(65536 + (1<