diff options
| author | Keith Randall <khr@golang.org> | 2020-07-17 12:12:59 -0700 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2020-08-27 22:35:45 +0000 |
| commit | 8247da36621986a282c96b2abc236bbda2fdef41 (patch) | |
| tree | 2d475415cda6cd9f8532bb6ad45664ac677a5099 /src/cmd/internal/obj/ppc64 | |
| parent | 5c2c6d3fbf4f0a1299b5e41463847d242eae19ca (diff) | |
| download | go-8247da36621986a282c96b2abc236bbda2fdef41.tar.xz | |
cmd/compile,cmd/asm: simplify recording of branch targets
We currently use two fields to store the targets of branches.
Some phases use p.To.Val, some use p.Pcond. Rewrite so that
every branch instruction uses p.To.Val.
p.From.Val is also used in rare instances.
Introduce a Pool link for use by arm/arm64, instead of
repurposing Pcond.
This is a cleanup CL in preparation for some stack frame CLs.
Change-Id: I9055bf0a1d986aff421e47951a1dedc301c846f8
Reviewed-on: https://go-review.googlesource.com/c/go/+/243318
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/cmd/internal/obj/ppc64')
| -rw-r--r-- | src/cmd/internal/obj/ppc64/asm9.go | 18 | ||||
| -rw-r--r-- | src/cmd/internal/obj/ppc64/obj9.go | 12 |
2 files changed, 15 insertions, 15 deletions
diff --git a/src/cmd/internal/obj/ppc64/asm9.go b/src/cmd/internal/obj/ppc64/asm9.go index 3c82477fc4..98b453de6c 100644 --- a/src/cmd/internal/obj/ppc64/asm9.go +++ b/src/cmd/internal/obj/ppc64/asm9.go @@ -725,22 +725,22 @@ func span9(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { o = c.oplook(p) // very large conditional branches - if (o.type_ == 16 || o.type_ == 17) && p.Pcond != nil { - otxt = p.Pcond.Pc - pc + if (o.type_ == 16 || o.type_ == 17) && p.To.Target() != nil { + otxt = p.To.Target().Pc - pc if otxt < -(1<<15)+10 || otxt >= (1<<15)-10 { q = c.newprog() q.Link = p.Link p.Link = q q.As = ABR q.To.Type = obj.TYPE_BRANCH - q.Pcond = p.Pcond - p.Pcond = q + q.To.SetTarget(p.To.Target()) + p.To.SetTarget(q) q = c.newprog() q.Link = p.Link p.Link = q q.As = ABR q.To.Type = obj.TYPE_BRANCH - q.Pcond = q.Link.Link + q.To.SetTarget(q.Link.Link) //addnop(p->link); //addnop(p); @@ -2630,8 +2630,8 @@ func (c *ctxt9) asmout(p *obj.Prog, o *Optab, out []uint32) { case 11: /* br/bl lbra */ v := int32(0) - if p.Pcond != nil { - v = int32(p.Pcond.Pc - p.Pc) + if p.To.Target() != nil { + v = int32(p.To.Target().Pc - p.Pc) if v&03 != 0 { c.ctxt.Diag("odd branch target address\n%v", p) v &^= 03 @@ -2781,8 +2781,8 @@ func (c *ctxt9) asmout(p *obj.Prog, o *Optab, out []uint32) { } } v := int32(0) - if p.Pcond != nil { - v = int32(p.Pcond.Pc - p.Pc) + if p.To.Target() != nil { + v = int32(p.To.Target().Pc - p.Pc) } if v&03 != 0 { c.ctxt.Diag("odd branch target address\n%v", p) diff --git a/src/cmd/internal/obj/ppc64/obj9.go b/src/cmd/internal/obj/ppc64/obj9.go index 749f7066de..c012762a18 100644 --- a/src/cmd/internal/obj/ppc64/obj9.go +++ b/src/cmd/internal/obj/ppc64/obj9.go @@ -556,7 +556,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { ABVS: p.Mark |= BRANCH q = p - q1 = p.Pcond + q1 = p.To.Target() if q1 != nil { // NOPs are not removed due to #40689. @@ -841,8 +841,8 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { q = obj.Appendp(q, c.newprog) q.As = obj.ANOP - p1.Pcond = q - p2.Pcond = q + p1.To.SetTarget(q) + p2.To.SetTarget(q) } case obj.ARET: @@ -1153,7 +1153,7 @@ func (c *ctxt9) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { p.To.Type = obj.TYPE_REG p.To.Reg = REG_R5 if q != nil { - q.Pcond = p + q.To.SetTarget(p) } p = c.ctxt.EmitEntryStackMap(c.cursym, p, c.newprog) @@ -1248,13 +1248,13 @@ func (c *ctxt9) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { p = obj.Appendp(p, c.newprog) p.As = ABR p.To.Type = obj.TYPE_BRANCH - p.Pcond = p0.Link + p.To.SetTarget(p0.Link) // placeholder for q1's jump target p = obj.Appendp(p, c.newprog) p.As = obj.ANOP // zero-width place holder - q1.Pcond = p + q1.To.SetTarget(p) return p } |
