Lines Matching +full:3 +full:- +full:5 +full:v

1 /* SPDX-License-Identifier: LGPL-2.1 OR MIT */
3 * rseq-arm-bits.h
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 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
35 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
40 "str %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
42 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
43 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
44 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
45 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
48 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
49 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
50 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
66 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
81 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpnev_storeoffp_load)(intptr_t *v, intptr_t expectnot, in RSEQ_TEMPLATE_IDENTIFIER()
94 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
96 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
97 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
103 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
111 "str r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
113 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
114 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
115 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
116 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
119 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
120 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
122 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
139 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
154 int RSEQ_TEMPLATE_IDENTIFIER(rseq_addv)(intptr_t *v, intptr_t count, int cpu) in RSEQ_TEMPLATE_IDENTIFIER()
164 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
166 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
170 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
173 "str r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
176 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
177 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
178 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
181 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
182 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
183 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
198 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
207 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_cmpeqv_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
222 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
224 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
225 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
232 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
235 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
243 "str %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
246 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
247 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
248 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
251 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
252 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
257 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
273 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
297 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trystorev_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
311 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
313 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
314 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
320 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
326 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
328 "dmb\n\t" /* full mb provides store-release */ in RSEQ_TEMPLATE_IDENTIFIER()
331 "str %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
334 "b 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
335 RSEQ_ASM_DEFINE_ABORT(3, 4, "", abort, 1b, 2b, 4f) in RSEQ_TEMPLATE_IDENTIFIER()
336 "5:\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
339 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
340 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
345 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
361 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
377 int RSEQ_TEMPLATE_IDENTIFIER(rseq_cmpeqv_trymemcpy_storev)(intptr_t *v, intptr_t expect, in RSEQ_TEMPLATE_IDENTIFIER()
381 uint32_t rseq_scratch[3]; in RSEQ_TEMPLATE_IDENTIFIER()
396 RSEQ_ASM_STORE_RSEQ_CS(1, 3f, rseq_cs) in RSEQ_TEMPLATE_IDENTIFIER()
398 RSEQ_INJECT_ASM(3) in RSEQ_TEMPLATE_IDENTIFIER()
399 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
401 "bne 5f\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
405 "ldr r0, %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
420 RSEQ_INJECT_ASM(5) in RSEQ_TEMPLATE_IDENTIFIER()
422 "dmb\n\t" /* full mb provides store-release */ in RSEQ_TEMPLATE_IDENTIFIER()
425 "str %[newv], %[v]\n\t" in RSEQ_TEMPLATE_IDENTIFIER()
433 RSEQ_ASM_DEFINE_ABORT(3, 4, in RSEQ_TEMPLATE_IDENTIFIER()
439 RSEQ_ASM_DEFINE_CMPFAIL(5, in RSEQ_TEMPLATE_IDENTIFIER()
462 [current_cpu_id] "m" (rseq_get_abi()->RSEQ_TEMPLATE_CPU_ID_FIELD), in RSEQ_TEMPLATE_IDENTIFIER()
463 [rseq_cs] "m" (rseq_get_abi()->rseq_cs.arch.ptr), in RSEQ_TEMPLATE_IDENTIFIER()
465 [v] "m" (*v), in RSEQ_TEMPLATE_IDENTIFIER()
488 return -1; in RSEQ_TEMPLATE_IDENTIFIER()
505 #include "rseq-bits-reset.h"