]> Cypherpunks repositories - gostls13.git/commitdiff
misc/cgo/test/issue9400: add arm64 implementation
authorShenghou Ma <minux@golang.org>
Fri, 3 Apr 2015 08:37:24 +0000 (04:37 -0400)
committerMinux Ma <minux@golang.org>
Wed, 8 Apr 2015 09:08:40 +0000 (09:08 +0000)
Change-Id: I309e3df7608b9eef9339196fdc50dedf5f9439f4
Reviewed-on: https://go-review.googlesource.com/8451
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Reviewed-by: Aram Hăvărneanu <aram@mgk.ro>
misc/cgo/test/issue9400/asm_arm64.s [new file with mode: 0644]

diff --git a/misc/cgo/test/issue9400/asm_arm64.s b/misc/cgo/test/issue9400/asm_arm64.s
new file mode 100644 (file)
index 0000000..0c024e8
--- /dev/null
@@ -0,0 +1,33 @@
+#include "textflag.h"
+
+TEXT ·RewindAndSetgid(SB),NOSPLIT,$-8-0
+       // Save link register
+       MOVD    R30, R9
+
+       // Rewind stack pointer so anything that happens on the stack
+       // will clobber the test pattern created by the caller
+       ADD     $(1024 * 8), RSP
+
+       // Ask signaller to setgid
+       MOVD    $·Baton(SB), R0
+       MOVD    $1, R1
+storeloop:
+       LDAXRW  (R0), R2
+       STLXRW  R1, (R0), R3
+       CBNZ    R3, storeloop
+
+       // Wait for setgid completion
+       MOVW    $0, R1
+       MOVW    $0, R2
+loop:
+       LDAXRW  (R0), R3
+       CMPW    R1, R3
+       BNE     loop
+       STLXRW  R2, (R0), R3
+       CBNZ    R3, loop
+
+       // Restore stack
+       SUB     $(1024 * 8), RSP
+
+       MOVD    R9, R30
+       RET