aboutsummaryrefslogtreecommitdiff
path: root/test/codegen
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2024-10-21 15:36:38 -0700
committerKeith Randall <khr@google.com>2024-10-22 16:23:12 +0000
commit74163c895a7c5d7ebafeaed1f4a0891d218e2704 (patch)
treee795bf155e9ce0aee3987f79f98743e56614318b /test/codegen
parent4e7025860129b33f704634583d20539af19c344b (diff)
downloadgo-74163c895a7c5d7ebafeaed1f4a0891d218e2704.tar.xz
cmd/compile: use STP/LDP around morestack on arm64
The spill/restore code around morestack is almost never exectued, so we should make it as small as possible. Using 2-register loads/stores makes sense here. Also, the offsets from SP are pretty small so the offset almost always fits in the (smaller than a normal load/store) offset field of the instruction. Makes cmd/go 0.6% smaller. Change-Id: I8845283c1b269a259498153924428f6173bda293 Reviewed-on: https://go-review.googlesource.com/c/go/+/621556 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'test/codegen')
-rw-r--r--test/codegen/spills.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/codegen/spills.go b/test/codegen/spills.go
new file mode 100644
index 0000000000..c8ac9859a4
--- /dev/null
+++ b/test/codegen/spills.go
@@ -0,0 +1,31 @@
+// asmcheck
+
+// Copyright 2024 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.
+
+package codegen
+
+func i64(a, b int64) int64 { // arm64:`STP\s`,`LDP\s`
+ g()
+ return a + b
+}
+
+func i32(a, b int32) int32 { // arm64:`STPW`,`LDPW`
+ g()
+ return a + b
+}
+
+func f64(a, b float64) float64 { // arm64:`FSTPD`,`FLDPD`
+ g()
+ return a + b
+}
+
+func f32(a, b float32) float32 { // arm64:`FSTPS`,`FLDPS`
+ g()
+ return a + b
+}
+
+//go:noinline
+func g() {
+}