Lines Matching +full:3 +full:- +full:5 +full:v
1 /* SPDX-License-Identifier: LGPL-2.1 OR MIT */
5 * (C) Copyright 2016-2022 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
8 #include "rseq-bits-template.h"
14 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_storev)(intptr_t *v, intptr_t expect, intptr_t newv, int c… in RSEQ_TEMPLATE_IDENTIFIER()
26 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
28 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
29 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
34 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
38 LONG_S " %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
40 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
41 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
42 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
43 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
46 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
47 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
48 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
62 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
74 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpnev_storeoffp_load)(intptr_t *v, intptr_t expectnot, in RSEQ_TEMPLATE_IDENTIFIER()
87 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
89 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
90 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
95 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
102 LONG_S " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
104 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
105 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
106 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
107 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
110 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
111 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
113 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
128 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
140 int RSEQ_TEMPLATE_IDENTIFIER(rseq_addv)(intptr_t *v, intptr_t count, int cpu) in RSEQ_TEMPLATE_IDENTIFIER()
150 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
152 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
156 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
159 LONG_S " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
162 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
163 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
164 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
167 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
168 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
169 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
182 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
190 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_cmpeqv_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
205 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
207 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
208 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
213 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
216 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
222 LONG_S " %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
225 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
226 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
227 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
230 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
231 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
236 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
250 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
270 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trystorev_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
284 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
286 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
287 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
292 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
297 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
299 "sync\n\t" /* full sync provides store-release */ in RSEQ_TEMPLATE_IDENTIFIER()
302 LONG_S " %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
305 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
306 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
307 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
310 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
311 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
316 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
330 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
342 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trymemcpy_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
346 uintptr_t rseq_scratch[3]; in RSEQ_TEMPLATE_IDENTIFIER()
361 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
363 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
364 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
365 "bne $4, %[expect], 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
369 LONG_L " $4, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
379 LONG_ADDI " %[len], -1\n\t" \ in RSEQ_TEMPLATE_IDENTIFIER()
382 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
384 "sync\n\t" /* full sync provides store-release */ in RSEQ_TEMPLATE_IDENTIFIER()
387 LONG_S " %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
395 RSEQ_ASM_DEFINE_ABORT(3, 4, in RSEQ_TEMPLATE_IDENTIFIER()
401 RSEQ_ASM_DEFINE_CMPFAIL(5, in RSEQ_TEMPLATE_IDENTIFIER()
424 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
425 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
427 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
448 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
462 #include "rseq-bits-reset.h"