mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-06 04:00:26 +02:00
* src/vm_number.c (FUNC2): New macro.
(add2, sub2): Use FUNC2. (remainder): New instruction.
This commit is contained in:
parent
17a2034883
commit
628ef8663e
1 changed files with 27 additions and 21 deletions
|
@ -43,6 +43,26 @@
|
|||
|
||||
#include "vm-snarf.h"
|
||||
|
||||
#define FUNC2(CFUNC,SFUNC) \
|
||||
{ \
|
||||
VM_SETUP_ARGS2 (); \
|
||||
if (SCM_INUMP (a1) && SCM_INUMP (a2)) \
|
||||
{ \
|
||||
int n = SCM_INUM (a1) CFUNC SCM_INUM (a2); \
|
||||
if (SCM_FIXABLE (n)) \
|
||||
RETURN (SCM_MAKINUM (n)); \
|
||||
} \
|
||||
RETURN (SFUNC (a1, a2)); \
|
||||
}
|
||||
|
||||
#define REL2(CREL,SREL) \
|
||||
{ \
|
||||
VM_SETUP_ARGS2 (); \
|
||||
if (SCM_INUMP (a1) && SCM_INUMP (a2)) \
|
||||
RETURN (SCM_BOOL (SCM_INUM (a1) CREL SCM_INUM (a2))); \
|
||||
RETURN (SREL (a1, a2)); \
|
||||
}
|
||||
|
||||
SCM_DEFINE_VM_FUNCTION (zero_p, "zero?", "zero?", 1, 0)
|
||||
{
|
||||
VM_SETUP_ARGS1 ();
|
||||
|
@ -99,14 +119,7 @@ SCM_DEFINE_VM_FUNCTION (add, "+", "add", 0, 1)
|
|||
|
||||
SCM_DEFINE_VM_FUNCTION (add2, "+", "add2", 2, 0)
|
||||
{
|
||||
VM_SETUP_ARGS2 ();
|
||||
if (SCM_INUMP (a1) && SCM_INUMP (a2))
|
||||
{
|
||||
int n = SCM_INUM (a1) + SCM_INUM (a2);
|
||||
if (SCM_FIXABLE (n))
|
||||
RETURN (SCM_MAKINUM (n));
|
||||
}
|
||||
RETURN (scm_sum (a1, a2));
|
||||
FUNC2 (+, scm_sum);
|
||||
}
|
||||
|
||||
SCM_DEFINE_VM_FUNCTION (sub, "-", "sub", 1, 1)
|
||||
|
@ -140,14 +153,7 @@ SCM_DEFINE_VM_FUNCTION (sub, "-", "sub", 1, 1)
|
|||
|
||||
SCM_DEFINE_VM_FUNCTION (sub2, "-", "sub2", 2, 0)
|
||||
{
|
||||
VM_SETUP_ARGS2 ();
|
||||
if (SCM_INUMP (a1) && SCM_INUMP (a2))
|
||||
{
|
||||
int n = SCM_INUM (a1) - SCM_INUM (a2);
|
||||
if (SCM_FIXABLE (n))
|
||||
RETURN (SCM_MAKINUM (n));
|
||||
}
|
||||
RETURN (scm_difference (a1, a2));
|
||||
FUNC2 (-, scm_difference);
|
||||
}
|
||||
|
||||
SCM_DEFINE_VM_FUNCTION (minus, "-", "minus", 1, 0)
|
||||
|
@ -162,11 +168,11 @@ SCM_DEFINE_VM_FUNCTION (minus, "-", "minus", 1, 0)
|
|||
RETURN (scm_difference (a1, SCM_UNDEFINED));
|
||||
}
|
||||
|
||||
#define REL2(CREL,SREL) \
|
||||
VM_SETUP_ARGS2 (); \
|
||||
if (SCM_INUMP (a1) && SCM_INUMP (a2)) \
|
||||
RETURN (SCM_BOOL (SCM_INUM (a1) CREL SCM_INUM (a2))); \
|
||||
RETURN (SREL (a1, a2))
|
||||
SCM_DEFINE_VM_FUNCTION (remainder, "remainder", "remainder", 2, 0)
|
||||
{
|
||||
VM_SETUP_ARGS2 ();
|
||||
RETURN (scm_remainder (a1, a2));
|
||||
}
|
||||
|
||||
SCM_DEFINE_VM_FUNCTION (lt2, "<", "lt2", 2, 0)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue