]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile: unify OpARMMOVWaddr cases
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 15 Jun 2016 22:56:52 +0000 (15:56 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Thu, 16 Jun 2016 14:34:57 +0000 (14:34 +0000)
Minor code cleanup. Done as part of understanding
OpARMMOVWaddr, since other architectures will
need to do something similar.

Change-Id: Iea2ecf3defb4f884e63902c369cd55e4647bce7a
Reviewed-on: https://go-review.googlesource.com/24157
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/compile/internal/arm/ssa.go

index 73899fceed24abf5cbb5f7924be91754d3f17a02..843486bb2376b92caa5798b8ff434d8ce234433b 100644 (file)
@@ -369,19 +369,12 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                p.From.Offset = v.AuxInt
                p.Reg = gc.SSARegNum(v.Args[0])
        case ssa.OpARMMOVWaddr:
-               if v.Aux == nil {
-                       // MOVW $off(SP), R
-                       if reg := gc.SSAReg(v.Args[0]); reg.Name() != "SP" {
-                               v.Fatalf("arg/auto symbol with non-SP base register %s", reg.Name())
-                       }
-                       p := gc.Prog(arm.AMOVW)
-                       p.From.Type = obj.TYPE_ADDR
-                       p.From.Reg = arm.REGSP
-                       p.From.Offset = v.AuxInt
-                       p.To.Type = obj.TYPE_REG
-                       p.To.Reg = gc.SSARegNum(v)
-                       break
-               }
+               p := gc.Prog(arm.AMOVW)
+               p.From.Type = obj.TYPE_ADDR
+               p.To.Type = obj.TYPE_REG
+               p.To.Reg = gc.SSARegNum(v)
+
+               var wantreg string
                // MOVW $sym+off(base), R
                // the assembler expands it as the following:
                // - base is SP: add constant offset to SP (R13)
@@ -391,19 +384,21 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
                default:
                        v.Fatalf("aux is of unknown type %T", v.Aux)
                case *ssa.ExternSymbol:
-                       if reg := gc.SSAReg(v.Args[0]); reg.Name() != "SB" {
-                               v.Fatalf("extern symbol with non-SB base register %s", reg.Name())
-                       }
+                       wantreg = "SB"
+                       gc.AddAux(&p.From, v)
                case *ssa.ArgSymbol, *ssa.AutoSymbol:
-                       if reg := gc.SSAReg(v.Args[0]); reg.Name() != "SP" {
-                               v.Fatalf("arg/auto symbol with non-SP base register %s", reg.Name())
-                       }
+                       wantreg = "SP"
+                       gc.AddAux(&p.From, v)
+               case nil:
+                       // No sym, just MOVW $off(SP), R
+                       wantreg = "SP"
+                       p.From.Reg = arm.REGSP
+                       p.From.Offset = v.AuxInt
                }
-               p := gc.Prog(arm.AMOVW)
-               p.From.Type = obj.TYPE_ADDR
-               gc.AddAux(&p.From, v)
-               p.To.Type = obj.TYPE_REG
-               p.To.Reg = gc.SSARegNum(v)
+               if reg := gc.SSAReg(v.Args[0]); reg.Name() != wantreg {
+                       v.Fatalf("bad reg %s for symbol type %T, want %s", reg.Name(), v.Aux, wantreg)
+               }
+
        case ssa.OpARMMOVBload,
                ssa.OpARMMOVBUload,
                ssa.OpARMMOVHload,