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/s390x | |
| 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/s390x')
| -rw-r--r-- | src/cmd/internal/obj/s390x/asmz.go | 18 | ||||
| -rw-r--r-- | src/cmd/internal/obj/s390x/objz.go | 10 |
2 files changed, 14 insertions, 14 deletions
diff --git a/src/cmd/internal/obj/s390x/asmz.go b/src/cmd/internal/obj/s390x/asmz.go index 29182ea805..68f01f1c5d 100644 --- a/src/cmd/internal/obj/s390x/asmz.go +++ b/src/cmd/internal/obj/s390x/asmz.go @@ -3001,8 +3001,8 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { case 11: // br/bl v := int32(0) - if p.Pcond != nil { - v = int32((p.Pcond.Pc - p.Pc) >> 1) + if p.To.Target() != nil { + v = int32((p.To.Target().Pc - p.Pc) >> 1) } if p.As == ABR && p.To.Sym == nil && int32(int16(v)) == v { @@ -3122,8 +3122,8 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { case 16: // conditional branch v := int32(0) - if p.Pcond != nil { - v = int32((p.Pcond.Pc - p.Pc) >> 1) + if p.To.Target() != nil { + v = int32((p.To.Target().Pc - p.Pc) >> 1) } mask := uint32(c.branchMask(p)) if p.To.Sym == nil && int32(int16(v)) == v { @@ -3440,7 +3440,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { case 41: // branch on count r1 := p.From.Reg - ri2 := (p.Pcond.Pc - p.Pc) >> 1 + ri2 := (p.To.Target().Pc - p.Pc) >> 1 if int64(int16(ri2)) != ri2 { c.ctxt.Diag("branch target too far away") } @@ -3885,8 +3885,8 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { case 89: // compare and branch reg reg var v int32 - if p.Pcond != nil { - v = int32((p.Pcond.Pc - p.Pc) >> 1) + if p.To.Target() != nil { + v = int32((p.To.Target().Pc - p.Pc) >> 1) } // Some instructions take a mask as the first argument. @@ -3930,8 +3930,8 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { case 90: // compare and branch reg $constant var v int32 - if p.Pcond != nil { - v = int32((p.Pcond.Pc - p.Pc) >> 1) + if p.To.Target() != nil { + v = int32((p.To.Target().Pc - p.Pc) >> 1) } // Some instructions take a mask as the first argument. diff --git a/src/cmd/internal/obj/s390x/objz.go b/src/cmd/internal/obj/s390x/objz.go index ef6335d849..625bb0f7b4 100644 --- a/src/cmd/internal/obj/s390x/objz.go +++ b/src/cmd/internal/obj/s390x/objz.go @@ -454,8 +454,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: @@ -679,14 +679,14 @@ func (c *ctxtz) stacksplitPost(p *obj.Prog, pPre *obj.Prog, pPreempt *obj.Prog, // MOVD LR, R5 p = obj.Appendp(pcdata, c.newprog) - pPre.Pcond = p + pPre.To.SetTarget(p) p.As = AMOVD p.From.Type = obj.TYPE_REG p.From.Reg = REG_LR p.To.Type = obj.TYPE_REG p.To.Reg = REG_R5 if pPreempt != nil { - pPreempt.Pcond = p + pPreempt.To.SetTarget(p) } // BL runtime.morestack(SB) @@ -709,7 +709,7 @@ func (c *ctxtz) stacksplitPost(p *obj.Prog, pPre *obj.Prog, pPreempt *obj.Prog, p.As = ABR p.To.Type = obj.TYPE_BRANCH - p.Pcond = c.cursym.Func.Text.Link + p.To.SetTarget(c.cursym.Func.Text.Link) return p } |
