mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-03 08:10:31 +02:00
* numbers.c (scm_logand, scm_logior, scm_logxor, scm_logtest,
scm_logbit_p): Do the computation in ulongs. This is not as nice as doing it in bignums, but at least it's good enough for manipulating flags in 32-bit words. (Thanks to Jim Wilson.)
This commit is contained in:
parent
7c7471d93b
commit
7217f8167c
1 changed files with 9 additions and 9 deletions
|
@ -420,8 +420,8 @@ scm_logand(n1, n2)
|
|||
return SCM_MAKINUM (-1);
|
||||
return n1;
|
||||
}
|
||||
return scm_long2num (scm_num2long(n1, (char *)SCM_ARG1, s_logand)
|
||||
& scm_num2long(n2, (char *)SCM_ARG2, s_logand));
|
||||
return scm_ulong2num (scm_num2ulong(n1, (char *)SCM_ARG1, s_logand)
|
||||
& scm_num2ulong(n2, (char *)SCM_ARG2, s_logand));
|
||||
}
|
||||
|
||||
SCM_PROC1 (s_logior, "logior", scm_tc7_asubr, scm_logior);
|
||||
|
@ -437,8 +437,8 @@ scm_logior(n1, n2)
|
|||
return SCM_INUM0;
|
||||
return n1;
|
||||
}
|
||||
return scm_long2num(scm_num2long(n1, (char *)SCM_ARG1, s_logior)
|
||||
| scm_num2long(n2, (char *)SCM_ARG2, s_logior));
|
||||
return scm_ulong2num(scm_num2ulong(n1, (char *)SCM_ARG1, s_logior)
|
||||
| scm_num2ulong(n2, (char *)SCM_ARG2, s_logior));
|
||||
}
|
||||
|
||||
SCM_PROC1 (s_logxor, "logxor", scm_tc7_asubr, scm_logxor);
|
||||
|
@ -454,8 +454,8 @@ scm_logxor(n1, n2)
|
|||
return SCM_INUM0;
|
||||
return n1;
|
||||
}
|
||||
return scm_long2num(scm_num2long(n1, (char *)SCM_ARG1, s_logxor)
|
||||
^ scm_num2long(n2, (char *)SCM_ARG2, s_logxor));
|
||||
return scm_ulong2num(scm_num2ulong(n1, (char *)SCM_ARG1, s_logxor)
|
||||
^ scm_num2ulong(n2, (char *)SCM_ARG2, s_logxor));
|
||||
}
|
||||
|
||||
SCM_PROC(s_logtest, "logtest", 2, 0, 0, scm_logtest);
|
||||
|
@ -465,8 +465,8 @@ scm_logtest(n1, n2)
|
|||
SCM n1;
|
||||
SCM n2;
|
||||
{
|
||||
return ((scm_num2long (n1, (char *)SCM_ARG1, s_logtest)
|
||||
& scm_num2long (n2, (char *)SCM_ARG2, s_logtest))
|
||||
return ((scm_num2ulong (n1, (char *)SCM_ARG1, s_logtest)
|
||||
& scm_num2ulong (n2, (char *)SCM_ARG2, s_logtest))
|
||||
? SCM_BOOL_T : SCM_BOOL_F);
|
||||
}
|
||||
|
||||
|
@ -479,7 +479,7 @@ scm_logbit_p(n1, n2)
|
|||
SCM n2;
|
||||
{
|
||||
return (((1 << scm_num2long (n1, (char *)SCM_ARG1, s_logtest))
|
||||
& scm_num2long (n2, (char *)SCM_ARG2, s_logtest))
|
||||
& scm_num2ulong (n2, (char *)SCM_ARG2, s_logtest))
|
||||
? SCM_BOOL_T : SCM_BOOL_F);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue