summaryrefslogtreecommitdiff
path: root/libatomic/testsuite/libatomic.c/generic-2.c
diff options
context:
space:
mode:
Diffstat (limited to 'libatomic/testsuite/libatomic.c/generic-2.c')
-rw-r--r--libatomic/testsuite/libatomic.c/generic-2.c128
1 files changed, 0 insertions, 128 deletions
diff --git a/libatomic/testsuite/libatomic.c/generic-2.c b/libatomic/testsuite/libatomic.c/generic-2.c
deleted file mode 100644
index aa0014d2dc..0000000000
--- a/libatomic/testsuite/libatomic.c/generic-2.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* { dg-do run } */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-/* Avoid using the builtins, calling directly to the library functions
- of the same name, so that we get direct access to the size_t and
- don't have to create myriad types of different sizes. */
-
-#define C2_(X,Y) X ## Y
-#define C2(X,Y) C2_(X,Y)
-
-#define S2(X) #X
-#define S(X) S2(X)
-
-#define ASMNAME(X) __asm__(S(C2(__USER_LABEL_PREFIX__,X)))
-#define MAN(X) ASMNAME(C2(__atomic_,X))
-
-void libat_load (size_t, void *, void *, int) MAN(load);
-void libat_store (size_t, void *, void *, int) MAN(store);
-void libat_exchange (size_t, void *, void *, void *, int) MAN(exchange);
-bool libat_compare_exchange (size_t, void *, void *, void *, int, int)
- MAN(compare_exchange);
-bool libat_is_lock_free (size_t, void *) MAN(is_lock_free);
-
-
-#define ALIGN 16
-#define MAX 4*ALIGN
-
-static char a[MAX];
-static char b[MAX];
-static char c[MAX];
-static char pa[MAX];
-static char pb[MAX];
-
-static void test_load(void)
-{
- int i, j;
- for (i = ALIGN; i < 2*ALIGN; ++i)
- for (j = 1; j <= 2*ALIGN; ++j)
- {
- memcpy(b, pa, MAX);
- memcpy(b + i, pb, j);
- libat_load (j, b + i, a, 0);
- if (memcmp (a, pb, j) != 0) abort ();
- }
-}
-
-static void test_store(void)
-{
- int i, j;
- for (i = ALIGN; i < 2*ALIGN; ++i)
- for (j = 1; j <= 2*ALIGN; ++j)
- {
- memcpy(a, pa, MAX);
- memcpy(b, pa, MAX);
- memcpy(b + i, pb, j);
- libat_store (j, a + i, pb, 0);
- if (memcmp (a, b, MAX) != 0) abort ();
- }
-}
-
-static void test_exch(void)
-{
- int i, j;
- for (i = ALIGN; i < 2 * ALIGN; ++i)
- for (j = 1; j <= 2*ALIGN; ++j)
- {
- memcpy(a, pa, MAX);
- memcpy(b, pa, MAX);
- memcpy(b + i, pb, j);
- libat_exchange (j, a + i, pb, c, 0);
- if (memcmp (a, b, MAX) != 0) abort ();
- if (memcmp (c, pa + i, j) != 0) abort ();
-
- memcpy(a, pa, MAX);
- memcpy(c, pb, MAX);
- libat_exchange (j, a + i, c + i, c + i, 0);
- memcpy(b, pa, MAX);
- memcpy(b + i, pb + i, j);
- if (memcmp (b, a, MAX) != 0) abort ();
- memcpy(b, pb, MAX);
- memcpy(b + i, pa + i, j);
- if (memcmp (b, c, MAX) != 0) abort ();
- }
-}
-
-static void test_cas(void)
-{
- int i, j;
- for (i = ALIGN; i < 2 * ALIGN; ++i)
- for (j = 1; j <= 2*ALIGN; ++j)
- {
- memcpy(a, pa, MAX);
- memcpy(b, pa, MAX);
- memcpy(c, pa, MAX);
- memcpy(b + i, pb, j);
- if (!libat_compare_exchange (j, a + i, c + i, pb, 0, 0)) abort ();
- if (memcmp (c, pa, MAX) != 0) abort ();
- if (memcmp (a, b, MAX) != 0) abort ();
-
- memcpy(a, pb, MAX);
- memcpy(b, pa, MAX);
- memcpy(c, pa, MAX);
- memcpy(b + i, pb + i, j);
- if (libat_compare_exchange (j, a + i, c + i, pb, 0, 0)) abort ();
- if (memcmp (a, pb, MAX) != 0) abort ();
- if (memcmp (b, c, MAX) != 0) abort ();
- }
-}
-
-int main (void)
-{
- int i;
- for (i = 0; i < MAX; ++i)
- {
- pa[i] = i * 2;
- pb[i] = i * 2 + 1;
- }
-
- test_load ();
- test_store ();
- test_exch ();
- test_cas ();
-
- return 0;
-}