diff --git a/lightening/aarch64-cpu.c b/lightening/aarch64-cpu.c index 50f2b9dc3..1e727008c 100644 --- a/lightening/aarch64-cpu.c +++ b/lightening/aarch64-cpu.c @@ -994,10 +994,11 @@ static void emit_veneer(jit_state_t *_jit, jit_pointer_t target) { jit_gpr_t tmp = get_temp_gpr(_jit); - uint32_t inst = encode_ox19(A64_LDRI_LITERAL, jit_gpr_regno(tmp)); + uint32_t ldr = encode_ox19(A64_LDRI_LITERAL, jit_gpr_regno(tmp)); + uint32_t br = write_Rn_bitfield(A64_BR, jit_gpr_regno(tmp)); uint32_t *loc = _jit->pc.ui; - emit_u32(_jit, inst); - BR(_jit, jit_gpr_regno(tmp)); + emit_u32(_jit, ldr); + emit_u32(_jit, br); unget_temp_gpr(_jit); if (_jit->overflow) return; diff --git a/lightening/lightening.c b/lightening/lightening.c index 5050a35b0..bf9d9edbd 100644 --- a/lightening/lightening.c +++ b/lightening/lightening.c @@ -1331,8 +1331,6 @@ emit_literal_pool(jit_state_t *_jit, enum guard_pool guard) if (_jit->overflow) return; - _jit->pool->deadline = -1; - if (!_jit->pool->size) return; @@ -1368,6 +1366,9 @@ emit_literal_pool(jit_state_t *_jit, enum guard_pool guard) } } + if (_jit->overflow) + return; + if (guard == GUARD_NEEDED) patch_jmp_without_veneer(_jit, patch_loc);