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:
parent
74f14562a6
commit
d1cf892880
13 changed files with 96 additions and 5 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue