aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/internal/atomic/atomic_arm64.s
diff options
context:
space:
mode:
authorAndy Pan <panjf2000@gmail.com>2024-02-01 10:21:14 +0800
committerGopher Robot <gobot@golang.org>2024-03-25 19:53:03 +0000
commit4c2b1e0feb3d3112da94fa4cd11ebe995003fa89 (patch)
treeb3d9dfee9dc61d066c0abfdf875e1995ef5e042f /src/runtime/internal/atomic/atomic_arm64.s
parentb1182f22c0e557840239dfa80259d6b8c67fb559 (diff)
downloadgo-4c2b1e0feb3d3112da94fa4cd11ebe995003fa89.tar.xz
runtime: migrate internal/atomic to internal/runtime
For #65355 Change-Id: I65dd090fb99de9b231af2112c5ccb0eb635db2be Reviewed-on: https://go-review.googlesource.com/c/go/+/560155 Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Ibrahim Bazoka <ibrahimbazoka729@gmail.com> Auto-Submit: Emmanuel Odeke <emmanuel@orijtech.com>
Diffstat (limited to 'src/runtime/internal/atomic/atomic_arm64.s')
-rw-r--r--src/runtime/internal/atomic/atomic_arm64.s467
1 files changed, 0 insertions, 467 deletions
diff --git a/src/runtime/internal/atomic/atomic_arm64.s b/src/runtime/internal/atomic/atomic_arm64.s
deleted file mode 100644
index ede56538b8..0000000000
--- a/src/runtime/internal/atomic/atomic_arm64.s
+++ /dev/null
@@ -1,467 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-#include "go_asm.h"
-#include "textflag.h"
-
-TEXT ·Casint32(SB), NOSPLIT, $0-17
- B ·Cas(SB)
-
-TEXT ·Casint64(SB), NOSPLIT, $0-25
- B ·Cas64(SB)
-
-TEXT ·Casuintptr(SB), NOSPLIT, $0-25
- B ·Cas64(SB)
-
-TEXT ·CasRel(SB), NOSPLIT, $0-17
- B ·Cas(SB)
-
-TEXT ·Loadint32(SB), NOSPLIT, $0-12
- B ·Load(SB)
-
-TEXT ·Loadint64(SB), NOSPLIT, $0-16
- B ·Load64(SB)
-
-TEXT ·Loaduintptr(SB), NOSPLIT, $0-16
- B ·Load64(SB)
-
-TEXT ·Loaduint(SB), NOSPLIT, $0-16
- B ·Load64(SB)
-
-TEXT ·Storeint32(SB), NOSPLIT, $0-12
- B ·Store(SB)
-
-TEXT ·Storeint64(SB), NOSPLIT, $0-16
- B ·Store64(SB)
-
-TEXT ·Storeuintptr(SB), NOSPLIT, $0-16
- B ·Store64(SB)
-
-TEXT ·Xaddint32(SB), NOSPLIT, $0-20
- B ·Xadd(SB)
-
-TEXT ·Xaddint64(SB), NOSPLIT, $0-24
- B ·Xadd64(SB)
-
-TEXT ·Xadduintptr(SB), NOSPLIT, $0-24
- B ·Xadd64(SB)
-
-TEXT ·Casp1(SB), NOSPLIT, $0-25
- B ·Cas64(SB)
-
-// uint32 ·Load(uint32 volatile* addr)
-TEXT ·Load(SB),NOSPLIT,$0-12
- MOVD ptr+0(FP), R0
- LDARW (R0), R0
- MOVW R0, ret+8(FP)
- RET
-
-// uint8 ·Load8(uint8 volatile* addr)
-TEXT ·Load8(SB),NOSPLIT,$0-9
- MOVD ptr+0(FP), R0
- LDARB (R0), R0
- MOVB R0, ret+8(FP)
- RET
-
-// uint64 ·Load64(uint64 volatile* addr)
-TEXT ·Load64(SB),NOSPLIT,$0-16
- MOVD ptr+0(FP), R0
- LDAR (R0), R0
- MOVD R0, ret+8(FP)
- RET
-
-// void *·Loadp(void *volatile *addr)
-TEXT ·Loadp(SB),NOSPLIT,$0-16
- MOVD ptr+0(FP), R0
- LDAR (R0), R0
- MOVD R0, ret+8(FP)
- RET
-
-// uint32 ·LoadAcq(uint32 volatile* addr)
-TEXT ·LoadAcq(SB),NOSPLIT,$0-12
- B ·Load(SB)
-
-// uint64 ·LoadAcquintptr(uint64 volatile* addr)
-TEXT ·LoadAcq64(SB),NOSPLIT,$0-16
- B ·Load64(SB)
-
-// uintptr ·LoadAcq64(uintptr volatile* addr)
-TEXT ·LoadAcquintptr(SB),NOSPLIT,$0-16
- B ·Load64(SB)
-
-TEXT ·StorepNoWB(SB), NOSPLIT, $0-16
- B ·Store64(SB)
-
-TEXT ·StoreRel(SB), NOSPLIT, $0-12
- B ·Store(SB)
-
-TEXT ·StoreRel64(SB), NOSPLIT, $0-16
- B ·Store64(SB)
-
-TEXT ·StoreReluintptr(SB), NOSPLIT, $0-16
- B ·Store64(SB)
-
-TEXT ·Store(SB), NOSPLIT, $0-12
- MOVD ptr+0(FP), R0
- MOVW val+8(FP), R1
- STLRW R1, (R0)
- RET
-
-TEXT ·Store8(SB), NOSPLIT, $0-9
- MOVD ptr+0(FP), R0
- MOVB val+8(FP), R1
- STLRB R1, (R0)
- RET
-
-TEXT ·Store64(SB), NOSPLIT, $0-16
- MOVD ptr+0(FP), R0
- MOVD val+8(FP), R1
- STLR R1, (R0)
- RET
-
-// uint32 Xchg(ptr *uint32, new uint32)
-// Atomically:
-// old := *ptr;
-// *ptr = new;
-// return old;
-TEXT ·Xchg(SB), NOSPLIT, $0-20
- MOVD ptr+0(FP), R0
- MOVW new+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- SWPALW R1, (R0), R2
- MOVW R2, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRW (R0), R2
- STLXRW R1, (R0), R3
- CBNZ R3, load_store_loop
- MOVW R2, ret+16(FP)
- RET
-#endif
-
-// uint64 Xchg64(ptr *uint64, new uint64)
-// Atomically:
-// old := *ptr;
-// *ptr = new;
-// return old;
-TEXT ·Xchg64(SB), NOSPLIT, $0-24
- MOVD ptr+0(FP), R0
- MOVD new+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- SWPALD R1, (R0), R2
- MOVD R2, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXR (R0), R2
- STLXR R1, (R0), R3
- CBNZ R3, load_store_loop
- MOVD R2, ret+16(FP)
- RET
-#endif
-
-// bool Cas(uint32 *ptr, uint32 old, uint32 new)
-// Atomically:
-// if(*val == old){
-// *val = new;
-// return 1;
-// } else
-// return 0;
-TEXT ·Cas(SB), NOSPLIT, $0-17
- MOVD ptr+0(FP), R0
- MOVW old+8(FP), R1
- MOVW new+12(FP), R2
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- MOVD R1, R3
- CASALW R3, (R0), R2
- CMP R1, R3
- CSET EQ, R0
- MOVB R0, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRW (R0), R3
- CMPW R1, R3
- BNE ok
- STLXRW R2, (R0), R3
- CBNZ R3, load_store_loop
-ok:
- CSET EQ, R0
- MOVB R0, ret+16(FP)
- RET
-#endif
-
-// bool ·Cas64(uint64 *ptr, uint64 old, uint64 new)
-// Atomically:
-// if(*val == old){
-// *val = new;
-// return 1;
-// } else {
-// return 0;
-// }
-TEXT ·Cas64(SB), NOSPLIT, $0-25
- MOVD ptr+0(FP), R0
- MOVD old+8(FP), R1
- MOVD new+16(FP), R2
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- MOVD R1, R3
- CASALD R3, (R0), R2
- CMP R1, R3
- CSET EQ, R0
- MOVB R0, ret+24(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXR (R0), R3
- CMP R1, R3
- BNE ok
- STLXR R2, (R0), R3
- CBNZ R3, load_store_loop
-ok:
- CSET EQ, R0
- MOVB R0, ret+24(FP)
- RET
-#endif
-
-// uint32 xadd(uint32 volatile *ptr, int32 delta)
-// Atomically:
-// *val += delta;
-// return *val;
-TEXT ·Xadd(SB), NOSPLIT, $0-20
- MOVD ptr+0(FP), R0
- MOVW delta+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- LDADDALW R1, (R0), R2
- ADD R1, R2
- MOVW R2, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRW (R0), R2
- ADDW R2, R1, R2
- STLXRW R2, (R0), R3
- CBNZ R3, load_store_loop
- MOVW R2, ret+16(FP)
- RET
-#endif
-
-// uint64 Xadd64(uint64 volatile *ptr, int64 delta)
-// Atomically:
-// *val += delta;
-// return *val;
-TEXT ·Xadd64(SB), NOSPLIT, $0-24
- MOVD ptr+0(FP), R0
- MOVD delta+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- LDADDALD R1, (R0), R2
- ADD R1, R2
- MOVD R2, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXR (R0), R2
- ADD R2, R1, R2
- STLXR R2, (R0), R3
- CBNZ R3, load_store_loop
- MOVD R2, ret+16(FP)
- RET
-#endif
-
-TEXT ·Xchgint32(SB), NOSPLIT, $0-20
- B ·Xchg(SB)
-
-TEXT ·Xchgint64(SB), NOSPLIT, $0-24
- B ·Xchg64(SB)
-
-TEXT ·Xchguintptr(SB), NOSPLIT, $0-24
- B ·Xchg64(SB)
-
-TEXT ·And8(SB), NOSPLIT, $0-9
- MOVD ptr+0(FP), R0
- MOVB val+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- MVN R1, R2
- LDCLRALB R2, (R0), R3
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRB (R0), R2
- AND R1, R2
- STLXRB R2, (R0), R3
- CBNZ R3, load_store_loop
- RET
-#endif
-
-TEXT ·Or8(SB), NOSPLIT, $0-9
- MOVD ptr+0(FP), R0
- MOVB val+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- LDORALB R1, (R0), R2
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRB (R0), R2
- ORR R1, R2
- STLXRB R2, (R0), R3
- CBNZ R3, load_store_loop
- RET
-#endif
-
-// func And(addr *uint32, v uint32)
-TEXT ·And(SB), NOSPLIT, $0-12
- MOVD ptr+0(FP), R0
- MOVW val+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- MVN R1, R2
- LDCLRALW R2, (R0), R3
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRW (R0), R2
- AND R1, R2
- STLXRW R2, (R0), R3
- CBNZ R3, load_store_loop
- RET
-#endif
-
-// func Or(addr *uint32, v uint32)
-TEXT ·Or(SB), NOSPLIT, $0-12
- MOVD ptr+0(FP), R0
- MOVW val+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- LDORALW R1, (R0), R2
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRW (R0), R2
- ORR R1, R2
- STLXRW R2, (R0), R3
- CBNZ R3, load_store_loop
- RET
-#endif
-
-// func Or32(addr *uint32, v uint32) old uint32
-TEXT ·Or32(SB), NOSPLIT, $0-20
- MOVD ptr+0(FP), R0
- MOVW val+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- LDORALW R1, (R0), R2
- MOVD R2, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRW (R0), R2
- ORR R1, R2, R3
- STLXRW R3, (R0), R4
- CBNZ R4, load_store_loop
- MOVD R2, ret+16(FP)
- RET
-#endif
-
-// func And32(addr *uint32, v uint32) old uint32
-TEXT ·And32(SB), NOSPLIT, $0-20
- MOVD ptr+0(FP), R0
- MOVW val+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- MVN R1, R2
- LDCLRALW R2, (R0), R3
- MOVD R3, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXRW (R0), R2
- AND R1, R2, R3
- STLXRW R3, (R0), R4
- CBNZ R4, load_store_loop
- MOVD R2, ret+16(FP)
- RET
-#endif
-
-// func Or64(addr *uint64, v uint64) old uint64
-TEXT ·Or64(SB), NOSPLIT, $0-24
- MOVD ptr+0(FP), R0
- MOVD val+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- LDORALD R1, (R0), R2
- MOVD R2, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXR (R0), R2
- ORR R1, R2, R3
- STLXR R3, (R0), R4
- CBNZ R4, load_store_loop
- MOVD R2, ret+16(FP)
- RET
-#endif
-
-// func And64(addr *uint64, v uint64) old uint64
-TEXT ·And64(SB), NOSPLIT, $0-24
- MOVD ptr+0(FP), R0
- MOVD val+8(FP), R1
-#ifndef GOARM64_LSE
- MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4
- CBZ R4, load_store_loop
-#endif
- MVN R1, R2
- LDCLRALD R2, (R0), R3
- MOVD R3, ret+16(FP)
- RET
-#ifndef GOARM64_LSE
-load_store_loop:
- LDAXR (R0), R2
- AND R1, R2, R3
- STLXR R3, (R0), R4
- CBNZ R4, load_store_loop
- MOVD R2, ret+16(FP)
- RET
-#endif
-
-// func Anduintptr(addr *uintptr, v uintptr) old uintptr
-TEXT ·Anduintptr(SB), NOSPLIT, $0-24
- B ·And64(SB)
-
-// func Oruintptr(addr *uintptr, v uintptr) old uintptr
-TEXT ·Oruintptr(SB), NOSPLIT, $0-24
- B ·Or64(SB)