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>
if op == arm.AMOVW && !gc.Nacl && dir > 0 && c >= 4 && c <= 128 {
var r0 gc.Node
r0.Op = gc.OREGISTER
- r0.Val.U.Reg = arm.REG_R0
+ r0.Reg = arm.REG_R0
var r1 gc.Node
r1.Op = gc.OREGISTER
- r1.Val.U.Reg = arm.REG_R0 + 1
+ r1.Reg = arm.REG_R0 + 1
var r2 gc.Node
r2.Op = gc.OREGISTER
- r2.Val.U.Reg = arm.REG_R0 + 2
+ r2.Reg = arm.REG_R0 + 2
var src gc.Node
gc.Regalloc(&src, gc.Types[gc.Tptr], &r1)
p1 := gins(arm.AMULLU, nil, nil)
p1.From.Type = obj.TYPE_REG
- p1.From.Reg = bl.Val.U.Reg
- p1.Reg = cl.Val.U.Reg
+ p1.From.Reg = bl.Reg
+ p1.Reg = cl.Reg
p1.To.Type = obj.TYPE_REGREG
- p1.To.Reg = ah.Val.U.Reg
- p1.To.Offset = int64(al.Val.U.Reg)
+ p1.To.Reg = ah.Reg
+ p1.To.Offset = int64(al.Reg)
//print("%P\n", p1);
p1 = gins(arm.AMULA, nil, nil)
p1.From.Type = obj.TYPE_REG
- p1.From.Reg = bl.Val.U.Reg
- p1.Reg = ch.Val.U.Reg
+ p1.From.Reg = bl.Reg
+ p1.Reg = ch.Reg
p1.To.Type = obj.TYPE_REGREG2
- p1.To.Reg = ah.Val.U.Reg
- p1.To.Offset = int64(ah.Val.U.Reg)
+ p1.To.Reg = ah.Reg
+ p1.To.Offset = int64(ah.Reg)
//print("%P\n", p1);
p1 = gins(arm.AMULA, nil, nil)
p1.From.Type = obj.TYPE_REG
- p1.From.Reg = bh.Val.U.Reg
- p1.Reg = cl.Val.U.Reg
+ p1.From.Reg = bh.Reg
+ p1.Reg = cl.Reg
p1.To.Type = obj.TYPE_REGREG2
- p1.To.Reg = ah.Val.U.Reg
- p1.To.Offset = int64(ah.Val.U.Reg)
+ p1.To.Reg = ah.Reg
+ p1.To.Offset = int64(ah.Reg)
//print("%P\n", p1);
}
// n2 * n1 -> (n1 n2)
- p.Reg = n1.Val.U.Reg
+ p.Reg = n1.Reg
p.To.Type = obj.TYPE_REGREG
- p.To.Reg = n1.Val.U.Reg
- p.To.Offset = int64(n2.Val.U.Reg)
+ p.To.Reg = n1.Reg
+ p.To.Offset = int64(n2.Reg)
default:
gc.Fatal("cgen_hmul %v", gc.Tconv(t, 0))
var r0 gc.Node
r0.Op = gc.OREGISTER
- r0.Val.U.Reg = arm.REG_R0
+ r0.Reg = arm.REG_R0
var r1 gc.Node
r1.Op = gc.OREGISTER
- r1.Val.U.Reg = arm.REG_R1
+ r1.Reg = arm.REG_R1
var dst gc.Node
gc.Regalloc(&dst, gc.Types[gc.Tptr], &r1)
gc.Agen(nl, &dst)
gmove(f, &r1)
p1 := gins(arm.AMOVW, &r1, &r2)
p1.From.Type = obj.TYPE_SHIFT
- p1.From.Offset = 2<<5 | 31<<7 | int64(r1.Val.U.Reg)&15 // r1->31
+ p1.From.Offset = 2<<5 | 31<<7 | int64(r1.Reg)&15 // r1->31
p1.From.Reg = 0
//print("gmove: %P\n", p1);
switch f.Op {
case gc.OREGISTER:
- if f.Val.U.Reg != t.Val.U.Reg {
+ if f.Reg != t.Reg {
break
}
return true
p := gins(as, nil, rhs)
p.From.Type = obj.TYPE_SHIFT
- p.From.Offset = int64(stype) | int64(sval)<<7 | int64(lhs.Val.U.Reg)&15
+ p.From.Offset = int64(stype) | int64(sval)<<7 | int64(lhs.Reg)&15
return p
}
func gregshift(as int, lhs *gc.Node, stype int32, reg *gc.Node, rhs *gc.Node) *obj.Prog {
p := gins(as, nil, rhs)
p.From.Type = obj.TYPE_SHIFT
- p.From.Offset = int64(stype) | (int64(reg.Val.U.Reg)&15)<<8 | 1<<4 | int64(lhs.Val.U.Reg)&15
+ p.From.Offset = int64(stype) | (int64(reg.Reg)&15)<<8 | 1<<4 | int64(lhs.Reg)&15
return p
}
gc.Agenr(n, &nodr, &nodsi)
}
- if nodl.Val.U.Reg != x86.REG_DI {
+ if nodl.Reg != x86.REG_DI {
gmove(&nodl, &noddi)
}
- if nodr.Val.U.Reg != x86.REG_SI {
+ if nodr.Reg != x86.REG_SI {
gmove(&nodr, &nodsi)
}
gc.Regfree(&nodl)
func restx(x *gc.Node, oldx *gc.Node) {
if oldx.Op != 0 {
x.Type = gc.Types[gc.TINT64]
- reg[x.Val.U.Reg] = uint8(oldx.Ostk)
+ reg[x.Reg] = uint8(oldx.Ostk)
gmove(oldx, x)
gc.Regfree(oldx)
}
t = gc.Types[gc.TINT64]
}
var n1 gc.Node
- gc.Nodreg(&n1, t, int(n1b.Val.U.Reg))
+ gc.Nodreg(&n1, t, int(n1b.Reg))
var n2 gc.Node
- gc.Nodreg(&n2, t, int(n2b.Val.U.Reg))
+ gc.Nodreg(&n2, t, int(n2b.Reg))
a := optoas(op, t)
gins(a, &n2, &n1)
switch f.Op {
case gc.OREGISTER:
- if f.Val.U.Reg != t.Val.U.Reg {
+ if f.Reg != t.Reg {
break
}
return true
// TODO(minux): add gins3?
p1.Reg = p1.To.Reg
- p1.To.Reg = tm.Val.U.Reg
+ p1.To.Reg = tm.Reg
gins(optoas(gc.OMUL, t), &tr, &tm)
gc.Regfree(&tr)
gins(optoas(gc.OSUB, t), &tm, &tl)
goto hard
}
if f.Op == gc.OREGISTER && t.Op == gc.OREGISTER {
- if f.Val.U.Reg != x86.REG_F0 || t.Val.U.Reg != x86.REG_F0 {
+ if f.Reg != x86.REG_F0 || t.Reg != x86.REG_F0 {
goto fatal
}
return
a = x86.AFMOVD
}
if gc.Ismem(t) {
- if f.Op != gc.OREGISTER || f.Val.U.Reg != x86.REG_F0 {
+ if f.Op != gc.OREGISTER || f.Reg != x86.REG_F0 {
gc.Fatal("gmove %v", gc.Nconv(f, 0))
}
a = x86.AFMOVFP
goto hard
}
if f.Op == gc.OREGISTER && t.Op == gc.OREGISTER {
- if f.Val.U.Reg != x86.REG_F0 || t.Val.U.Reg != x86.REG_F0 {
+ if f.Reg != x86.REG_F0 || t.Reg != x86.REG_F0 {
goto fatal
}
return
switch f.Op {
case gc.OREGISTER:
- if f.Val.U.Reg != t.Val.U.Reg {
+ if f.Reg != t.Reg {
break
}
return true
if as == x86.ACVTSD2SS && f != nil && f.Op == gc.OLITERAL {
gc.Fatal("gins CVTSD2SS const")
}
- if as == x86.AMOVSD && t != nil && t.Op == gc.OREGISTER && t.Val.U.Reg == x86.REG_F0 {
+ if as == x86.AMOVSD && t != nil && t.Op == gc.OREGISTER && t.Reg == x86.REG_F0 {
gc.Fatal("gins MOVSD into F0")
}
// TODO(minux): add gins3?
p1.Reg = p1.To.Reg
- p1.To.Reg = tm.Val.U.Reg
+ p1.To.Reg = tm.Reg
gins(optoas(gc.OMUL, t), &tr, &tm)
gc.Regfree(&tr)
gins(optoas(gc.OSUB, t), &tm, &tl)
if n.Op != gc.OINDREG {
return
}
- if n.Val.U.Reg == ppc64.REGSP { // stack offset cannot be large
+ if n.Reg == ppc64.REGSP { // stack offset cannot be large
return
}
if n.Xoffset != int64(int32(n.Xoffset)) {
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
}
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
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() {
// 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)
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
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() {
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)) {
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 {
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))
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
if b.Op != OREGISTER {
return false
}
- if a.Val.U.Reg != b.Val.U.Reg {
+ if a.Reg != b.Reg {
return false
}
return true
n.Op = OREGISTER
n.Addable = true
ullmancalc(n)
- n.Val.U.Reg = int16(r)
+ n.Reg = int16(r)
n.Type = t
}
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
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)) {
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)
}
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
}
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
}
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
}
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
}
// func
Func *Func
- // OLITERAL/OREGISTER
+ // OLITERAL
Val Val
+ // OREGISTER, OINDREG
+ Reg int16
+
// ONAME
Ntype *Node
Defn *Node // ONAME: initializing assignment; OLABEL: labeled statement