summaryrefslogtreecommitdiff
path: root/libguile/vm-i-scheme.c
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2010-11-19 11:18:42 +0100
committerLudovic Courtès <ludo@gnu.org>2010-11-19 13:34:44 +0100
commit0b54eea09a4c975931386a34c53711393b1f7c75 (patch)
treeb815c1f3719d392e879d3b1fd4178f35eb1b7df4 /libguile/vm-i-scheme.c
parent2427baa6a21925178f99726083e38d53b2276b9b (diff)
downloadguile-0b54eea09a4c975931386a34c53711393b1f7c75.tar.gz
Optimize fixnum comparison.
* libguile/vm-i-scheme.c (REL): Don't untag X and Y since tagging preserves ordering.
Diffstat (limited to 'libguile/vm-i-scheme.c')
-rw-r--r--libguile/vm-i-scheme.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c
index 5557e19b8..ec226733a 100644
--- a/libguile/vm-i-scheme.c
+++ b/libguile/vm-i-scheme.c
@@ -174,9 +174,10 @@ VM_DEFINE_INSTRUCTION (144, set_cdr, "set-cdr!", 0, 2, 0)
{ \
ARGS2 (x, y); \
if (SCM_I_INUMP (x) && SCM_I_INUMP (y)) \
- RETURN (scm_from_bool (SCM_I_INUM (x) crel SCM_I_INUM (y))); \
- SYNC_REGISTER (); \
- RETURN (srel (x, y)); \
+ RETURN (scm_from_bool ((scm_t_signed_bits) (x) \
+ crel (scm_t_signed_bits) (y))); \
+ SYNC_REGISTER (); \
+ RETURN (srel (x, y)); \
}
VM_DEFINE_FUNCTION (145, ee, "ee?", 2)