diff options
| author | Joel Sing <joel@sing.id.au> | 2023-08-26 04:19:40 +1000 |
|---|---|---|
| committer | Joel Sing <joel@sing.id.au> | 2023-11-07 10:37:24 +0000 |
| commit | dc74a3dd4f30c4a3df235aac8a9e84575767ba69 (patch) | |
| tree | 94b7cca8caf61a35fae614984edcf627d86dd73c /src/cmd/internal | |
| parent | 1d9040bf08cf8cda30b203c21de12a4b6ab66153 (diff) | |
| download | go-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')
| -rw-r--r-- | src/cmd/internal/obj/riscv/obj.go | 4 |
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: |
