diff options
author | Mark H Weaver <mhw@netris.org> | 2013-08-01 15:31:39 -0400 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2013-08-03 15:09:36 -0400 |
commit | b2df1682df9edeb84acf7aacbb97d038aea7e501 (patch) | |
tree | 96b3b6bfdb200658d05dea6e57a1bda87fda8a70 /libguile/vm-i-scheme.c | |
parent | 4fa65b903bd0ad5ed62dca92df71325c0a110809 (diff) | |
download | guile-b2df1682df9edeb84acf7aacbb97d038aea7e501.tar.gz |
VM: Avoid untagging inums in 'logand' and 'logior'.
* libguile/vm-i-scheme.c (logand, logior): Avoid untagging.
Diffstat (limited to 'libguile/vm-i-scheme.c')
-rw-r--r-- | libguile/vm-i-scheme.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c index 90a4c1106..d459e3e1f 100644 --- a/libguile/vm-i-scheme.c +++ b/libguile/vm-i-scheme.c @@ -455,7 +455,8 @@ VM_DEFINE_FUNCTION (160, logand, "logand", 2) { 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_REGISTER (); RETURN (scm_logand (x, y)); } @@ -464,7 +465,8 @@ VM_DEFINE_FUNCTION (161, logior, "logior", 2) { 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_REGISTER (); RETURN (scm_logior (x, y)); } |