mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 09:10:22 +02:00
logsub is intrinsic
* libguile/intrinsics.h: * libguile/intrinsics.c (logsub): New intrinsic. (scm_bootstrap_intrinsics): Init new intrinsic. * libguile/vm-engine.c (logsub): Disable. * module/language/cps/reify-primitives.scm (compute-known-primitives): Add logsub. * module/system/vm/assembler.scm: Update logsub intrinsic assembler.
This commit is contained in:
parent
b2c01e5b58
commit
25a0fe8839
5 changed files with 22 additions and 6 deletions
|
@ -80,6 +80,22 @@ scm_to_uint64_truncate (SCM x)
|
|||
return scm_to_uint64 (scm_logand (x, scm_from_uint64 ((scm_t_uint64) -1)));
|
||||
}
|
||||
|
||||
static SCM
|
||||
logsub (SCM x, SCM y)
|
||||
{
|
||||
if (SCM_I_INUMP (x) && SCM_I_INUMP (y))
|
||||
{
|
||||
scm_t_signed_bits a, b;
|
||||
|
||||
a = SCM_I_INUM (x);
|
||||
b = SCM_I_INUM (y);
|
||||
|
||||
return SCM_I_MAKINUM (a & ~b);
|
||||
}
|
||||
|
||||
return scm_logand (x, scm_lognot (y));
|
||||
}
|
||||
|
||||
void
|
||||
scm_bootstrap_intrinsics (void)
|
||||
{
|
||||
|
@ -106,6 +122,7 @@ scm_bootstrap_intrinsics (void)
|
|||
scm_vm_intrinsics.scm_to_s64 = scm_to_int64;
|
||||
scm_vm_intrinsics.u64_to_scm = scm_from_uint64;
|
||||
scm_vm_intrinsics.s64_to_scm = scm_from_int64;
|
||||
scm_vm_intrinsics.logsub = logsub;
|
||||
|
||||
scm_c_register_extension ("libguile-" SCM_EFFECTIVE_VERSION,
|
||||
"scm_init_intrinsics",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue