From e7f64971ed62a6b58f86b5d90a15b24733e36a8d Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Tue, 6 Aug 2013 17:03:56 -0400 Subject: [PATCH] RTL VM: Avoid untagging inums in 'logand' and 'logior'. * libguile/vm-engine.c (logand, logior): Avoid untagging. --- libguile/vm-engine.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index 9f3ff5679..613c638e4 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -2963,7 +2963,8 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_) { ARGS2 (x, y); if (SCM_I_INUMP (x) && SCM_I_INUMP (y)) - RETURN (SCM_I_MAKINUM (SCM_I_INUM (x) & SCM_I_INUM (y))); + /* Compute bitwise AND without untagging */ + RETURN (SCM_PACK (SCM_UNPACK (x) & SCM_UNPACK (y))); SYNC_IP (); RETURN (scm_logand (x, y)); } @@ -2976,7 +2977,8 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_) { ARGS2 (x, y); if (SCM_I_INUMP (x) && SCM_I_INUMP (y)) - RETURN (SCM_I_MAKINUM (SCM_I_INUM (x) | SCM_I_INUM (y))); + /* Compute bitwise OR without untagging */ + RETURN (SCM_PACK (SCM_UNPACK (x) | SCM_UNPACK (y))); SYNC_IP (); RETURN (scm_logior (x, y)); }