Rename RSEQ_TEMPLATE macros
[librseq.git] / include / rseq / rseq-riscv-bits.h
index cfb097236eb038bd518c02c2e0ca05cf90232222..1d923bac8b89f09a8aa3dae0f557d3b92f535588 100644 (file)
@@ -3,16 +3,22 @@
 
 #include "rseq-bits-template.h"
 
+/*
+ * Refer to rseq-pseudocode.h for documentation and pseudo-code of the
+ * rseq critical section helpers.
+ */
+#include "rseq-pseudocode.h"
+
 #if defined(RSEQ_TEMPLATE_MO_RELAXED) && \
-       (defined(RSEQ_TEMPLATE_CPU_ID) || defined(RSEQ_TEMPLATE_MM_CID))
+       (defined(RSEQ_TEMPLATE_INDEX_CPU_ID) || defined(RSEQ_TEMPLATE_INDEX_MM_CID))
 
 static inline __attribute__((always_inline))
-int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_storev)(intptr_t *v, intptr_t expect, intptr_t newv, int cpu)
+int RSEQ_TEMPLATE_IDENTIFIER(rseq_load_cbne_store__ptr)(intptr_t *v, intptr_t expect, intptr_t newv, int cpu)
 {
        RSEQ_INJECT_C(9)
 
        __asm__ __volatile__ goto(RSEQ_ASM_DEFINE_TABLE(1, 2f, 3f, 4f)
-                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[cmpfail]")
+                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[ne]")
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error1]")
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error2]")
@@ -20,7 +26,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_storev)(intptr_t *v, intptr_t expect, i
                                  RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, 4f)
                                  RSEQ_INJECT_ASM(3)
-                                 RSEQ_ASM_OP_CBNE(v, expect, "%l[cmpfail]")
+                                 RSEQ_ASM_OP_CBNE(v, expect, "%l[ne]")
                                  RSEQ_INJECT_ASM(4)
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, "%l[error1]")
@@ -31,7 +37,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_storev)(intptr_t *v, intptr_t expect, i
                                  RSEQ_ASM_DEFINE_ABORT(4, "", abort)
                                  : /* gcc asm goto does not allow outputs */
                                  : [cpu_id]            "r" (cpu),
-                                   [current_cpu_id]    "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD),
+                                   [current_cpu_id]    "m" (rseq_get_abi()->RSEQ_TEMPLATE_INDEX_CPU_ID_FIELD),
                                    [rseq_cs]           "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                                    [v]                 "m" (*v),
                                    [expect]            "r" (expect),
@@ -39,7 +45,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_storev)(intptr_t *v, intptr_t expect, i
                                    RSEQ_INJECT_INPUT
                                  : "memory", RSEQ_ASM_TMP_REG_1
                                    RSEQ_INJECT_CLOBBER
-                                 : abort, cmpfail
+                                 : abort, ne
 #ifdef RSEQ_COMPARE_TWICE
                                    , error1, error2
 #endif
@@ -49,7 +55,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_storev)(intptr_t *v, intptr_t expect, i
 abort:
        RSEQ_INJECT_FAILED
        return -1;
-cmpfail:
+ne:
        return 1;
 #ifdef RSEQ_COMPARE_TWICE
 error1:
@@ -60,13 +66,13 @@ error2:
 }
 
 static inline __attribute__((always_inline))
-int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpnev_storeoffp_load)(intptr_t *v, intptr_t expectnot,
+int RSEQ_TEMPLATE_IDENTIFIER(rseq_load_cbeq_store_add_load_store__ptr)(intptr_t *v, intptr_t expectnot,
                               off_t voffp, intptr_t *load, int cpu)
 {
        RSEQ_INJECT_C(9)
 
        __asm__ __volatile__ goto(RSEQ_ASM_DEFINE_TABLE(1, 2f, 3f, 4f)
-                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[cmpfail]")
+                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[eq]")
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error1]")
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error2]")
@@ -74,7 +80,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpnev_storeoffp_load)(intptr_t *v, intptr_t e
                                  RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, 4f)
                                  RSEQ_INJECT_ASM(3)
