diff options
| author | Joel Sing <joel@sing.id.au> | 2021-08-21 04:30:29 +0000 |
|---|---|---|
| committer | Joel Sing <joel@sing.id.au> | 2021-09-08 05:32:14 +0000 |
| commit | f5bdbf311c3c28fd7cdb8ce31b272deb3feb6f64 (patch) | |
| tree | 6ed2f5a850f2decc246f20fb66209710bb971c80 /src/cmd/internal/obj/riscv | |
| parent | bab79dd3627a9c5d4b43ac3f3c2eba4a1f04b813 (diff) | |
| download | go-f5bdbf311c3c28fd7cdb8ce31b272deb3feb6f64.tar.xz | |
cmd/internal/obj/riscv: simplify rewriteMOV
Rewrite and simplify the rewriteMOV function in preparation for eliminating it
entirely. Improve some error messages in the process.
Change-Id: Id9a77be5174d46cc23651930c2e9068ee6555690
Reviewed-on: https://go-review.googlesource.com/c/go/+/344458
Trust: Joel Sing <joel@sing.id.au>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/cmd/internal/obj/riscv')
| -rw-r--r-- | src/cmd/internal/obj/riscv/obj.go | 66 |
1 files changed, 24 insertions, 42 deletions
diff --git a/src/cmd/internal/obj/riscv/obj.go b/src/cmd/internal/obj/riscv/obj.go index 1140542739..443f761ad9 100644 --- a/src/cmd/internal/obj/riscv/obj.go +++ b/src/cmd/internal/obj/riscv/obj.go @@ -226,51 +226,32 @@ func rewriteMOV(ctxt *obj.Link, newprog obj.ProgAlloc, p *obj.Prog) { panic(fmt.Sprintf("%+v is not a MOV pseudo-instruction", p.As)) } - switch p.From.Type { - case obj.TYPE_MEM: - switch p.From.Name { - case obj.NAME_AUTO, obj.NAME_PARAM, obj.NAME_NONE: - if p.To.Type != obj.TYPE_REG { - ctxt.Diag("unsupported load for %v", p) - } + switch { + case p.From.Type == obj.TYPE_REG && p.To.Type == obj.TYPE_REG: + case p.From.Type == obj.TYPE_MEM && p.To.Type == obj.TYPE_REG: + switch p.From.Name { + case obj.NAME_AUTO, obj.NAME_NONE, obj.NAME_PARAM: case obj.NAME_EXTERN, obj.NAME_STATIC: p.Mark |= NEED_PCREL_ITYPE_RELOC - default: ctxt.Diag("unsupported name %d for %v", p.From.Name, p) } - case obj.TYPE_REG: - switch p.To.Type { - case obj.TYPE_REG: - switch p.As { - case AMOV, AMOVB, AMOVH, AMOVW, AMOVBU, AMOVHU, AMOVWU, AMOVF, AMOVD: - default: - ctxt.Diag("unsupported register-register move at %v", p) - } - - case obj.TYPE_MEM: - switch p.As { - case AMOVBU, AMOVHU, AMOVWU: - ctxt.Diag("unsupported unsigned store at %v", p) - return - } - switch p.To.Name { - case obj.NAME_AUTO, obj.NAME_PARAM, obj.NAME_NONE: - - case obj.NAME_EXTERN, obj.NAME_STATIC: - p.Mark |= NEED_PCREL_STYPE_RELOC - - default: - ctxt.Diag("unsupported name %d for %v", p.From.Name, p) - } - + case p.From.Type == obj.TYPE_REG && p.To.Type == obj.TYPE_MEM: + switch p.As { + case AMOVBU, AMOVHU, AMOVWU: + ctxt.Diag("unsupported unsigned store at %v", p) + } + switch p.To.Name { + case obj.NAME_AUTO, obj.NAME_NONE, obj.NAME_PARAM: + case obj.NAME_EXTERN, obj.NAME_STATIC: + p.Mark |= NEED_PCREL_STYPE_RELOC default: - ctxt.Diag("unsupported MOV at %v", p) + ctxt.Diag("unsupported name %d for %v", p.From.Name, p) } - case obj.TYPE_CONST: + case p.From.Type == obj.TYPE_CONST: if p.As != AMOV { ctxt.Diag("%v: unsupported constant load", p) } @@ -278,18 +259,19 @@ func rewriteMOV(ctxt *obj.Link, newprog obj.ProgAlloc, p *obj.Prog) { ctxt.Diag("%v: constant load must target register", p) } - case obj.TYPE_ADDR: - if p.To.Type != obj.TYPE_REG || p.As != AMOV { - ctxt.Diag("unsupported addr MOV at %v", p) + case p.From.Type == obj.TYPE_ADDR: + if p.As != AMOV { + ctxt.Diag("%v: unsupported address load", p) + } + if p.To.Type != obj.TYPE_REG { + ctxt.Diag("%v: address load must target register", p) } switch p.From.Name { - case obj.NAME_AUTO, obj.NAME_PARAM, obj.NAME_NONE: - + case obj.NAME_AUTO, obj.NAME_NONE, obj.NAME_PARAM: case obj.NAME_EXTERN, obj.NAME_STATIC: p.Mark |= NEED_PCREL_ITYPE_RELOC - default: - ctxt.Diag("bad addr MOV from name %v at %v", p.From.Name, p) + ctxt.Diag("unsupported name %d for %v", p.From.Name, p) } default: |
