summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-09-07 16:08:00 +0200
committerAndy Wingo <wingo@pobox.com>2018-09-10 16:33:10 +0200
commitce5c05ac4aa105a8a7b855c6cb5d811ef672cf5b (patch)
tree0b41f6d5ba5cc18edb397eb0256d44b648d9e48b
parent46fe5b069b574e17e4cb47a76a4d9e8f0b6e8bc4 (diff)
downloadguile-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.c9
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);
}