-                                 RSEQ_ASM_OP_CBEQ(v, expectnot, "%l[cmpfail]")
+                                 RSEQ_ASM_OP_CBEQ(v, expectnot, "%l[eq]")
                                  RSEQ_INJECT_ASM(4)
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, "%l[error1]")
@@ -88,7 +94,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpnev_storeoffp_load)(intptr_t *v, intptr_t e
                                  RSEQ_ASM_DEFINE_ABORT(4, "", abort)
                                  : /* gcc asm goto does not allow outputs */
                                  : [cpu_id]            "r" (cpu),
-                                   [current_cpu_id]    "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD),
+                                   [current_cpu_id]    "m" (rseq_get_abi()->RSEQ_TEMPLATE_INDEX_CPU_ID_FIELD),
                                    [rseq_cs]           "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                                    [v]                 "m" (*v),
                                    [expectnot]         "r" (expectnot),
@@ -97,7 +103,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpnev_storeoffp_load)(intptr_t *v, intptr_t e
                                    RSEQ_INJECT_INPUT
                                  : "memory", RSEQ_ASM_TMP_REG_1
                                    RSEQ_INJECT_CLOBBER
-                                 : abort, cmpfail
+                                 : abort, eq
 #ifdef RSEQ_COMPARE_TWICE
                                    , error1, error2
 #endif
@@ -106,7 +112,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpnev_storeoffp_load)(intptr_t *v, intptr_t e
 abort:
        RSEQ_INJECT_FAILED
        return -1;
-cmpfail:
+eq:
        return 1;
 #ifdef RSEQ_COMPARE_TWICE
 error1:
@@ -117,7 +123,7 @@ error2:
 }
 
 static inline __attribute__((always_inline))
-int RSEQ_TEMPLATE_IDENTIFIER(rseq_addv)(intptr_t *v, intptr_t count, int cpu)
+int RSEQ_TEMPLATE_IDENTIFIER(rseq_load_add_store__ptr)(intptr_t *v, intptr_t count, int cpu)
 {
        RSEQ_INJECT_C(9)
 
@@ -138,7 +144,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_addv)(intptr_t *v, intptr_t count, int cpu)
                                  RSEQ_ASM_DEFINE_ABORT(4, "", abort)
                                  : /* gcc asm goto does not allow outputs */
                                  : [cpu_id]            "r" (cpu),
-                                   [current_cpu_id]    "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD),
+                                   [current_cpu_id]    "m" (rseq_get_abi()->RSEQ_TEMPLATE_INDEX_CPU_ID_FIELD),
                                    [rseq_cs]           "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                                    [v]                 "m" (*v),
                                    [count]             "r" (count)
@@ -161,14 +167,14 @@ error1:
 }
 
 static inline __attribute__((always_inline))
-int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_cmpeqv_storev)(intptr_t *v, intptr_t expect,
+int RSEQ_TEMPLATE_IDENTIFIER(rseq_load_cbne_load_cbne_store__ptr)(intptr_t *v, intptr_t expect,
                              intptr_t *v2, intptr_t expect2,
                              intptr_t newv, int cpu)
 {
        RSEQ_INJECT_C(9)
 
        __asm__ __volatile__ goto(RSEQ_ASM_DEFINE_TABLE(1, 2f, 3f, 4f)
-                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[cmpfail]")
+                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[ne]")
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error1]")
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error2]")
@@ -177,9 +183,9 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_cmpeqv_storev)(intptr_t *v, intptr_t ex
                                  RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, 4f)
                                  RSEQ_INJECT_ASM(3)
-                                 RSEQ_ASM_OP_CBNE(v, expect, "%l[cmpfail]")
+                                 RSEQ_ASM_OP_CBNE(v, expect, "%l[ne]")
                                  RSEQ_INJECT_ASM(4)
