aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/internal/atomic/atomic_loong64.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/internal/atomic/atomic_loong64.s')
-rw-r--r--src/runtime/internal/atomic/atomic_loong64.s60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/runtime/internal/atomic/atomic_loong64.s b/src/runtime/internal/atomic/atomic_loong64.s
index 34193add3e..c7452d2e11 100644
--- a/src/runtime/internal/atomic/atomic_loong64.s
+++ b/src/runtime/internal/atomic/atomic_loong64.s
@@ -256,6 +256,66 @@ TEXT ·And(SB), NOSPLIT, $0-12
DBAR
RET
+// func Or32(addr *uint32, v uint32) old uint32
+TEXT ·Or32(SB), NOSPLIT, $0-20
+ MOVV ptr+0(FP), R4
+ MOVW val+8(FP), R5
+ DBAR
+ LL (R4), R6
+ OR R5, R6, R7
+ SC R7, (R4)
+ BEQ R7, -4(PC)
+ DBAR
+ MOVW R6, ret+16(FP)
+ RET
+
+// func And32(addr *uint32, v uint32) old uint32
+TEXT ·And32(SB), NOSPLIT, $0-20
+ MOVV ptr+0(FP), R4
+ MOVW val+8(FP), R5
+ DBAR
+ LL (R4), R6
+ AND R5, R6, R7
+ SC R7, (R4)
+ BEQ R7, -4(PC)
+ DBAR
+ MOVW R6, ret+16(FP)
+ RET
+
+// func Or64(addr *uint64, v uint64) old uint64
+TEXT ·Or64(SB), NOSPLIT, $0-24
+ MOVV ptr+0(FP), R4
+ MOVV val+8(FP), R5
+ DBAR
+ LLV (R4), R6
+ OR R5, R6, R7
+ SCV R7, (R4)
+ BEQ R7, -4(PC)
+ DBAR
+ MOVV R6, ret+16(FP)
+ RET
+
+// func And64(addr *uint64, v uint64) old uint64
+TEXT ·And64(SB), NOSPLIT, $0-24
+ MOVV ptr+0(FP), R4
+ MOVV val+8(FP), R5
+ DBAR
+ LLV (R4), R6
+ AND R5, R6, R7
+ SCV R7, (R4)
+ BEQ R7, -4(PC)
+ DBAR
+ MOVV R6, ret+16(FP)
+ RET
+
+// func Anduintptr(addr *uintptr, v uintptr) old uintptr
+TEXT ·Anduintptr(SB), NOSPLIT, $0-24
+ JMP ·And64(SB)
+
+// func Oruintptr(addr *uintptr, v uintptr) old uintptr
+TEXT ·Oruintptr(SB), NOSPLIT, $0-24
+ JMP ·Or64(SB)
+
// uint32 runtime∕internal∕atomic·Load(uint32 volatile* ptr)
TEXT ·Load(SB),NOSPLIT|NOFRAME,$0-12
MOVV ptr+0(FP), R19