diff options
author | Andy Wingo <wingo@pobox.com> | 2018-09-07 16:08:00 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2018-09-10 16:33:10 +0200 |
commit | ce5c05ac4aa105a8a7b855c6cb5d811ef672cf5b (patch) | |
tree | 0b41f6d5ba5cc18edb397eb0256d44b648d9e48b | |
parent | 46fe5b069b574e17e4cb47a76a4d9e8f0b6e8bc4 (diff) | |
download | guile-ce5c05ac4aa105a8a7b855c6cb5d811ef672cf5b.tar.gz |
Fix JIT compilation of intrinsics that return doubles
* libguile/jit.c (emit_retval_d): New helper.
(compile_call_f64_from_scm): Take the f64 result from the correct
registers.
-rw-r--r-- | libguile/jit.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/libguile/jit.c b/libguile/jit.c index 951b4154e..ca466bbbd 100644 --- a/libguile/jit.c +++ b/libguile/jit.c @@ -426,6 +426,13 @@ emit_retval (scm_jit_state *j, jit_gpr_t r) record_gpr_clobber (j, r); } +static void +emit_retval_d (scm_jit_state *j, jit_fpr_t r) +{ + jit_retval_d (r); + record_fpr_clobber (j, r); +} + static jit_node_t * emit_movi (scm_jit_state *j, jit_gpr_t r, jit_word_t i) { @@ -2287,7 +2294,7 @@ compile_call_f64_from_scm (scm_jit_state *j, uint16_t dst, uint16_t a, uint32_t jit_pushargr (T0); jit_finishi (intrinsic); clear_scratch_register_state (j); - emit_retval (j, JIT_F0); + emit_retval_d (j, JIT_F0); emit_reload_sp (j); emit_sp_set_f64 (j, dst, JIT_F0); } |