aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorGuoqi Chen <chenguoqi@loongson.cn>2023-08-16 09:16:21 +0800
committerGopher Robot <gobot@golang.org>2023-11-21 19:22:18 +0000
commite58c9baa9f7b708bcd6a3abf5a8426b0531ed002 (patch)
treeff2da929676682b0acb3198633bb351818a169e3 /src/cmd/internal/obj
parentc83b5fefabe514ce5315135621b962f120277d23 (diff)
downloadgo-e58c9baa9f7b708bcd6a3abf5a8426b0531ed002.tar.xz
cmd/internal/obj: set morestack arg spilling and regabi prologue on loong64
Update #40724 Co-authored-by: Xiaolin Zhao <zhaoxiaolin@loongson.cn> Change-Id: Ie92da57e29bae0e5cccb2a49a7cbeaf02cbf3a8d Reviewed-on: https://go-review.googlesource.com/c/go/+/521787 Reviewed-by: Meidan Li <limeidan@loongson.cn> Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com> Auto-Submit: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/loong64/obj.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/loong64/obj.go b/src/cmd/internal/obj/loong64/obj.go
index bc9cf2ec22..5fa67f3acd 100644
--- a/src/cmd/internal/obj/loong64/obj.go
+++ b/src/cmd/internal/obj/loong64/obj.go
@@ -620,6 +620,10 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
p = c.ctxt.StartUnsafePoint(p, c.newprog)
+ // Spill Arguments. This has to happen before we open
+ // any more frame space.
+ p = c.cursym.Func().SpillRegisterArgs(p, c.newprog)
+
// MOV REGLINK, -8/-16(SP)
p = obj.Appendp(p, c.newprog)
p.As = mov
@@ -684,6 +688,8 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
p.To.Reg = REGSP
p.Spadj = int32(-frameSize)
+ // Unspill arguments
+ p = c.cursym.Func().UnspillRegisterArgs(p, c.newprog)
p = c.ctxt.EndUnsafePoint(p, c.newprog, -1)
}
@@ -795,6 +801,10 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
p = c.ctxt.EmitEntryStackMap(c.cursym, p, c.newprog)
+ // Spill the register args that could be clobbered by the
+ // morestack code
+ p = c.cursym.Func().SpillRegisterArgs(p, c.newprog)
+
// JAL runtime.morestack(SB)
p = obj.Appendp(p, c.newprog)
@@ -809,6 +819,7 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog {
}
p.Mark |= BRANCH
+ p = c.cursym.Func().UnspillRegisterArgs(p, c.newprog)
p = c.ctxt.EndUnsafePoint(p, c.newprog, -1)
// JMP start