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/arm | |
| 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/arm')
| -rw-r--r-- | src/cmd/internal/obj/arm/asm5.go | 16 | ||||
| -rw-r--r-- | src/cmd/internal/obj/arm/obj5.go | 10 |
2 files changed, 13 insertions, 13 deletions
diff --git a/src/cmd/internal/obj/arm/asm5.go b/src/cmd/internal/obj/arm/asm5.go index 7b7e42ee2e..269a4223d5 100644 --- a/src/cmd/internal/obj/arm/asm5.go +++ b/src/cmd/internal/obj/arm/asm5.go @@ -644,7 +644,7 @@ func (c *ctxt5) flushpool(p *obj.Prog, skip int, force int) bool { q := c.newprog() q.As = AB q.To.Type = obj.TYPE_BRANCH - q.Pcond = p.Link + q.To.SetTarget(p.Link) q.Link = c.blitrl q.Pos = p.Pos c.blitrl = q @@ -705,7 +705,7 @@ func (c *ctxt5) addpool(p *obj.Prog, a *obj.Addr) { if t.Rel == nil { for q := c.blitrl; q != nil; q = q.Link { /* could hash on t.t0.offset */ if q.Rel == nil && q.To == t.To { - p.Pcond = q + p.Pool = q return } } @@ -724,8 +724,8 @@ func (c *ctxt5) addpool(p *obj.Prog, a *obj.Addr) { c.elitrl = q c.pool.size += 4 - // Store the link to the pool entry in Pcond. - p.Pcond = q + // Store the link to the pool entry in Pool. + p.Pool = q } func (c *ctxt5) regoff(a *obj.Addr) int32 { @@ -1584,8 +1584,8 @@ func (c *ctxt5) asmout(p *obj.Prog, o *Optab, out []uint32) { break } - if p.Pcond != nil { - v = int32((p.Pcond.Pc - c.pc) - 8) + if p.To.Target() != nil { + v = int32((p.To.Target().Pc - c.pc) - 8) } o1 |= (uint32(v) >> 2) & 0xffffff @@ -3023,7 +3023,7 @@ func (c *ctxt5) omvr(p *obj.Prog, a *obj.Addr, dr int) uint32 { func (c *ctxt5) omvl(p *obj.Prog, a *obj.Addr, dr int) uint32 { var o1 uint32 - if p.Pcond == nil { + if p.Pool == nil { c.aclass(a) v := immrot(^uint32(c.instoffset)) if v == 0 { @@ -3035,7 +3035,7 @@ func (c *ctxt5) omvl(p *obj.Prog, a *obj.Addr, dr int) uint32 { o1 |= uint32(v) o1 |= (uint32(dr) & 15) << 12 } else { - v := int32(p.Pcond.Pc - p.Pc - 8) + v := int32(p.Pool.Pc - p.Pc - 8) o1 = c.olr(v, REGPC, dr, int(p.Scond)&C_SCOND) } diff --git a/src/cmd/internal/obj/arm/obj5.go b/src/cmd/internal/obj/arm/obj5.go index 86831f2b44..4d9187b530 100644 --- a/src/cmd/internal/obj/arm/obj5.go +++ b/src/cmd/internal/obj/arm/obj5.go @@ -406,7 +406,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { mov.To.Reg = REG_R2 // B.NE branch target is MOVW above - bne.Pcond = mov + bne.To.SetTarget(mov) // ADD $(autosize+4), R13, R3 p = obj.Appendp(mov, newprog) @@ -428,7 +428,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { p = obj.Appendp(p, newprog) p.As = ABNE p.To.Type = obj.TYPE_BRANCH - p.Pcond = end + p.To.SetTarget(end) // ADD $4, R13, R4 p = obj.Appendp(p, newprog) @@ -452,7 +452,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { p = obj.Appendp(p, newprog) p.As = AB p.To.Type = obj.TYPE_BRANCH - p.Pcond = end + p.To.SetTarget(end) // reset for subsequent passes p = end @@ -741,7 +741,7 @@ func (c *ctxt5) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { movw.To.Type = obj.TYPE_REG movw.To.Reg = REG_R3 - bls.Pcond = movw + bls.To.SetTarget(movw) // BL runtime.morestack call := obj.Appendp(movw, c.newprog) @@ -762,7 +762,7 @@ func (c *ctxt5) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { b := obj.Appendp(pcdata, c.newprog) b.As = obj.AJMP b.To.Type = obj.TYPE_BRANCH - b.Pcond = c.cursym.Func.Text.Link + b.To.SetTarget(c.cursym.Func.Text.Link) b.Spadj = +framesize return end |