-                                 RSEQ_ASM_OP_CBNE(v2, expect2, "%l[cmpfail]")
+                                 RSEQ_ASM_OP_CBNE(v2, expect2, "%l[ne]")
                                  RSEQ_INJECT_ASM(5)
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, "%l[error1]")
@@ -191,7 +197,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_cmpeqv_storev)(intptr_t *v, intptr_t ex
                                  RSEQ_ASM_DEFINE_ABORT(4, "", abort)
                                  : /* gcc asm goto does not allow outputs */
                                  : [cpu_id]            "r" (cpu),
-                                   [current_cpu_id]    "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD),
+                                   [current_cpu_id]    "m" (rseq_get_abi()->RSEQ_TEMPLATE_INDEX_CPU_ID_FIELD),
                                    [rseq_cs]           "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                                    [v]                 "m" (*v),
                                    [expect]            "r" (expect),
@@ -201,7 +207,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_cmpeqv_storev)(intptr_t *v, intptr_t ex
                                    RSEQ_INJECT_INPUT
                                  : "memory", RSEQ_ASM_TMP_REG_1
                                    RSEQ_INJECT_CLOBBER
-                                 : abort, cmpfail
+                                 : abort, ne
 #ifdef RSEQ_COMPARE_TWICE
                                    , error1, error2, error3
 #endif
@@ -211,7 +217,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_cmpeqv_storev)(intptr_t *v, intptr_t ex
 abort:
        RSEQ_INJECT_FAILED
        return -1;
-cmpfail:
+ne:
        return 1;
 #ifdef RSEQ_COMPARE_TWICE
 error1:
@@ -225,12 +231,8 @@ error3:
 
 #define RSEQ_ARCH_HAS_OFFSET_DEREF_ADDV
 
-/*
- *   pval = *(ptr+off)
- *  *pval += inc;
- */
 static inline __attribute__((always_inline))
-int RSEQ_TEMPLATE_IDENTIFIER(rseq_offset_deref_addv)(intptr_t *ptr, off_t off, intptr_t inc, int cpu)
+int RSEQ_TEMPLATE_IDENTIFIER(rseq_load_add_load_add_store__ptr)(intptr_t *ptr, off_t off, intptr_t inc, int cpu)
 {
        RSEQ_INJECT_C(9)
 
@@ -249,7 +251,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_offset_deref_addv)(intptr_t *ptr, off_t off, i
                                  RSEQ_ASM_DEFINE_ABORT(4, "", abort)
                                  : /* gcc asm goto does not allow outputs */
                                  : [cpu_id]                    "r" (cpu),
-                                   [current_cpu_id]            "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD),
+                                   [current_cpu_id]            "m" (rseq_get_abi()->RSEQ_TEMPLATE_INDEX_CPU_ID_FIELD),
                                    [rseq_cs]                   "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                                    [ptr]                       "r" (ptr),
                                    [off]                       "er" (off),
@@ -273,20 +275,20 @@ error1:
 }
 
 #endif /* #if defined(RSEQ_TEMPLATE_MO_RELAXED) &&
-       (defined(RSEQ_TEMPLATE_CPU_ID) || defined(RSEQ_TEMPLATE_MM_CID)) */
+       (defined(RSEQ_TEMPLATE_INDEX_CPU_ID) || defined(RSEQ_TEMPLATE_INDEX_MM_CID)) */
 
 #if (defined(RSEQ_TEMPLATE_MO_RELAXED) || defined(RSEQ_TEMPLATE_MO_RELEASE)) && \
-       (defined(RSEQ_TEMPLATE_CPU_ID) || defined(RSEQ_TEMPLATE_MM_CID))
+       (defined(RSEQ_TEMPLATE_INDEX_CPU_ID) || defined(RSEQ_TEMPLATE_INDEX_MM_CID))
 
 static inline __attribute__((always_inline))
-int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trystorev_storev)(intptr_t *v, intptr_t expect,
+int RSEQ_TEMPLATE_IDENTIFIER(rseq_load_cbne_store_store__ptr)(intptr_t *v, intptr_t expect,
                                 intptr_t *v2, intptr_t newv2,
                                 intptr_t newv, int cpu)
 {
        RSEQ_INJECT_C(9)
 
        __asm__ __volatile__ goto(RSEQ_ASM_DEFINE_TABLE(1, 2f, 3f, 4f)
-                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[cmpfail]")
+                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[ne]")
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error1]")
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error2]")
@@ -294,7 +296,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trystorev_storev)(intptr_t *v, intptr_t
                                  RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, 4f)
                                  RSEQ_INJECT_ASM(3)
