1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 09:10:22 +02:00

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.
This commit is contained in:
Andy Wingo 2019-09-01 20:40:14 +02:00
parent 74f14562a6
commit d1cf892880
13 changed files with 96 additions and 5 deletions

View file

@ -3314,7 +3314,21 @@ VM_NAME (scm_thread *thread)
NEXT (1);
}
VM_DEFINE_OP (159, unused_159, NULL, NOP)
/* s64->f64 dst:12 src:12
*
* Convert an s64 value to a double-precision floating-point value.
*/
VM_DEFINE_OP (159, s64_to_f64, "s64->f64", DOP1 (X8_S12_S12))
{
uint16_t dst, src;
UNPACK_12_12 (op, dst, src);
SP_SET_F64 (dst, (double) SP_REF_S64 (src));
NEXT (1);
}
VM_DEFINE_OP (160, unused_160, NULL, NOP)
VM_DEFINE_OP (161, unused_161, NULL, NOP)
VM_DEFINE_OP (162, unused_162, NULL, NOP)