]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: combine similar code in 386's assembly generator
authorBen Shi <powerman1st@163.com>
Fri, 5 Oct 2018 12:09:43 +0000 (12:09 +0000)
committerBen Shi <powerman1st@163.com>
Sat, 6 Oct 2018 00:02:16 +0000 (00:02 +0000)
The indexed MOVload and MOVstore have similar logic, and this CL
combine them together. The total size of pkg/linux_386/cmd/compile/
decreases about 4KB.

Change-Id: I06236a3542aaa3dfc113c49fe4c69d209e018dfe
Reviewed-on: https://go-review.googlesource.com/c/139958
Run-TryBot: Ben Shi <powerman1st@163.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/x86/ssa.go

index e0bb4418ecac47f858bfe61143060d9732b82430..8f8ee75eecf07e30ed115d5a060752b44072da33 100644 (file)
@@ -484,43 +484,26 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                gc.AddAux(&p.From, v)
                p.To.Type = obj.TYPE_REG
                p.To.Reg = v.Reg()
-       case ssa.Op386MOVSDloadidx8:
-               p := s.Prog(v.Op.Asm())
-               p.From.Type = obj.TYPE_MEM
-               p.From.Reg = v.Args[0].Reg()
-               gc.AddAux(&p.From, v)
-               p.From.Scale = 8
-               p.From.Index = v.Args[1].Reg()
-               p.To.Type = obj.TYPE_REG
-               p.To.Reg = v.Reg()
-       case ssa.Op386MOVLloadidx4, ssa.Op386MOVSSloadidx4:
-               p := s.Prog(v.Op.Asm())
-               p.From.Type = obj.TYPE_MEM
-               p.From.Reg = v.Args[0].Reg()
-               gc.AddAux(&p.From, v)
-               p.From.Scale = 4
-               p.From.Index = v.Args[1].Reg()
-               p.To.Type = obj.TYPE_REG
-               p.To.Reg = v.Reg()
-       case ssa.Op386MOVWloadidx2:
-               p := s.Prog(v.Op.Asm())
-               p.From.Type = obj.TYPE_MEM
-               p.From.Reg = v.Args[0].Reg()
-               gc.AddAux(&p.From, v)
-               p.From.Scale = 2
-               p.From.Index = v.Args[1].Reg()
-               p.To.Type = obj.TYPE_REG
-               p.To.Reg = v.Reg()
-       case ssa.Op386MOVBloadidx1, ssa.Op386MOVWloadidx1, ssa.Op386MOVLloadidx1, ssa.Op386MOVSSloadidx1, ssa.Op386MOVSDloadidx1:
+       case ssa.Op386MOVBloadidx1, ssa.Op386MOVWloadidx1, ssa.Op386MOVLloadidx1, ssa.Op386MOVSSloadidx1, ssa.Op386MOVSDloadidx1,
+               ssa.Op386MOVSDloadidx8, ssa.Op386MOVLloadidx4, ssa.Op386MOVSSloadidx4, ssa.Op386MOVWloadidx2:
                r := v.Args[0].Reg()
                i := v.Args[1].Reg()
-               if i == x86.REG_SP {
-                       r, i = i, r
-               }
                p := s.Prog(v.Op.Asm())
                p.From.Type = obj.TYPE_MEM
+               switch v.Op {
+               case ssa.Op386MOVBloadidx1, ssa.Op386MOVWloadidx1, ssa.Op386MOVLloadidx1, ssa.Op386MOVSSloadidx1, ssa.Op386MOVSDloadidx1:
+                       if i == x86.REG_SP {
+                               r, i = i, r
+                       }
+                       p.From.Scale = 1
+               case ssa.Op386MOVSDloadidx8:
+                       p.From.Scale = 8
+               case ssa.Op386MOVLloadidx4, ssa.Op386MOVSSloadidx4:
+                       p.From.Scale = 4
+               case ssa.Op386MOVWloadidx2:
+                       p.From.Scale = 2
+               }
                p.From.Reg = r
-               p.From.Scale = 1
                p.From.Index = i
                gc.AddAux(&p.From, v)
                p.To.Type = obj.TYPE_REG
@@ -573,45 +556,28 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.To.Type = obj.TYPE_MEM
                p.To.Reg = v.Args[0].Reg()
                gc.AddAux2(&p.To, v, off)
-       case ssa.Op386MOVSDstoreidx8:
-               p := s.Prog(v.Op.Asm())
-               p.From.Type = obj.TYPE_REG
-               p.From.Reg = v.Args[2].Reg()
-               p.To.Type = obj.TYPE_MEM
-               p.To.Reg = v.Args[0].Reg()
-               p.To.Scale = 8
-               p.To.Index = v.Args[1].Reg()
-               gc.AddAux(&p.To, v)
-       case ssa.Op386MOVSSstoreidx4, ssa.Op386MOVLstoreidx4:
-               p := s.Prog(v.Op.Asm())
-               p.From.Type = obj.TYPE_REG
-               p.From.Reg = v.Args[2].Reg()
-               p.To.Type = obj.TYPE_MEM
-               p.To.Reg = v.Args[0].Reg()
-               p.To.Scale = 4
-               p.To.Index = v.Args[1].Reg()
-               gc.AddAux(&p.To, v)
-       case ssa.Op386MOVWstoreidx2:
-               p := s.Prog(v.Op.Asm())
-               p.From.Type = obj.TYPE_REG
-               p.From.Reg = v.Args[2].Reg()
-               p.To.Type = obj.TYPE_MEM
-               p.To.Reg = v.Args[0].Reg()
-               p.To.Scale = 2
-               p.To.Index = v.Args[1].Reg()
-               gc.AddAux(&p.To, v)
-       case ssa.Op386MOVBstoreidx1, ssa.Op386MOVWstoreidx1, ssa.Op386MOVLstoreidx1, ssa.Op386MOVSSstoreidx1, ssa.Op386MOVSDstoreidx1:
+       case ssa.Op386MOVBstoreidx1, ssa.Op386MOVWstoreidx1, ssa.Op386MOVLstoreidx1, ssa.Op386MOVSSstoreidx1, ssa.Op386MOVSDstoreidx1,
+               ssa.Op386MOVSDstoreidx8, ssa.Op386MOVSSstoreidx4, ssa.Op386MOVLstoreidx4, ssa.Op386MOVWstoreidx2:
                r := v.Args[0].Reg()
                i := v.Args[1].Reg()
-               if i == x86.REG_SP {
-                       r, i = i, r
-               }
                p := s.Prog(v.Op.Asm())
                p.From.Type = obj.TYPE_REG
                p.From.Reg = v.Args[2].Reg()
                p.To.Type = obj.TYPE_MEM
+               switch v.Op {
+               case ssa.Op386MOVBstoreidx1, ssa.Op386MOVWstoreidx1, ssa.Op386MOVLstoreidx1, ssa.Op386MOVSSstoreidx1, ssa.Op386MOVSDstoreidx1:
+                       if i == x86.REG_SP {
+                               r, i = i, r
+                       }
+                       p.To.Scale = 1
+               case ssa.Op386MOVSDstoreidx8:
+                       p.To.Scale = 8
+               case ssa.Op386MOVSSstoreidx4, ssa.Op386MOVLstoreidx4:
+                       p.To.Scale = 4
+               case ssa.Op386MOVWstoreidx2:
+                       p.To.Scale = 2
+               }
                p.To.Reg = r
-               p.To.Scale = 1
                p.To.Index = i
                gc.AddAux(&p.To, v)
        case ssa.Op386MOVLstoreconst, ssa.Op386MOVWstoreconst, ssa.Op386MOVBstoreconst: