Skip to content

Commit 2294e3e

Browse files
committed
cmd/compile: combine similar code in amd64's assembly generator
This CL combines similar code in amd64's assembly generator. The total size of pkg/linux_amd64/cmd/compile/ decreases about 4.5KB, while the generated amd64 code is not affected. Change-Id: I4cdbdd22bde8857aafdc29b47fa100a906fa1598 Reviewed-on: https://go-review.googlesource.com/c/140298 Run-TryBot: Ben Shi <[email protected]> Reviewed-by: Keith Randall <[email protected]>
1 parent dc49268 commit 2294e3e

File tree

1 file changed

+30
-64
lines changed
  • src/cmd/compile/internal/amd64

1 file changed

+30
-64
lines changed

src/cmd/compile/internal/amd64/ssa.go

Lines changed: 30 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -653,43 +653,26 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
653653
gc.AddAux(&p.From, v)
654654
p.To.Type = obj.TYPE_REG
655655
p.To.Reg = v.Reg()
656-
case ssa.OpAMD64MOVQloadidx8, ssa.OpAMD64MOVSDloadidx8, ssa.OpAMD64MOVLloadidx8:
657-
p := s.Prog(v.Op.Asm())
658-
p.From.Type = obj.TYPE_MEM
659-
p.From.Reg = v.Args[0].Reg()
660-
gc.AddAux(&p.From, v)
661-
p.From.Scale = 8
662-
p.From.Index = v.Args[1].Reg()
663-
p.To.Type = obj.TYPE_REG
664-
p.To.Reg = v.Reg()
665-
case ssa.OpAMD64MOVLloadidx4, ssa.OpAMD64MOVSSloadidx4:
666-
p := s.Prog(v.Op.Asm())
667-
p.From.Type = obj.TYPE_MEM
668-
p.From.Reg = v.Args[0].Reg()
669-
gc.AddAux(&p.From, v)
670-
p.From.Scale = 4
671-
p.From.Index = v.Args[1].Reg()
672-
p.To.Type = obj.TYPE_REG
673-
p.To.Reg = v.Reg()
674-
case ssa.OpAMD64MOVWloadidx2:
675-
p := s.Prog(v.Op.Asm())
676-
p.From.Type = obj.TYPE_MEM
677-
p.From.Reg = v.Args[0].Reg()
678-
gc.AddAux(&p.From, v)
679-
p.From.Scale = 2
680-
p.From.Index = v.Args[1].Reg()
681-
p.To.Type = obj.TYPE_REG
682-
p.To.Reg = v.Reg()
683-
case ssa.OpAMD64MOVBloadidx1, ssa.OpAMD64MOVWloadidx1, ssa.OpAMD64MOVLloadidx1, ssa.OpAMD64MOVQloadidx1, ssa.OpAMD64MOVSSloadidx1, ssa.OpAMD64MOVSDloadidx1:
656+
case ssa.OpAMD64MOVBloadidx1, ssa.OpAMD64MOVWloadidx1, ssa.OpAMD64MOVLloadidx1, ssa.OpAMD64MOVQloadidx1, ssa.OpAMD64MOVSSloadidx1, ssa.OpAMD64MOVSDloadidx1,
657+
ssa.OpAMD64MOVQloadidx8, ssa.OpAMD64MOVSDloadidx8, ssa.OpAMD64MOVLloadidx8, ssa.OpAMD64MOVLloadidx4, ssa.OpAMD64MOVSSloadidx4, ssa.OpAMD64MOVWloadidx2:
684658
r := v.Args[0].Reg()
685659
i := v.Args[1].Reg()
686-
if i == x86.REG_SP {
687-
r, i = i, r
688-
}
689660
p := s.Prog(v.Op.Asm())
690661
p.From.Type = obj.TYPE_MEM
662+
switch v.Op {
663+
case ssa.OpAMD64MOVBloadidx1, ssa.OpAMD64MOVWloadidx1, ssa.OpAMD64MOVLloadidx1, ssa.OpAMD64MOVQloadidx1, ssa.OpAMD64MOVSSloadidx1, ssa.OpAMD64MOVSDloadidx1:
664+
if i == x86.REG_SP {
665+
r, i = i, r
666+
}
667+
p.From.Scale = 1
668+
case ssa.OpAMD64MOVQloadidx8, ssa.OpAMD64MOVSDloadidx8, ssa.OpAMD64MOVLloadidx8:
669+
p.From.Scale = 8
670+
case ssa.OpAMD64MOVLloadidx4, ssa.OpAMD64MOVSSloadidx4:
671+
p.From.Scale = 4
672+
case ssa.OpAMD64MOVWloadidx2:
673+
p.From.Scale = 2
674+
}
691675
p.From.Reg = r
692-
p.From.Scale = 1
693676
p.From.Index = i
694677
gc.AddAux(&p.From, v)
695678
p.To.Type = obj.TYPE_REG
@@ -704,45 +687,28 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
704687
p.To.Type = obj.TYPE_MEM
705688
p.To.Reg = v.Args[0].Reg()
706689
gc.AddAux(&p.To, v)
707-
case ssa.OpAMD64MOVQstoreidx8, ssa.OpAMD64MOVSDstoreidx8, ssa.OpAMD64MOVLstoreidx8:
708-
p := s.Prog(v.Op.Asm())
709-
p.From.Type = obj.TYPE_REG
710-
p.From.Reg = v.Args[2].Reg()
711-
p.To.Type = obj.TYPE_MEM
712-
p.To.Reg = v.Args[0].Reg()
713-
p.To.Scale = 8
714-
p.To.Index = v.Args[1].Reg()
715-
gc.AddAux(&p.To, v)
716-
case ssa.OpAMD64MOVSSstoreidx4, ssa.OpAMD64MOVLstoreidx4:
717-
p := s.Prog(v.Op.Asm())
718-
p.From.Type = obj.TYPE_REG
719-
p.From.Reg = v.Args[2].Reg()
720-
p.To.Type = obj.TYPE_MEM
721-
p.To.Reg = v.Args[0].Reg()
722-
p.To.Scale = 4
723-
p.To.Index = v.Args[1].Reg()
724-
gc.AddAux(&p.To, v)
725-
case ssa.OpAMD64MOVWstoreidx2:
726-
p := s.Prog(v.Op.Asm())
727-
p.From.Type = obj.TYPE_REG
728-
p.From.Reg = v.Args[2].Reg()
729-
p.To.Type = obj.TYPE_MEM
730-
p.To.Reg = v.Args[0].Reg()
731-
p.To.Scale = 2
732-
p.To.Index = v.Args[1].Reg()
733-
gc.AddAux(&p.To, v)
734-
case ssa.OpAMD64MOVBstoreidx1, ssa.OpAMD64MOVWstoreidx1, ssa.OpAMD64MOVLstoreidx1, ssa.OpAMD64MOVQstoreidx1, ssa.OpAMD64MOVSSstoreidx1, ssa.OpAMD64MOVSDstoreidx1:
690+
case ssa.OpAMD64MOVBstoreidx1, ssa.OpAMD64MOVWstoreidx1, ssa.OpAMD64MOVLstoreidx1, ssa.OpAMD64MOVQstoreidx1, ssa.OpAMD64MOVSSstoreidx1, ssa.OpAMD64MOVSDstoreidx1,
691+
ssa.OpAMD64MOVQstoreidx8, ssa.OpAMD64MOVSDstoreidx8, ssa.OpAMD64MOVLstoreidx8, ssa.OpAMD64MOVSSstoreidx4, ssa.OpAMD64MOVLstoreidx4, ssa.OpAMD64MOVWstoreidx2:
735692
r := v.Args[0].Reg()
736693
i := v.Args[1].Reg()
737-
if i == x86.REG_SP {
738-
r, i = i, r
739-
}
740694
p := s.Prog(v.Op.Asm())
741695
p.From.Type = obj.TYPE_REG
742696
p.From.Reg = v.Args[2].Reg()
743697
p.To.Type = obj.TYPE_MEM
698+
switch v.Op {
699+
case ssa.OpAMD64MOVBstoreidx1, ssa.OpAMD64MOVWstoreidx1, ssa.OpAMD64MOVLstoreidx1, ssa.OpAMD64MOVQstoreidx1, ssa.OpAMD64MOVSSstoreidx1, ssa.OpAMD64MOVSDstoreidx1:
700+
if i == x86.REG_SP {
701+
r, i = i, r
702+
}
703+
p.To.Scale = 1
704+
case ssa.OpAMD64MOVQstoreidx8, ssa.OpAMD64MOVSDstoreidx8, ssa.OpAMD64MOVLstoreidx8:
705+
p.To.Scale = 8
706+
case ssa.OpAMD64MOVSSstoreidx4, ssa.OpAMD64MOVLstoreidx4:
707+
p.To.Scale = 4
708+
case ssa.OpAMD64MOVWstoreidx2:
709+
p.To.Scale = 2
710+
}
744711
p.To.Reg = r
745-
p.To.Scale = 1
746712
p.To.Index = i
747713
gc.AddAux(&p.To, v)
748714
case ssa.OpAMD64ADDQconstmodify, ssa.OpAMD64ADDLconstmodify:

0 commit comments

Comments
 (0)