aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj
diff options
context:
space:
mode:
authorJoel Sing <joel@sing.id.au>2023-08-26 04:19:40 +1000
committerJoel Sing <joel@sing.id.au>2023-11-07 10:37:24 +0000
commitdc74a3dd4f30c4a3df235aac8a9e84575767ba69 (patch)
tree94b7cca8caf61a35fae614984edcf627d86dd73c /src/cmd/internal/obj
parent1d9040bf08cf8cda30b203c21de12a4b6ab66153 (diff)
downloadgo-dc74a3dd4f30c4a3df235aac8a9e84575767ba69.tar.xz
cmd/internal/obj/riscv: support subtraction with a constant
Allow SUB and SUBW to be specified with a constant, which are mapped to ADDI and ADDIW with negated values. Change-Id: I7dc55692febc81ea87393b0a3a7d23a43c30313b Reviewed-on: https://go-review.googlesource.com/c/go/+/538915 Run-TryBot: Joel Sing <joel@sing.id.au> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: M Zhuo <mzh@golangcn.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com> Reviewed-by: Mark Ryan <markdryan@rivosinc.com> Reviewed-by: Wang Yaduo <wangyaduo@linux.alibaba.com> Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
Diffstat (limited to 'src/cmd/internal/obj')
-rw-r--r--src/cmd/internal/obj/riscv/obj.go4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/riscv/obj.go b/src/cmd/internal/obj/riscv/obj.go
index 279c8678a7..4ff1d910ce 100644
--- a/src/cmd/internal/obj/riscv/obj.go
+++ b/src/cmd/internal/obj/riscv/obj.go
@@ -69,6 +69,8 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) {
switch p.As {
case AADD:
p.As = AADDI
+ case ASUB:
+ p.As, p.From.Offset = AADDI, -p.From.Offset
case ASLT:
p.As = ASLTI
case ASLTU:
@@ -87,6 +89,8 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) {
p.As = ASRAI
case AADDW:
p.As = AADDIW
+ case ASUBW:
+ p.As, p.From.Offset = AADDIW, -p.From.Offset
case ASLLW:
p.As = ASLLIW
case ASRLW: