diff options
author | Andy Wingo <wingo@pobox.com> | 2019-09-01 20:40:14 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2019-09-01 20:46:04 +0200 |
commit | d1cf8928802843a14c53f2a2de55bf01e75e2662 (patch) | |
tree | 22b5f290b8c5f3a60f8241068dda424eee045f88 /libguile/jit.c | |
parent | 74f14562a65c34929176a290a5a9c421b1854046 (diff) | |
download | guile-d1cf8928802843a14c53f2a2de55bf01e75e2662.tar.gz |
Optimize fixnum or s64 -> f64 conversions
* libguile/intrinsics.c (scm_bootstrap_intrinsics):
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Add "inexact"
intrinsic.
* libguile/jit.c (compile_s64_to_f64): New compiler.
* libguile/vm-engine.c (s64->f64): New instruction.
* module/language/cps/effects-analysis.scm (heap-numbers-equal?):
* module/language/cps/reify-primitives.scm (compute-known-primitives):
* module/language/cps/slot-allocation.scm (compute-var-representations):
* module/language/cps/specialize-numbers.scm (fixnum->f64):
(specialize-operations):
* module/language/cps/type-fold.scm (scm->f64, inexact):
* module/language/cps/types.scm (inexact, s64->f64):
* module/language/tree-il/cps-primitives.scm (exact->inexact):
* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
(*effect-free-primitives*):
* module/system/vm/assembler.scm: Recognize exact->inexact as a
primitive, and optimize it. Add compiler support for new "inexact"
and "s64->f64" primcalls.
Diffstat (limited to 'libguile/jit.c')
-rw-r--r-- | libguile/jit.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/libguile/jit.c b/libguile/jit.c index f1c7a4941..a05734f6d 100644 --- a/libguile/jit.c +++ b/libguile/jit.c @@ -4287,6 +4287,15 @@ compile_f64_set (scm_jit_state *j, uint8_t ptr, uint8_t idx, uint8_t v) jit_stxr_d (j->jit, T0, T1, JIT_F0); } +static void +compile_s64_to_f64 (scm_jit_state *j, uint16_t dst, uint16_t src) +{ + emit_sp_ref_s64 (j, T0, src); + jit_extr_d (j->jit, JIT_F0, T0); + record_fpr_clobber (j, JIT_F0); + emit_sp_set_f64 (j, dst, JIT_F0); +} + #define UNPACK_8_8_8(op,a,b,c) \ do \ |