Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/include/atomic.h
Show First 20 Lines • Show All 403 Lines • ▼ Show 20 Lines | |||||
atomic_testand##op##_##t##flav(volatile uint##t##_t *p, u_int val) | atomic_testand##op##_##t##flav(volatile uint##t##_t *p, u_int val) | ||||
#define _ATOMIC_TEST_OP_IMPL(t, w, op, llsc_asm_op, lse_asm_op) \ | #define _ATOMIC_TEST_OP_IMPL(t, w, op, llsc_asm_op, lse_asm_op) \ | ||||
_ATOMIC_TEST_OP_PROTO(t, op, _llsc) \ | _ATOMIC_TEST_OP_PROTO(t, op, _llsc) \ | ||||
{ \ | { \ | ||||
uint##t##_t mask, old, tmp; \ | uint##t##_t mask, old, tmp; \ | ||||
int res; \ | int res; \ | ||||
\ | \ | ||||
mask = 1u << (val & 0x1f); \ | mask = ((uint##t##_t)1) << (val & (t - 1)); \ | ||||
__asm __volatile( \ | __asm __volatile( \ | ||||
"1: ldxr %"#w"2, [%3]\n" \ | "1: ldxr %"#w"2, [%3]\n" \ | ||||
" "#llsc_asm_op" %"#w"0, %"#w"2, %"#w"4\n" \ | " "#llsc_asm_op" %"#w"0, %"#w"2, %"#w"4\n" \ | ||||
" stxr %w1, %"#w"0, [%3]\n" \ | " stxr %w1, %"#w"0, [%3]\n" \ | ||||
" cbnz %w1, 1b\n" \ | " cbnz %w1, 1b\n" \ | ||||
: "=&r" (tmp), "=&r" (res), "=&r" (old) \ | : "=&r" (tmp), "=&r" (res), "=&r" (old) \ | ||||
: "r" (p), "r" (mask) \ | : "r" (p), "r" (mask) \ | ||||
: "memory" \ | : "memory" \ | ||||
); \ | ); \ | ||||
\ | \ | ||||
return ((old & mask) != 0); \ | return ((old & mask) != 0); \ | ||||
} \ | } \ | ||||
\ | \ | ||||
_ATOMIC_TEST_OP_PROTO(t, op, _lse) \ | _ATOMIC_TEST_OP_PROTO(t, op, _lse) \ | ||||
{ \ | { \ | ||||
uint##t##_t mask, old; \ | uint##t##_t mask, old; \ | ||||
\ | \ | ||||
mask = 1u << (val & 0x1f); \ | mask = ((uint##t##_t)1) << (val & (t - 1)); \ | ||||
__asm __volatile( \ | __asm __volatile( \ | ||||
".arch_extension lse\n" \ | ".arch_extension lse\n" \ | ||||
"ld"#lse_asm_op" %"#w"2, %"#w"0, [%1]\n" \ | "ld"#lse_asm_op" %"#w"2, %"#w"0, [%1]\n" \ | ||||
".arch_extension nolse\n" \ | ".arch_extension nolse\n" \ | ||||
: "=r" (old) \ | : "=r" (old) \ | ||||
: "r" (p), "r" (mask) \ | : "r" (p), "r" (mask) \ | ||||
: "memory" \ | : "memory" \ | ||||
); \ | ); \ | ||||
▲ Show 20 Lines • Show All 171 Lines • Show Last 20 Lines |