aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/riscv
diff options
context:
space:
mode:
authorJoel Sing <joel@sing.id.au>2021-08-21 04:30:29 +0000
committerJoel Sing <joel@sing.id.au>2021-09-08 05:32:14 +0000
commitf5bdbf311c3c28fd7cdb8ce31b272deb3feb6f64 (patch)
tree6ed2f5a850f2decc246f20fb66209710bb971c80 /src/cmd/internal/obj/riscv
parentbab79dd3627a9c5d4b43ac3f3c2eba4a1f04b813 (diff)
downloadgo-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.go66
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: