[RISCV] Allow LI with symbol difference as constant
This patch lets the assembler accept code like the following: .Lbuf: ... .set .Lbuf_len, . - .Lbuf li a0, .Lbuf_len It works by translating such instances of LI into an ADDI and inserting the correct constant value via a new fixup. Note that this means that the constant value is restricted to 12 bits since we cannot insert new instructions during the relaxation stage. Binutils seems to have the same restriction though. This patch also fixes a small issue where the SMLoc of an LI wasn't propagated when translated to ADDI. While this is technically unrelated to the main functionality of this patch, it improves error messages related to the new use of LI. This patch does _not_ allow I-type instructions to take such symbolic constants as well. While technically possible (and allowed by binutils), it's probably better to implement this in another patch. Fixes #57461 Reviewed By: asb Differential Revision: https://reviews.llvm.org/D135960
Loading
Please sign in to comment