36 lines
942 B
ArmAsm
36 lines
942 B
ArmAsm
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
// Differential kernel for the riscv64 atomics: the RV64A AMO family and the
|
|
// load-reserved / store-conditional pair, in the toolchain's spelling
|
|
// (value, (address), result). Both orderings sit in the encodings: the
|
|
// table gives every AMO aq and rl, LR acquire and SC release.
|
|
|
|
#include "textflag.h"
|
|
|
|
TEXT ·amo(SB), NOSPLIT, $0-0
|
|
AMOSWAPW X5, (X6), X7
|
|
AMOSWAPD X5, (X6), X7
|
|
AMOADDW X5, (X6), X7
|
|
AMOADDD X5, (X6), X7
|
|
AMOANDW X5, (X6), X7
|
|
AMOANDD X5, (X6), X7
|
|
AMOORW X5, (X6), X7
|
|
AMOORD X5, (X6), X7
|
|
AMOXORW X5, (X6), X7
|
|
AMOXORD X5, (X6), X7
|
|
AMOMAXW X5, (X6), X7
|
|
AMOMAXD X5, (X6), X7
|
|
AMOMAXUW X5, (X6), X7
|
|
AMOMAXUD X5, (X6), X7
|
|
AMOMINUW X5, (X6), X7
|
|
AMOMINUD X5, (X6), X7
|
|
RET
|
|
|
|
TEXT ·lrsc(SB), NOSPLIT, $0-0
|
|
LRW (X5), X6
|
|
LRD (X5), X6
|
|
SCW X5, (X6), X7
|
|
SCD X5, (X6), X7
|
|
RET
|