diff options
Diffstat (limited to 'testsuites/sptests/spatomic06')
-rw-r--r-- | testsuites/sptests/spatomic06/tasks.c | 44 |
1 files changed, 18 insertions, 26 deletions
diff --git a/testsuites/sptests/spatomic06/tasks.c b/testsuites/sptests/spatomic06/tasks.c index 753b91ae73..b03d3f0275 100644 --- a/testsuites/sptests/spatomic06/tasks.c +++ b/testsuites/sptests/spatomic06/tasks.c @@ -18,20 +18,24 @@ #include <stdlib.h> #include <rtems/rtems/atomic.h> -#define TEST_REPEAT 200000 +#define TEST_REPEAT 1000 -#define ATOMIC_FETCH_OR_NO_BARRIER(NAME, TYPE, task_id, mem_bar) \ +#define ATOMIC_FETCH_OR_NO_BARRIER(NAME, TYPE, R_TYPE, task_id, mem_bar) \ { \ - Atomic_##TYPE t = 0, a = 0, b = 0; \ + Atomic_##TYPE t; \ + R_TYPE a; \ + R_TYPE b; \ + R_TYPE c; \ unsigned int i; \ for (i = 0; i < TEST_REPEAT; i++){ \ - a = (Atomic_##TYPE)(rand() % ((Atomic_##TYPE)-1 / 2)); \ - b = (Atomic_##TYPE)(rand() % ((Atomic_##TYPE)-1 / 2)); \ - t = a; \ + a = (R_TYPE)(rand() % ((R_TYPE)-1 / 2)); \ + b = (R_TYPE)(rand() % ((R_TYPE)-1 / 2)); \ + _Atomic_Store_##NAME(&t, a, ATOMIC_ORDER_RELAXED); \ _Atomic_Fetch_or_##NAME(&t, b, mem_bar); \ - rtems_test_assert(t == (Atomic_##TYPE)(a | b)); \ + c = _Atomic_Load_##NAME(&t, ATOMIC_ORDER_RELAXED); \ + rtems_test_assert(c == (R_TYPE)(a | b)); \ } \ - printf("\ntask%d: _Atomic_Fetch_or_" #NAME ": SUCCESS\n", (unsigned int)task_id); \ + printf("\ntask%d: Atomic_Fetch_or_" #NAME ": SUCCESS\n", (unsigned int)task_id); \ } rtems_task Test_task( @@ -48,31 +52,19 @@ rtems_task Test_task( /* Print that the task is up and running. */ /* test relaxed barrier */ - ATOMIC_FETCH_OR_NO_BARRIER(int, Int, argument, ATOMIC_RELAXED_BARRIER); + ATOMIC_FETCH_OR_NO_BARRIER(uint, Uint, uint_fast32_t, argument, ATOMIC_ORDER_RELAXED); - ATOMIC_FETCH_OR_NO_BARRIER(long, Long, argument, ATOMIC_RELAXED_BARRIER); - - ATOMIC_FETCH_OR_NO_BARRIER(ptr, Pointer, argument, ATOMIC_RELAXED_BARRIER); - - ATOMIC_FETCH_OR_NO_BARRIER(32, Int32, argument, ATOMIC_RELAXED_BARRIER); + ATOMIC_FETCH_OR_NO_BARRIER(ptr, Pointer, uintptr_t, argument, ATOMIC_ORDER_RELAXED); /* test acquire barrier */ - ATOMIC_FETCH_OR_NO_BARRIER(int, Int, argument, ATOMIC_ACQUIRE_BARRIER); - - ATOMIC_FETCH_OR_NO_BARRIER(long, Long, argument, ATOMIC_ACQUIRE_BARRIER); + ATOMIC_FETCH_OR_NO_BARRIER(uint, Uint, uint_fast32_t, argument, ATOMIC_ORDER_ACQUIRE); - ATOMIC_FETCH_OR_NO_BARRIER(ptr, Pointer, argument, ATOMIC_ACQUIRE_BARRIER); - - ATOMIC_FETCH_OR_NO_BARRIER(32, Int32, argument, ATOMIC_ACQUIRE_BARRIER); + ATOMIC_FETCH_OR_NO_BARRIER(ptr, Pointer, uintptr_t, argument, ATOMIC_ORDER_ACQUIRE); /* test release barrier */ - ATOMIC_FETCH_OR_NO_BARRIER(int, Int, argument, ATOMIC_RELEASE_BARRIER); - - ATOMIC_FETCH_OR_NO_BARRIER(long, Long, argument, ATOMIC_RELEASE_BARRIER); - - ATOMIC_FETCH_OR_NO_BARRIER(ptr, Pointer, argument, ATOMIC_RELEASE_BARRIER); + ATOMIC_FETCH_OR_NO_BARRIER(uint, Uint, uint_fast32_t, argument, ATOMIC_ORDER_RELEASE); - ATOMIC_FETCH_OR_NO_BARRIER(32, Int32, argument, ATOMIC_RELEASE_BARRIER); + ATOMIC_FETCH_OR_NO_BARRIER(ptr, Pointer, uintptr_t, argument, ATOMIC_ORDER_RELEASE); /* Set the flag that the task is up and running */ TaskRan[argument] = true; |