cmd/internal/gc, cmd/gc: move Reg from Val to Node
Val is used to hold constant values.
Reg was the odd duck out.
Generated using eg.
No functional changes. Passes toolstash -cmp.
Change-Id: Ic1de769a1f92bb02e09a4428d998b716f307e2f6
Reviewed-on: https://go-review.googlesource.com/8912
Reviewed-by: Russ Cox <rsc@golang.org>
diff --git a/src/cmd/internal/gc/cgen.go b/src/cmd/internal/gc/cgen.go
index 9c73300..2ceddc9 100644
--- a/src/cmd/internal/gc/cgen.go
+++ b/src/cmd/internal/gc/cgen.go
@@ -802,7 +802,7 @@
if n.Addable {
*n1 = *n
if n1.Op == OREGISTER || n1.Op == OINDREG {
- reg[n.Val.U.Reg-int16(Thearch.REGMIN)]++
+ reg[n.Reg-int16(Thearch.REGMIN)]++
}
return
}
@@ -1557,8 +1557,8 @@
case OINDREG:
// Increase the refcount of the register so that igen's caller
// has to call Regfree.
- if n.Val.U.Reg != int16(Thearch.REGSP) {
- reg[n.Val.U.Reg-int16(Thearch.REGMIN)]++
+ if n.Reg != int16(Thearch.REGSP) {
+ reg[n.Reg-int16(Thearch.REGMIN)]++
}
*a = *n
return
@@ -1595,7 +1595,7 @@
fp := Structfirst(&flist, Getoutarg(n.Left.Type))
*a = Node{}
a.Op = OINDREG
- a.Val.U.Reg = int16(Thearch.REGSP)
+ a.Reg = int16(Thearch.REGSP)
a.Addable = true
a.Xoffset = fp.Width
if HasLinkRegister() {
@@ -2149,7 +2149,7 @@
// size of arguments at 0(SP)
stk.Op = OINDREG
- stk.Val.U.Reg = int16(Thearch.REGSP)
+ stk.Reg = int16(Thearch.REGSP)
stk.Xoffset = 0
if HasLinkRegister() {
stk.Xoffset += int64(Ctxt.Arch.Ptrsize)
@@ -2337,7 +2337,7 @@
var nod Node
nod.Op = OINDREG
- nod.Val.U.Reg = int16(Thearch.REGSP)
+ nod.Reg = int16(Thearch.REGSP)
nod.Addable = true
nod.Xoffset = fp.Width
@@ -2367,7 +2367,7 @@
var nod1 Node
nod1.Op = OINDREG
- nod1.Val.U.Reg = int16(Thearch.REGSP)
+ nod1.Reg = int16(Thearch.REGSP)
nod1.Addable = true
nod1.Xoffset = fp.Width
if HasLinkRegister() {
@@ -2560,7 +2560,7 @@
if n.Op != OINDREG {
return
}
- if n.Val.U.Reg == int16(Thearch.REGSP) { // stack offset cannot be large
+ if n.Reg == int16(Thearch.REGSP) { // stack offset cannot be large
return
}
if n.Xoffset != int64(int32(n.Xoffset)) {
diff --git a/src/cmd/internal/gc/fmt.go b/src/cmd/internal/gc/fmt.go
index 6720d5c..d79ceb4 100644
--- a/src/cmd/internal/gc/fmt.go
+++ b/src/cmd/internal/gc/fmt.go
@@ -1100,7 +1100,7 @@
return "... argument"
case OREGISTER:
- return obj.Rconv(int(n.Val.U.Reg))
+ return obj.Rconv(int(n.Reg))
case OLITERAL: // this is a bit of a mess
if fmtmode == FErr {
@@ -1515,7 +1515,7 @@
fmt.Fprintf(&buf, "%v%v", Oconv(int(n.Op), 0), Jconv(n, 0))
case OREGISTER, OINDREG:
- fmt.Fprintf(&buf, "%v-%v%v", Oconv(int(n.Op), 0), obj.Rconv(int(n.Val.U.Reg)), Jconv(n, 0))
+ fmt.Fprintf(&buf, "%v-%v%v", Oconv(int(n.Op), 0), obj.Rconv(int(n.Reg)), Jconv(n, 0))
case OLITERAL:
fmt.Fprintf(&buf, "%v-%v%v", Oconv(int(n.Op), 0), Vconv(&n.Val, 0), Jconv(n, 0))
diff --git a/src/cmd/internal/gc/go.go b/src/cmd/internal/gc/go.go
index 25ada55..b63f4e8 100644
--- a/src/cmd/internal/gc/go.go
+++ b/src/cmd/internal/gc/go.go
@@ -84,7 +84,6 @@
type Val struct {
Ctype int16
U struct {
- Reg int16 // OREGISTER
Bval bool // bool value CTBOOL
Xval *Mpint // int CTINT, rune CTRUNE
Fval *Mpflt // float CTFLT
diff --git a/src/cmd/internal/gc/gsubr.go b/src/cmd/internal/gc/gsubr.go
index 36a4a95..4483d4e 100644
--- a/src/cmd/internal/gc/gsubr.go
+++ b/src/cmd/internal/gc/gsubr.go
@@ -75,7 +75,7 @@
if b.Op != OREGISTER {
return false
}
- if a.Val.U.Reg != b.Val.U.Reg {
+ if a.Reg != b.Reg {
return false
}
return true
@@ -135,7 +135,7 @@
n.Op = OREGISTER
n.Addable = true
ullmancalc(n)
- n.Val.U.Reg = int16(r)
+ n.Reg = int16(r)
n.Type = t
}
@@ -304,7 +304,7 @@
case OREGISTER:
a.Type = obj.TYPE_REG
- a.Reg = n.Val.U.Reg
+ a.Reg = n.Reg
a.Sym = nil
if Thearch.Thechar == '8' { // TODO(rsc): Never clear a->width.
a.Width = 0
@@ -312,7 +312,7 @@
case OINDREG:
a.Type = obj.TYPE_MEM
- a.Reg = n.Val.U.Reg
+ a.Reg = n.Reg
a.Sym = Linksym(n.Sym)
a.Offset = n.Xoffset
if a.Offset != int64(int32(a.Offset)) {
@@ -561,7 +561,7 @@
case 0: // output arg
n.Op = OINDREG
- n.Val.U.Reg = int16(Thearch.REGSP)
+ n.Reg = int16(Thearch.REGSP)
if HasLinkRegister() {
n.Xoffset += int64(Ctxt.Arch.Ptrsize)
}
@@ -673,7 +673,7 @@
case TINT8, TUINT8, TINT16, TUINT16, TINT32, TUINT32, TINT64, TUINT64, TPTR32, TPTR64, TBOOL:
if o != nil && o.Op == OREGISTER {
- i = int(o.Val.U.Reg)
+ i = int(o.Reg)
if Thearch.REGMIN <= i && i <= Thearch.REGMAX {
break Switch
}
@@ -693,7 +693,7 @@
break Switch
}
if o != nil && o.Op == OREGISTER {
- i = int(o.Val.U.Reg)
+ i = int(o.Reg)
if Thearch.FREGMIN <= i && i <= Thearch.FREGMAX {
break Switch
}
@@ -732,7 +732,7 @@
if n.Op != OREGISTER && n.Op != OINDREG {
Fatal("regfree: not a register")
}
- i := int(n.Val.U.Reg)
+ i := int(n.Reg)
if i == Thearch.REGSP {
return
}
@@ -773,7 +773,7 @@
if n.Op != OREGISTER && n.Op != OINDREG {
Fatal("regrealloc: not a register")
}
- i := int(n.Val.U.Reg)
+ i := int(n.Reg)
if i == Thearch.REGSP {
return
}
diff --git a/src/cmd/internal/gc/syntax.go b/src/cmd/internal/gc/syntax.go
index 11cdf29..1012c66 100644
--- a/src/cmd/internal/gc/syntax.go
+++ b/src/cmd/internal/gc/syntax.go
@@ -63,9 +63,12 @@
// func
Func *Func
- // OLITERAL/OREGISTER
+ // OLITERAL
Val Val
+ // OREGISTER, OINDREG
+ Reg int16
+
// ONAME
Ntype *Node
Defn *Node // ONAME: initializing assignment; OLABEL: labeled statement