summaryrefslogtreecommitdiffstats
path: root/testsuites/smptests/smpatomic07/tasks.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/smptests/smpatomic07/tasks.c')
-rw-r--r--testsuites/smptests/smpatomic07/tasks.c75
1 files changed, 34 insertions, 41 deletions
diff --git a/testsuites/smptests/smpatomic07/tasks.c b/testsuites/smptests/smpatomic07/tasks.c
index 88c69be6fb..21802d650f 100644
--- a/testsuites/smptests/smpatomic07/tasks.c
+++ b/testsuites/smptests/smpatomic07/tasks.c
@@ -18,35 +18,40 @@
#include <stdlib.h>
#include <rtems/rtems/atomic.h>
-#define TEST_REPEAT 200000
+#define TEST_REPEAT 1000
-#define ATOMIC_CAS_NO_BARRIER(NAME, TYPE, cpuid, mem_bar) \
+#define ATOMIC_CAS_NO_BARRIER(NAME, TYPE, R_TYPE, cpuid, mem_bar) \
{ \
- Atomic_##TYPE a = 0, b = 0; \
+ Atomic_##TYPE t; \
+ R_TYPE a; \
+ R_TYPE b; \
unsigned int i; \
int r; \
for (i = 0; i < TEST_REPEAT; i++){ \
- a = rand() % (Atomic_##TYPE)-1; \
- b = a; \
- r = _Atomic_Compare_exchange_##NAME(&b, a + 1, a - 1, mem_bar); \
- if(r != 0){ \
- locked_printf("\nCPU%d _Atomic_Compare_exchange_" #NAME ": FAILED\n", cpuid); \
- rtems_test_exit( 0 ); \
- } \
- b = a; \
- r = _Atomic_Compare_exchange_##NAME(&b, a, a - 1, mem_bar); \
- if((r == 0) ||((r != 0) && ((a - 1) != b))){ \
- locked_printf("\nCPU%d _Atomic_Compare_exchange_" #NAME ": FAILED\n", cpuid); \
- rtems_test_exit( 0 ); \
- } \
- b = a; \
- r = _Atomic_Compare_exchange_##NAME(&b, a + 1, a, mem_bar); \
- if(r != 0){ \
- locked_printf("\nCPU%d _Atomic_Compare_exchange_" #NAME ": FAILED\n", cpuid); \
- rtems_test_exit( 0 ); \
- } \
+ a = rand() % (R_TYPE)-1; \
+ _Atomic_Store_##NAME(&t, a, mem_bar); \
+ b = a + 1; \
+ r = _Atomic_Compare_exchange_##NAME(&t, &b, a - 1, mem_bar, memory_order_relaxed);\
+ if(r != 0){ \
+ locked_printf("\ntask%d: Atomic_Compare_exchange_" #NAME ": FAILED\n", (unsigned int)cpuid); \
+ rtems_test_exit( 0 ); \
+ } \
+ _Atomic_Store_##NAME(&t, a, mem_bar); \
+ r = _Atomic_Compare_exchange_##NAME(&t, &a, a - 1, mem_bar, memory_order_relaxed);\
+ b = _Atomic_Load_##NAME(&t, mem_bar); \
+ if((r == 0) ||((r != 0) && ((a - 1) != b))){ \
+ locked_printf("\ntask%d: Atomic_Compare_exchange_" #NAME ": FAILED\n", (unsigned int)cpuid); \
+ rtems_test_exit( 0 ); \
+ } \
+ _Atomic_Store_##NAME(&t, a, mem_bar); \
+ b = a + 1; \
+ r = _Atomic_Compare_exchange_##NAME(&t, &b, a, mem_bar, memory_order_relaxed); \
+ if(r != 0){ \
+ locked_printf("\ntask%d: Atomic_Compare_exchange_" #NAME ": FAILED\n", (unsigned int)cpuid); \
+ rtems_test_exit( 0 ); \
+ } \
} \
- locked_printf("\nCPU%d _Atomic_Compare_exchange_" #NAME ": SUCCESS\n", cpuid); \
+ locked_printf("\nCPU%d Atomic_Compare_exchange_" #NAME ": SUCCESS\n", cpuid); \
}
rtems_task Test_task(
@@ -66,31 +71,19 @@ rtems_task Test_task(
/* Print that the task is up and running. */
/* test relaxed barrier */
- ATOMIC_CAS_NO_BARRIER(int, Int, cpu_num, ATOMIC_RELAXED_BARRIER);
+ ATOMIC_CAS_NO_BARRIER(uint, Uint, uint_fast32_t, cpu_num, ATOMIC_ORDER_RELAXED);
- ATOMIC_CAS_NO_BARRIER(long, Long, cpu_num, ATOMIC_RELAXED_BARRIER);
-
- ATOMIC_CAS_NO_BARRIER(ptr, Pointer, cpu_num, ATOMIC_RELAXED_BARRIER);
-
- ATOMIC_CAS_NO_BARRIER(32, Int32, cpu_num, ATOMIC_RELAXED_BARRIER);
+ ATOMIC_CAS_NO_BARRIER(ptr, Pointer, uintptr_t, cpu_num, ATOMIC_ORDER_RELAXED);
/* test acquire barrier */
- ATOMIC_CAS_NO_BARRIER(int, Int, cpu_num, ATOMIC_ACQUIRE_BARRIER);
-
- ATOMIC_CAS_NO_BARRIER(long, Long, cpu_num, ATOMIC_ACQUIRE_BARRIER);
+ ATOMIC_CAS_NO_BARRIER(uint, Uint, uint_fast32_t, cpu_num, ATOMIC_ORDER_ACQUIRE);
- ATOMIC_CAS_NO_BARRIER(ptr, Pointer, cpu_num, ATOMIC_ACQUIRE_BARRIER);
-
- ATOMIC_CAS_NO_BARRIER(32, Int32, cpu_num, ATOMIC_ACQUIRE_BARRIER);
+ ATOMIC_CAS_NO_BARRIER(ptr, Pointer, uintptr_t, cpu_num, ATOMIC_ORDER_ACQUIRE);
/* test release barrier */
- ATOMIC_CAS_NO_BARRIER(int, Int, cpu_num, ATOMIC_RELEASE_BARRIER);
-
- ATOMIC_CAS_NO_BARRIER(long, Long, cpu_num, ATOMIC_RELEASE_BARRIER);
-
- ATOMIC_CAS_NO_BARRIER(ptr, Pointer, cpu_num, ATOMIC_RELEASE_BARRIER);
+ ATOMIC_CAS_NO_BARRIER(uint, Uint, uint_fast32_t, cpu_num, ATOMIC_ORDER_RELEASE);
- ATOMIC_CAS_NO_BARRIER(32, Int32, cpu_num, ATOMIC_RELEASE_BARRIER);
+ ATOMIC_CAS_NO_BARRIER(ptr, Pointer, uintptr_t, cpu_num, ATOMIC_ORDER_RELEASE);
// ATOMIC_CAS_NO_BARRIER(64, cpu_num);