summaryrefslogtreecommitdiff
path: root/libguile/lightening
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2019-05-21 16:06:11 +0200
committerAndy Wingo <wingo@pobox.com>2019-05-21 16:06:11 +0200
commit9b4870cad3d24fc74b7001b37849fafb2379bd83 (patch)
tree9979a4deb1529723a6476ea16ab9e194f0c42e84 /libguile/lightening
parentec9fa9561b4a90670530aa0e42a3477d9e444177 (diff)
parentb67c4ed1e1d42610e82d1bdbba3a9df44995449d (diff)
downloadguile-9b4870cad3d24fc74b7001b37849fafb2379bd83.tar.gz
Merge remote-tracking branch 'lightening/master'
Diffstat (limited to 'libguile/lightening')
-rw-r--r--libguile/lightening/lightening/aarch64-cpu.c7
-rw-r--r--libguile/lightening/lightening/lightening.c5
2 files changed, 7 insertions, 5 deletions
diff --git a/libguile/lightening/lightening/aarch64-cpu.c b/libguile/lightening/lightening/aarch64-cpu.c
index 50f2b9dc3..1e727008c 100644
--- a/libguile/lightening/lightening/aarch64-cpu.c
+++ b/libguile/lightening/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/libguile/lightening/lightening/lightening.c b/libguile/lightening/lightening/lightening.c
index 5050a35b0..bf9d9edbd 100644
--- a/libguile/lightening/lightening/lightening.c
+++ b/libguile/lightening/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);