38 lines
764 B
ArmAsm
38 lines
764 B
ArmAsm
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|||
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
||
|
|
|
||
|
|
#include "textflag.h"
|
||
|
|
|
||
|
|
// func casLoop(ptr *int64, old, new int64) bool
|
||
|
|
// Compare-and-swap using LR/SC.
|
||
|
|
TEXT ·casLoop(SB), NOSPLIT, $0-32
|
||
|
|
cas_retry:
|
||
|
|
LD a+0(FP), A0
|
||
|
|
LRD (A0), A1
|
||
|
|
LD b+8(FP), A2
|
||
|
|
BNE A1, A2, cas_fail
|
||
|
|
LD c+16(FP), A3
|
||
|
|
SCD A3, (A0), A4
|
||
|
|
BNE A4, X0, cas_retry
|
||
|
|
ADDI X0, $1, A5
|
||
|
|
SD A5, ret+24(FP)
|
||
|
|
RET
|
||
|
|
cas_fail:
|
||
|
|
SD X0, ret+24(FP)
|
||
|
|
RET
|
||
|
|
|
||
|
|
// func intToFloat(x int64) float64
|
||
|
|
TEXT ·intToFloat(SB), NOSPLIT, $0-16
|
||
|
|
LD a+0(FP), A0
|
||
|
|
FCVTDL A0, FA0
|
||
|
|
FSD FA0, ret+8(FP)
|
||
|
|
RET
|
||
|
|
|
||
|
|
// func compare(a, b float64) bool
|
||
|
|
TEXT ·compare(SB), NOSPLIT, $0-24
|
||
|
|
FLD a+0(FP), FA0
|
||
|
|
FLD b+8(FP), FA1
|
||
|
|
FLTD FA0, FA1, A0
|
||
|
|
SD A0, ret+16(FP)
|
||
|
|
RET
|