diff options
author | Ludovic Courtès <ludo@gnu.org> | 2010-11-19 11:18:42 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2010-11-19 13:34:44 +0100 |
commit | 0b54eea09a4c975931386a34c53711393b1f7c75 (patch) | |
tree | b815c1f3719d392e879d3b1fd4178f35eb1b7df4 /libguile/vm-i-scheme.c | |
parent | 2427baa6a21925178f99726083e38d53b2276b9b (diff) | |
download | guile-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.c | 7 |
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) |