-                                 RSEQ_ASM_OP_CBNE(v, expect, "%l[cmpfail]")
+                                 RSEQ_ASM_OP_CBNE(v, expect, "%l[ne]")
                                  RSEQ_INJECT_ASM(4)
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, "%l[error1]")
@@ -311,7 +313,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trystorev_storev)(intptr_t *v, intptr_t
                                  RSEQ_ASM_DEFINE_ABORT(4, "", abort)
                                  : /* gcc asm goto does not allow outputs */
                                  : [cpu_id]                    "r" (cpu),
-                                   [current_cpu_id]            "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD),
+                                   [current_cpu_id]            "m" (rseq_get_abi()->RSEQ_TEMPLATE_INDEX_CPU_ID_FIELD),
                                    [rseq_cs]                   "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                                    [expect]                    "r" (expect),
                                    [v]                         "m" (*v),
@@ -321,7 +323,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trystorev_storev)(intptr_t *v, intptr_t
                                    RSEQ_INJECT_INPUT
                                  : "memory", RSEQ_ASM_TMP_REG_1
                                    RSEQ_INJECT_CLOBBER
-                                 : abort, cmpfail
+                                 : abort, ne
 #ifdef RSEQ_COMPARE_TWICE
                                    , error1, error2
 #endif
@@ -331,7 +333,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trystorev_storev)(intptr_t *v, intptr_t
 abort:
        RSEQ_INJECT_FAILED
        return -1;
-cmpfail:
+ne:
        return 1;
 #ifdef RSEQ_COMPARE_TWICE
 error1:
@@ -342,13 +344,13 @@ error2:
 }
 
 static inline __attribute__((always_inline))
-int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trymemcpy_storev)(intptr_t *v, intptr_t expect,
+int RSEQ_TEMPLATE_IDENTIFIER(rseq_load_cbne_memcpy_store__ptr)(intptr_t *v, intptr_t expect,
                                 void *dst, void *src, size_t len,
                                 intptr_t newv, int cpu)
 {
        RSEQ_INJECT_C(9)
        __asm__ __volatile__ goto(RSEQ_ASM_DEFINE_TABLE(1, 2f, 3f, 4f)
-                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[cmpfail]")
+                                 RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[ne]")
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error1]")
                                  RSEQ_ASM_DEFINE_EXIT_POINT(2f, "%l[error2]")
@@ -356,7 +358,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trymemcpy_storev)(intptr_t *v, intptr_t
                                  RSEQ_ASM_STORE_RSEQ_CS(2, 1b, rseq_cs)
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, 4f)
                                  RSEQ_INJECT_ASM(3)
-                                 RSEQ_ASM_OP_CBNE(v, expect, "%l[cmpfail]")
+                                 RSEQ_ASM_OP_CBNE(v, expect, "%l[ne]")
                                  RSEQ_INJECT_ASM(4)
 #ifdef RSEQ_COMPARE_TWICE
                                  RSEQ_ASM_CBNE_CPU_ID(cpu_id, current_cpu_id, "%l[error1]")
@@ -373,7 +375,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trymemcpy_storev)(intptr_t *v, intptr_t
                                  RSEQ_ASM_DEFINE_ABORT(4, "", abort)
                                  : /* gcc asm goto does not allow outputs */
                                  : [cpu_id]                    "r" (cpu),
-                                   [current_cpu_id]            "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD),
+                                   [current_cpu_id]            "m" (rseq_get_abi()->RSEQ_TEMPLATE_INDEX_CPU_ID_FIELD),
                                    [rseq_cs]                   "m" (rseq_get_abi()->rseq_cs.arch.ptr),
                                    [expect]                    "r" (expect),
                                    [v]                         "m" (*v),
@@ -385,7 +387,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trymemcpy_storev)(intptr_t *v, intptr_t
                                  : "memory", RSEQ_ASM_TMP_REG_1, RSEQ_ASM_TMP_REG_2,
                                    RSEQ_ASM_TMP_REG_3, RSEQ_ASM_TMP_REG_4
                                    RSEQ_INJECT_CLOBBER
-                                 : abort, cmpfail
+                                 : abort, ne
 #ifdef RSEQ_COMPARE_TWICE
                                    , error1, error2
 #endif
@@ -395,7 +397,7 @@ int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trymemcpy_storev)(intptr_t *v, intptr_t
 abort:
        RSEQ_INJECT_FAILED
        return -1;
-cmpfail:
+ne:
        return 1;
 #ifdef RSEQ_COMPARE_TWICE
 error1:
@@ -406,6 +408,6 @@ error2:
 }
 
 #endif /* #if (defined(RSEQ_TEMPLATE_MO_RELAXED) || defined(RSEQ_TEMPLATE_MO_RELEASE)) &&
-       (defined(RSEQ_TEMPLATE_CPU_ID) || defined(RSEQ_TEMPLATE_MM_CID)) */
+       (defined(RSEQ_TEMPLATE_INDEX_CPU_ID) || defined(RSEQ_TEMPLATE_INDEX_MM_CID)) */
 
 #include "rseq-bits-reset.h"
This page took 0.02892 seconds and 4 git commands to generate.