From 31be6285a879af94c7283e6599e3f9b64266bc1a Mon Sep 17 00:00:00 2001 From: eric fang Date: Tue, 18 Jan 2022 08:49:56 +0000 Subject: [PATCH] cmd/internal/obj/arm64: optimize stacksplit prologue for small stack When framesize <= objabi.StackSmall, 128B, the stacksplit prologue is: MOVD 16(g), R16 MOVD SP, R17 CMP R16, R17 BLS morestack_label The second instruction is not necessary, we can compare R16 with SP directly, so the sequence becomes: MOVD 16(g), R16 CMP R16, SP BLS morestack_label This CL removes this instruction. Change-Id: I0567ac52e9be124880957271951e1186da203612 Reviewed-on: https://go-review.googlesource.com/c/go/+/379076 Trust: Eric Fang Run-TryBot: Eric Fang TryBot-Result: Gopher Robot Reviewed-by: Eric Fang Reviewed-by: Cherry Mui --- src/cmd/internal/obj/arm64/obj7.go | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/cmd/internal/obj/arm64/obj7.go b/src/cmd/internal/obj/arm64/obj7.go index e9eb786cb2..2bbc7e37b0 100644 --- a/src/cmd/internal/obj/arm64/obj7.go +++ b/src/cmd/internal/obj/arm64/obj7.go @@ -165,21 +165,13 @@ func (c *ctxt7) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { q := (*obj.Prog)(nil) if framesize <= objabi.StackSmall { // small stack: SP < stackguard - // MOV SP, RT2 - // CMP stackguard, RT2 - p = obj.Appendp(p, c.newprog) - - p.As = AMOVD - p.From.Type = obj.TYPE_REG - p.From.Reg = REGSP - p.To.Type = obj.TYPE_REG - p.To.Reg = REGRT2 + // CMP stackguard, SP p = obj.Appendp(p, c.newprog) p.As = ACMP p.From.Type = obj.TYPE_REG p.From.Reg = REGRT1 - p.Reg = REGRT2 + p.Reg = REGSP } else if framesize <= objabi.StackBig { // large stack: SP-framesize < stackguard-StackSmall // SUB $(framesize-StackSmall), SP, RT2 -- 2.50.0