Lines Matching +full:3 +full:- +full:5 +full:v
1 /* SPDX-License-Identifier: LGPL-2.1 OR MIT */
3 #include "rseq-bits-template.h"
9 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_storev)(intptr_t *v, intptr_t expect, intptr_t newv, int c… in RSEQ_TEMPLATE_IDENTIFIER()
14 RSEQ_ASM_DEFINE_TABLE(3, 1f, 2f, 4f) /* start, commit, abort */ in RSEQ_TEMPLATE_IDENTIFIER()
21 RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
23 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
24 LONG_CMP " %[expect], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
29 LONG_CMP " %[expect], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
33 LONG_S " %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
35 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
39 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
40 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
41 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
57 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
72 * Compare @v against @expectnot. When it does _not_ match, load @v
73 * into @load, and store the content of *@v + voffp into @v.
76 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpnev_storeoffp_load)(intptr_t *v, intptr_t expectnot, in RSEQ_TEMPLATE_IDENTIFIER()
82 RSEQ_ASM_DEFINE_TABLE(3, 1f, 2f, 4f) /* start, commit, abort */ in RSEQ_TEMPLATE_IDENTIFIER()
89 RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
91 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
92 LONG_L " %%r1, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
98 LONG_L " %%r1, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
106 LONG_S " %%r1, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
108 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
112 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
113 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
115 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
132 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
147 int RSEQ_TEMPLATE_IDENTIFIER(rseq_addv)(intptr_t *v, intptr_t count, int cpu) in RSEQ_TEMPLATE_IDENTIFIER()
152 RSEQ_ASM_DEFINE_TABLE(3, 1f, 2f, 4f) /* start, commit, abort */ in RSEQ_TEMPLATE_IDENTIFIER()
157 RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
159 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
163 LONG_L " %%r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
166 LONG_S " %%r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
172 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
173 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
175 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
190 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
199 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_cmpeqv_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
206 RSEQ_ASM_DEFINE_TABLE(3, 1f, 2f, 4f) /* start, commit, abort */ in RSEQ_TEMPLATE_IDENTIFIER()
214 RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
216 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
217 LONG_CMP " %[expect], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
222 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
225 LONG_CMP " %[expect], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
231 LONG_S " %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
237 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
238 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
243 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
259 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
284 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trystorev_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
291 RSEQ_ASM_DEFINE_TABLE(3, 1f, 2f, 4f) /* start, commit, abort */ in RSEQ_TEMPLATE_IDENTIFIER()
298 RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
300 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
301 LONG_CMP " %[expect], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
306 LONG_CMP " %[expect], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
311 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
313 LONG_S " %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
319 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
320 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
325 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
341 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
357 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trymemcpy_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
361 uint64_t rseq_scratch[3]; in RSEQ_TEMPLATE_IDENTIFIER()
366 RSEQ_ASM_DEFINE_TABLE(3, 1f, 2f, 4f) /* start, commit, abort */ in RSEQ_TEMPLATE_IDENTIFIER()
376 RSEQ_ASM_STORE_RSEQ_CS(1, 3b, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
378 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
379 LONG_CMP " %[expect], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
380 "jnz 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
384 LONG_CMP " %[expect], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
395 LONG_ADDI " %[len], -1\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
398 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
400 LONG_S " %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
412 RSEQ_ASM_DEFINE_CMPFAIL(5, in RSEQ_TEMPLATE_IDENTIFIER()
431 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
432 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
434 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
457 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
474 #include "rseq-bits-reset.h"