aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/x86
diff options
context:
space:
mode:
authorBen Shi <powerman1st@163.com>2018-09-20 01:26:17 +0000
committerBen Shi <powerman1st@163.com>2018-09-20 06:33:58 +0000
commit9a033bf9d3f5f7485d82836ec95e51a3fa74a926 (patch)
treed865940fa200666dd42b338569d5d77eff15605d /src/cmd/compile/internal/x86
parent048c766e660e70e6e3779e479a2ab535b3865a21 (diff)
downloadgo-9a033bf9d3f5f7485d82836ec95e51a3fa74a926.tar.gz
go-9a033bf9d3f5f7485d82836ec95e51a3fa74a926.zip
cmd/compile: optimize 386's assembly generator
The ADDconstmodify has similar logic with other constmodify like instructions. This CL optimize them to share code via fallthrough. And the size of pkg/linux_386/cmd/compile/internal/x86.a decreases about 0.3KB. Change-Id: Ibdf06228afde875e8fe8e30851b50ca2be513dd9 Reviewed-on: https://go-review.googlesource.com/136398 Run-TryBot: Ben Shi <powerman1st@163.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/x86')
-rw-r--r--src/cmd/compile/internal/x86/ssa.go26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/cmd/compile/internal/x86/ssa.go b/src/cmd/compile/internal/x86/ssa.go
index a53b63ab92..e0bb4418ec 100644
--- a/src/cmd/compile/internal/x86/ssa.go
+++ b/src/cmd/compile/internal/x86/ssa.go
@@ -547,22 +547,22 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
p.To.Reg = v.Args[0].Reg()
gc.AddAux(&p.To, v)
case ssa.Op386ADDLconstmodify:
- var p *obj.Prog = nil
sc := v.AuxValAndOff()
- off := sc.Off()
val := sc.Val()
- if val == 1 {
- p = s.Prog(x86.AINCL)
- } else if val == -1 {
- p = s.Prog(x86.ADECL)
- } else {
- p = s.Prog(v.Op.Asm())
- p.From.Type = obj.TYPE_CONST
- p.From.Offset = val
+ if val == 1 || val == -1 {
+ var p *obj.Prog
+ if val == 1 {
+ p = s.Prog(x86.AINCL)
+ } else {
+ p = s.Prog(x86.ADECL)
+ }
+ off := sc.Off()
+ p.To.Type = obj.TYPE_MEM
+ p.To.Reg = v.Args[0].Reg()
+ gc.AddAux2(&p.To, v, off)
+ break
}
- p.To.Type = obj.TYPE_MEM
- p.To.Reg = v.Args[0].Reg()
- gc.AddAux2(&p.To, v, off)
+ fallthrough
case ssa.Op386ANDLconstmodify, ssa.Op386ORLconstmodify, ssa.Op386XORLconstmodify:
sc := v.AuxValAndOff()
off := sc.Off()