diff options
author | Andy Wingo <wingo@pobox.com> | 2019-06-20 12:06:37 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2019-06-20 12:07:40 +0200 |
commit | cce222d18965e90db79ce6fefe6e812f9cc9c614 (patch) | |
tree | 66f3a41bf07f97f719177b24afd1f95da184aea0 | |
parent | 7cbbc83dcbc1070d5ab3209d1d98ac23163ae41c (diff) | |
download | guile-cce222d18965e90db79ce6fefe6e812f9cc9c614.tar.gz |
Fix compilation on GCC 5.5
* libguile/jit.c (OLD_FP_FOR_RETURN_TRAMPOLINE): Initialize static const
var from CPP define instead of T0.
(compile_return_values, emit_return_to_interpreter_trampoline): Adapt
to upper-casing.
-rw-r--r-- | libguile/jit.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/libguile/jit.c b/libguile/jit.c index f17d61fff..77222342a 100644 --- a/libguile/jit.c +++ b/libguile/jit.c @@ -237,6 +237,11 @@ static const jit_gpr_t SP = JIT_R0; THREAD. Like SP, it can move. */ static const jit_gpr_t FP = JIT_R1; +/* When we return to a function that doesn't have mcode, the just-popped + FP is stored in this register. The return-to-the-interpreter + trampoline reads the vRA from the just-popped frame. */ +static const jit_gpr_t OLD_FP_FOR_RETURN_TRAMPOLINE = JIT_V1; /* T0 */ + /* Scratch registers. */ static const jit_gpr_t T0 = JIT_V1; static const jit_gpr_t T1 = JIT_V2; @@ -1601,13 +1606,11 @@ compile_shuffle_down (scm_jit_state *j, uint16_t from, uint16_t to) j->frame_size_max -= (from - to); } -static const jit_gpr_t old_fp_for_return_trampoline = T0; - static void compile_return_values (scm_jit_state *j) { - emit_pop_fp (j, old_fp_for_return_trampoline); - emit_load_mra (j, JIT_LR, old_fp_for_return_trampoline); + emit_pop_fp (j, OLD_FP_FOR_RETURN_TRAMPOLINE); + emit_load_mra (j, JIT_LR, OLD_FP_FOR_RETURN_TRAMPOLINE); jit_push_link_register (j->jit); jit_ret (j->jit); @@ -1620,7 +1623,7 @@ emit_return_to_interpreter_trampoline (scm_jit_state *j) { jit_gpr_t ra = T1; - emit_load_vra (j, ra, old_fp_for_return_trampoline); + emit_load_vra (j, ra, OLD_FP_FOR_RETURN_TRAMPOLINE); emit_store_ip (j, ra); emit_exit (j); } |