All arch: use rseq_unqual_scalar_typeof in load-acquire
[librseq.git] / include / rseq / rseq-ppc.h
index 727b567f05523ef5bbac973825992c53c5e46d7e..81c8586b6af4d27ba57c7b15986f9dceb641fa3c 100644 (file)
@@ -1,9 +1,9 @@
-/* SPDX-License-Identifier: LGPL-2.1-only OR MIT */
+/* SPDX-License-Identifier: MIT */
+/* SPDX-FileCopyrightText: 2016-2018 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> */
+/* SPDX-FileCopyrightText: 2016-2018 Boqun Feng <boqun.feng@gmail.com> */
+
 /*
  * rseq-ppc.h
- *
- * (C) Copyright 2016-2018 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- * (C) Copyright 2016-2018 - Boqun Feng <boqun.feng@gmail.com>
  */
 
 /*
@@ -23,7 +23,7 @@
 
 #define rseq_smp_load_acquire(p)                                       \
 __extension__ ({                                                       \
-       __typeof(*p) ____p1 = RSEQ_READ_ONCE(*p);                       \
+       rseq_unqual_scalar_typeof(*(p)) ____p1 = RSEQ_READ_ONCE(*(p));  \
        rseq_smp_lwsync();                                              \
        ____p1;                                                         \
 })
@@ -33,7 +33,7 @@ __extension__ ({                                                      \
 #define rseq_smp_store_release(p, v)                                   \
 do {                                                                   \
        rseq_smp_lwsync();                                              \
-       RSEQ_WRITE_ONCE(*p, v);                                         \
+       RSEQ_WRITE_ONCE(*(p), v);                                       \
 } while (0)
 
 #ifdef RSEQ_SKIP_FASTPATH
@@ -242,7 +242,7 @@ int rseq_cmpeqv_storev(intptr_t *v, intptr_t expect, intptr_t newv, int cpu)
                : /* gcc asm goto does not allow outputs */
                : [cpu_id]              "r" (cpu),
                  [current_cpu_id]      "m" (rseq_get_abi()->cpu_id),
-                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs),
+                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                  [v]                   "m" (*v),
                  [expect]              "r" (expect),
                  [newv]                "r" (newv)
@@ -275,7 +275,7 @@ error2:
 
 static inline __attribute__((always_inline))
 int rseq_cmpnev_storeoffp_load(intptr_t *v, intptr_t expectnot,
-                              off_t voffp, intptr_t *load, int cpu)
+                              long voffp, intptr_t *load, int cpu)
 {
        RSEQ_INJECT_C(9)
 
@@ -313,7 +313,7 @@ int rseq_cmpnev_storeoffp_load(intptr_t *v, intptr_t expectnot,
                : /* gcc asm goto does not allow outputs */
                : [cpu_id]              "r" (cpu),
                  [current_cpu_id]      "m" (rseq_get_abi()->cpu_id),
-                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs),
+                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                  /* final store input */
                  [v]                   "m" (*v),
                  [expectnot]           "r" (expectnot),
@@ -376,7 +376,7 @@ int rseq_addv(intptr_t *v, intptr_t count, int cpu)
                : /* gcc asm goto does not allow outputs */
                : [cpu_id]              "r" (cpu),
                  [current_cpu_id]      "m" (rseq_get_abi()->cpu_id),
-                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs),
+                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                  /* final store input */
                  [v]                   "m" (*v),
                  [count]               "r" (count)
@@ -439,7 +439,7 @@ int rseq_cmpeqv_trystorev_storev(intptr_t *v, intptr_t expect,
                : /* gcc asm goto does not allow outputs */
                : [cpu_id]              "r" (cpu),
                  [current_cpu_id]      "m" (rseq_get_abi()->cpu_id),
-                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs),
+                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                  /* try store input */
                  [v2]                  "m" (*v2),
                  [newv2]               "r" (newv2),
@@ -514,7 +514,7 @@ int rseq_cmpeqv_trystorev_storev_release(intptr_t *v, intptr_t expect,
                : /* gcc asm goto does not allow outputs */
                : [cpu_id]              "r" (cpu),
                  [current_cpu_id]      "m" (rseq_get_abi()->cpu_id),
-                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs),
+                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                  /* try store input */
                  [v2]                  "m" (*v2),
                  [newv2]               "r" (newv2),
@@ -590,7 +590,7 @@ int rseq_cmpeqv_cmpeqv_storev(intptr_t *v, intptr_t expect,
                : /* gcc asm goto does not allow outputs */
                : [cpu_id]              "r" (cpu),
                  [current_cpu_id]      "m" (rseq_get_abi()->cpu_id),
-                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs),
+                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                  /* cmp2 input */
                  [v2]                  "m" (*v2),
                  [expect2]             "r" (expect2),
@@ -671,7 +671,7 @@ int rseq_cmpeqv_trymemcpy_storev(intptr_t *v, intptr_t expect,
                : /* gcc asm goto does not allow outputs */
                : [cpu_id]              "r" (cpu),
                  [current_cpu_id]      "m" (rseq_get_abi()->cpu_id),
-                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs),
+                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                  /* final store input */
                  [v]                   "m" (*v),
                  [expect]              "r" (expect),
@@ -752,7 +752,7 @@ int rseq_cmpeqv_trymemcpy_storev_release(intptr_t *v, intptr_t expect,
                : /* gcc asm goto does not allow outputs */
                : [cpu_id]              "r" (cpu),
                  [current_cpu_id]      "m" (rseq_get_abi()->cpu_id),
-                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs),
+                 [rseq_cs]             "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                  /* final store input */
                  [v]                   "m" (*v),
                  [expect]              "r" (expect),
@@ -788,9 +788,4 @@ error2:
 #endif
 }
 
-#undef RSEQ_STORE_LONG
-#undef RSEQ_LOAD_LONG
-#undef RSEQ_LOADX_LONG
-#undef RSEQ_CMP_LONG
-
 #endif /* !RSEQ_SKIP_FASTPATH */
This page took 0.025785 seconds and 4 git commands to generate.