[RISCV] For rv32, accept constants like 0xfffff800 as a valid simm12.
authorCraig Topper <craig.topper@sifive.com>
Fri, 17 Feb 2023 18:53:44 +0000 (10:53 -0800)
committerCraig Topper <craig.topper@sifive.com>
Fri, 17 Feb 2023 18:53:44 +0000 (10:53 -0800)
commit2b2b8409e6848361577be404bd0ae47a097f0e0c
tree6b86d8b5077ecfee534ae397eee8bad733ca297b
parentefe7c4b77bed76ef3af6fd018122b428c21512b7
[RISCV] For rv32, accept constants like 0xfffff800 as a valid simm12.

Internally we store constants in int64_t after parsing, but this is
kind of an implementation detail. If we only supported rv32, we might
have chosen int32_t.

For rv32, I think it makes sense to accept the constants that we
would accept if int32_t was the internal type. In fact we already
do this for the `li` alias. This patch extends this to sign
extended constants for other instructions.

This matches the GNU assembler. The difference between LLVM and gcc
was previously noted here. https://github.com/riscv-non-isa/riscv-asm-manual/pull/71

Reviewed By: reames

Differential Revision: https://reviews.llvm.org/D144166
llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
llvm/test/MC/RISCV/rv32c-only-valid.s
llvm/test/MC/RISCV/rv32i-only-valid.s [new file with mode: 0644]
llvm/test/MC/RISCV/rvv/rv32-immediate.s [new file with mode: 0644]