cmd/internal/obj/x86: use mov instead of lea to load the frame pointer
This CL instructs the Go x86 compiler to load the frame pointer address
using a MOV instead of a LEA instruction, being MOV 1 byte shorter:
Before
55 PUSHQ BP
48 8d 2c 24 LEAQ 0(SP), BP
After
55 PUSHQ BP
48 89 e5 MOVQ SP, BP
This reduces the size of the Go toolchain ~0.06%.
Updates #6853
Change-Id: I5557cf34c47e871d264ba0deda9b78338681a12c
Reviewed-on: https://go-review.googlesource.com/c/go/+/463845
Auto-Submit: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Quim Muntal <quimmuntal@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/src/cmd/internal/obj/x86/obj6.go b/src/cmd/internal/obj/x86/obj6.go
index 33c02d5..79c584f 100644
--- a/src/cmd/internal/obj/x86/obj6.go
+++ b/src/cmd/internal/obj/x86/obj6.go
@@ -695,11 +695,9 @@
// Move current frame to BP
p = obj.Appendp(p, newprog)
- p.As = ALEAQ
- p.From.Type = obj.TYPE_MEM
+ p.As = AMOVQ
+ p.From.Type = obj.TYPE_REG
p.From.Reg = REG_SP
- p.From.Scale = 1
- p.From.Offset = 0
p.To.Type = obj.TYPE_REG
p.To.Reg = REG_BP
}