mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-16 00:30:21 +02:00
Lower eqv? and equal? to new instructions.
* libguile/numbers.h: * libguile/eq.c (scm_i_heap_numbers_equal_p): New helper, factored out of scm_eqv_p. (scm_eqv_p): Use new helper. * libguile/vm-engine.c (heap-numbers-equal?): New op. * module/language/cps/compile-bytecode.scm (compile-function): Add support for heap-number? and heap-numbers-equal?. Remove case for eqv?. * module/language/cps/effects-analysis.scm: Add heap-numbers-equal?. * module/language/cps/primitives.scm (*comparisons*): Add heap-numbers-equal?. * module/language/cps/type-fold.scm (heap-numbers-equal?): Update. * module/language/cps/types.scm (heap-numbers-equal?): Update. * module/language/tree-il/compile-cps.scm (canonicalize): Completely inline eqv?, and partially inline equal?. * module/system/vm/assembler.scm (system): Export emit-heap-numbers-equal?.
This commit is contained in:
parent
c2fa345093
commit
73d1502630
10 changed files with 94 additions and 30 deletions
|
@ -4395,7 +4395,24 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
|
|||
NEXT (1);
|
||||
}
|
||||
|
||||
VM_DEFINE_OP (213, unused_213, NULL, NOP)
|
||||
VM_DEFINE_OP (213, heap_numbers_equal, "heap-numbers-equal?", OP1 (X8_S12_S12))
|
||||
{
|
||||
scm_t_uint16 a, b;
|
||||
SCM x, y;
|
||||
|
||||
UNPACK_12_12 (op, a, b);
|
||||
x = SP_REF (a);
|
||||
y = SP_REF (b);
|
||||
|
||||
SYNC_IP ();
|
||||
if (scm_is_true (scm_i_heap_numbers_equal_p (x, y)))
|
||||
vp->compare_result = SCM_F_COMPARE_EQUAL;
|
||||
else
|
||||
vp->compare_result = SCM_F_COMPARE_NONE;
|
||||
CACHE_SP ();
|
||||
NEXT (1);
|
||||
}
|
||||
|
||||
VM_DEFINE_OP (214, unused_214, NULL, NOP)
|
||||
VM_DEFINE_OP (215, unused_215, NULL, NOP)
|
||||
VM_DEFINE_OP (216, unused_216, NULL, NOP)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue