diff --git a/lightening/riscv-cpu.c b/lightening/riscv-cpu.c index 1026466ea..97c0ae49c 100644 --- a/lightening/riscv-cpu.c +++ b/lightening/riscv-cpu.c @@ -454,7 +454,7 @@ static void comr(jit_state_t *_jit, int32_t r0, int32_t r1); static void movr(jit_state_t *_jit, int32_t r0, int32_t r1); static void movi(jit_state_t *_jit, int32_t r0, jit_word_t i0); -static uint64_t patch_load_from_pool(uint64_t instrs, uint32_t off); +static uint64_t patch_load_from_pool(uint64_t instrs, int32_t off); static jit_reloc_t emit_load_from_pool(jit_state_t *_jit, uint64_t insts); static jit_reloc_t mov_addr(jit_state_t *_jit, int32_t r0); static jit_reloc_t movi_from_pool(jit_state_t *_jit, int32_t r0); diff --git a/lightening/riscv.c b/lightening/riscv.c index ab58b3ee1..c4b43dc02 100644 --- a/lightening/riscv.c +++ b/lightening/riscv.c @@ -317,9 +317,7 @@ static void patch_load_from_pool_offset(uint32_t *loc, int32_t v) { load_from_pool_t *i = (load_from_pool_t *) loc; - int32_t hi20 = v >>12; - i->inst.auipc.U.imm31_12 = hi20; - i->inst.load.I.imm11_0 = v - (hi20<<12); + i->l = patch_load_from_pool(i->l, v); } static int32_t read_load_from_pool_offset(uint32_t *loc)