mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 21:10:27 +02:00
remove dead weight from vm-i-system.c
* libguile/vm-i-system.c: Remove mark, list-mark, cons-mark, vector-mark, and list-break, as they are no longer used. (call, goto/args, mv-call): Remove bits about trampolines, which was slower, and VM continuations, which are not used (we use Guile's continuations as the applicable objects). Renumber ops. * libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.
This commit is contained in:
parent
609edba7ea
commit
d94be25f72
2 changed files with 59 additions and 222 deletions
|
@ -172,7 +172,7 @@
|
||||||
|
|
||||||
/* Major and minor versions must be single characters. */
|
/* Major and minor versions must be single characters. */
|
||||||
#define SCM_OBJCODE_MAJOR_VERSION 0
|
#define SCM_OBJCODE_MAJOR_VERSION 0
|
||||||
#define SCM_OBJCODE_MINOR_VERSION B
|
#define SCM_OBJCODE_MINOR_VERSION C
|
||||||
#define SCM_OBJCODE_MAJOR_VERSION_STRING \
|
#define SCM_OBJCODE_MAJOR_VERSION_STRING \
|
||||||
SCM_CPP_STRINGIFY(SCM_OBJCODE_MAJOR_VERSION)
|
SCM_CPP_STRINGIFY(SCM_OBJCODE_MAJOR_VERSION)
|
||||||
#define SCM_OBJCODE_MINOR_VERSION_STRING \
|
#define SCM_OBJCODE_MINOR_VERSION_STRING \
|
||||||
|
|
|
@ -71,13 +71,7 @@ VM_DEFINE_INSTRUCTION (3, drop, "drop", 0, 1, 0)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (4, mark, "mark", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (4, dup, "dup", 0, 0, 1)
|
||||||
{
|
|
||||||
PUSH (SCM_UNDEFINED);
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (5, dup, "dup", 0, 0, 1)
|
|
||||||
{
|
{
|
||||||
SCM x = *sp;
|
SCM x = *sp;
|
||||||
PUSH (x);
|
PUSH (x);
|
||||||
|
@ -89,49 +83,49 @@ VM_DEFINE_INSTRUCTION (5, dup, "dup", 0, 0, 1)
|
||||||
* Object creation
|
* Object creation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (6, void, "void", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (5, void, "void", 0, 0, 1)
|
||||||
{
|
{
|
||||||
PUSH (SCM_UNSPECIFIED);
|
PUSH (SCM_UNSPECIFIED);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (7, make_true, "make-true", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (6, make_true, "make-true", 0, 0, 1)
|
||||||
{
|
{
|
||||||
PUSH (SCM_BOOL_T);
|
PUSH (SCM_BOOL_T);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (8, make_false, "make-false", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (7, make_false, "make-false", 0, 0, 1)
|
||||||
{
|
{
|
||||||
PUSH (SCM_BOOL_F);
|
PUSH (SCM_BOOL_F);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (9, make_eol, "make-eol", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (8, make_eol, "make-eol", 0, 0, 1)
|
||||||
{
|
{
|
||||||
PUSH (SCM_EOL);
|
PUSH (SCM_EOL);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (10, make_int8, "make-int8", 1, 0, 1)
|
VM_DEFINE_INSTRUCTION (9, make_int8, "make-int8", 1, 0, 1)
|
||||||
{
|
{
|
||||||
PUSH (SCM_I_MAKINUM ((signed char) FETCH ()));
|
PUSH (SCM_I_MAKINUM ((signed char) FETCH ()));
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (11, make_int8_0, "make-int8:0", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (10, make_int8_0, "make-int8:0", 0, 0, 1)
|
||||||
{
|
{
|
||||||
PUSH (SCM_INUM0);
|
PUSH (SCM_INUM0);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (12, make_int8_1, "make-int8:1", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (11, make_int8_1, "make-int8:1", 0, 0, 1)
|
||||||
{
|
{
|
||||||
PUSH (SCM_I_MAKINUM (1));
|
PUSH (SCM_I_MAKINUM (1));
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (13, make_int16, "make-int16", 2, 0, 1)
|
VM_DEFINE_INSTRUCTION (12, make_int16, "make-int16", 2, 0, 1)
|
||||||
{
|
{
|
||||||
int h = FETCH ();
|
int h = FETCH ();
|
||||||
int l = FETCH ();
|
int l = FETCH ();
|
||||||
|
@ -139,7 +133,7 @@ VM_DEFINE_INSTRUCTION (13, make_int16, "make-int16", 2, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (14, make_int64, "make-int64", 8, 0, 1)
|
VM_DEFINE_INSTRUCTION (13, make_int64, "make-int64", 8, 0, 1)
|
||||||
{
|
{
|
||||||
scm_t_uint64 v = 0;
|
scm_t_uint64 v = 0;
|
||||||
v += FETCH ();
|
v += FETCH ();
|
||||||
|
@ -154,7 +148,7 @@ VM_DEFINE_INSTRUCTION (14, make_int64, "make-int64", 8, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (15, make_uint64, "make-uint64", 8, 0, 1)
|
VM_DEFINE_INSTRUCTION (14, make_uint64, "make-uint64", 8, 0, 1)
|
||||||
{
|
{
|
||||||
scm_t_uint64 v = 0;
|
scm_t_uint64 v = 0;
|
||||||
v += FETCH ();
|
v += FETCH ();
|
||||||
|
@ -169,7 +163,7 @@ VM_DEFINE_INSTRUCTION (15, make_uint64, "make-uint64", 8, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (16, make_char8, "make-char8", 1, 0, 1)
|
VM_DEFINE_INSTRUCTION (15, make_char8, "make-char8", 1, 0, 1)
|
||||||
{
|
{
|
||||||
scm_t_uint8 v = 0;
|
scm_t_uint8 v = 0;
|
||||||
v = FETCH ();
|
v = FETCH ();
|
||||||
|
@ -181,7 +175,7 @@ VM_DEFINE_INSTRUCTION (16, make_char8, "make-char8", 1, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (42, make_char32, "make-char32", 4, 0, 1)
|
VM_DEFINE_INSTRUCTION (16, make_char32, "make-char32", 4, 0, 1)
|
||||||
{
|
{
|
||||||
scm_t_wchar v = 0;
|
scm_t_wchar v = 0;
|
||||||
v += FETCH ();
|
v += FETCH ();
|
||||||
|
@ -221,34 +215,6 @@ VM_DEFINE_INSTRUCTION (18, vector, "vector", 2, -1, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (19, list_mark, "list-mark", 0, 0, 0)
|
|
||||||
{
|
|
||||||
POP_LIST_MARK ();
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (20, cons_mark, "cons-mark", 0, 0, 0)
|
|
||||||
{
|
|
||||||
POP_CONS_MARK ();
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (21, vector_mark, "vector-mark", 0, 0, 0)
|
|
||||||
{
|
|
||||||
POP_LIST_MARK ();
|
|
||||||
SYNC_REGISTER ();
|
|
||||||
*sp = scm_vector (*sp);
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (22, list_break, "list-break", 0, 0, 0)
|
|
||||||
{
|
|
||||||
SCM l;
|
|
||||||
POP (l);
|
|
||||||
PUSH_LIST (l, SCM_NULLP);
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Variable access
|
* Variable access
|
||||||
|
@ -271,7 +237,7 @@ VM_DEFINE_INSTRUCTION (22, list_break, "list-break", 0, 0, 0)
|
||||||
|
|
||||||
/* ref */
|
/* ref */
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (23, object_ref, "object-ref", 1, 0, 1)
|
VM_DEFINE_INSTRUCTION (19, object_ref, "object-ref", 1, 0, 1)
|
||||||
{
|
{
|
||||||
register unsigned objnum = FETCH ();
|
register unsigned objnum = FETCH ();
|
||||||
CHECK_OBJECT (objnum);
|
CHECK_OBJECT (objnum);
|
||||||
|
@ -280,7 +246,7 @@ VM_DEFINE_INSTRUCTION (23, object_ref, "object-ref", 1, 0, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: necessary? elt 255 of the vector could be a vector... */
|
/* FIXME: necessary? elt 255 of the vector could be a vector... */
|
||||||
VM_DEFINE_INSTRUCTION (24, long_object_ref, "long-object-ref", 2, 0, 1)
|
VM_DEFINE_INSTRUCTION (20, long_object_ref, "long-object-ref", 2, 0, 1)
|
||||||
{
|
{
|
||||||
unsigned int objnum = FETCH ();
|
unsigned int objnum = FETCH ();
|
||||||
objnum <<= 8;
|
objnum <<= 8;
|
||||||
|
@ -290,14 +256,14 @@ VM_DEFINE_INSTRUCTION (24, long_object_ref, "long-object-ref", 2, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (25, local_ref, "local-ref", 1, 0, 1)
|
VM_DEFINE_INSTRUCTION (21, local_ref, "local-ref", 1, 0, 1)
|
||||||
{
|
{
|
||||||
PUSH (LOCAL_REF (FETCH ()));
|
PUSH (LOCAL_REF (FETCH ()));
|
||||||
ASSERT_BOUND (*sp);
|
ASSERT_BOUND (*sp);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (26, long_local_ref, "long-local-ref", 2, 0, 1)
|
VM_DEFINE_INSTRUCTION (22, long_local_ref, "long-local-ref", 2, 0, 1)
|
||||||
{
|
{
|
||||||
unsigned int i = FETCH ();
|
unsigned int i = FETCH ();
|
||||||
i <<= 8;
|
i <<= 8;
|
||||||
|
@ -307,7 +273,7 @@ VM_DEFINE_INSTRUCTION (26, long_local_ref, "long-local-ref", 2, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (27, variable_ref, "variable-ref", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (23, variable_ref, "variable-ref", 0, 0, 1)
|
||||||
{
|
{
|
||||||
SCM x = *sp;
|
SCM x = *sp;
|
||||||
|
|
||||||
|
@ -326,7 +292,7 @@ VM_DEFINE_INSTRUCTION (27, variable_ref, "variable-ref", 0, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (28, toplevel_ref, "toplevel-ref", 1, 0, 1)
|
VM_DEFINE_INSTRUCTION (24, toplevel_ref, "toplevel-ref", 1, 0, 1)
|
||||||
{
|
{
|
||||||
unsigned objnum = FETCH ();
|
unsigned objnum = FETCH ();
|
||||||
SCM what;
|
SCM what;
|
||||||
|
@ -349,7 +315,7 @@ VM_DEFINE_INSTRUCTION (28, toplevel_ref, "toplevel-ref", 1, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (29, long_toplevel_ref, "long-toplevel-ref", 2, 0, 1)
|
VM_DEFINE_INSTRUCTION (25, long_toplevel_ref, "long-toplevel-ref", 2, 0, 1)
|
||||||
{
|
{
|
||||||
SCM what;
|
SCM what;
|
||||||
unsigned int objnum = FETCH ();
|
unsigned int objnum = FETCH ();
|
||||||
|
@ -376,14 +342,14 @@ VM_DEFINE_INSTRUCTION (29, long_toplevel_ref, "long-toplevel-ref", 2, 0, 1)
|
||||||
|
|
||||||
/* set */
|
/* set */
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (30, local_set, "local-set", 1, 1, 0)
|
VM_DEFINE_INSTRUCTION (26, local_set, "local-set", 1, 1, 0)
|
||||||
{
|
{
|
||||||
LOCAL_SET (FETCH (), *sp);
|
LOCAL_SET (FETCH (), *sp);
|
||||||
DROP ();
|
DROP ();
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (31, long_local_set, "long-local-set", 2, 1, 0)
|
VM_DEFINE_INSTRUCTION (27, long_local_set, "long-local-set", 2, 1, 0)
|
||||||
{
|
{
|
||||||
unsigned int i = FETCH ();
|
unsigned int i = FETCH ();
|
||||||
i <<= 8;
|
i <<= 8;
|
||||||
|
@ -393,14 +359,14 @@ VM_DEFINE_INSTRUCTION (31, long_local_set, "long-local-set", 2, 1, 0)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (32, variable_set, "variable-set", 0, 1, 0)
|
VM_DEFINE_INSTRUCTION (28, variable_set, "variable-set", 0, 1, 0)
|
||||||
{
|
{
|
||||||
VARIABLE_SET (sp[0], sp[-1]);
|
VARIABLE_SET (sp[0], sp[-1]);
|
||||||
DROPN (2);
|
DROPN (2);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (33, toplevel_set, "toplevel-set", 1, 1, 0)
|
VM_DEFINE_INSTRUCTION (29, toplevel_set, "toplevel-set", 1, 1, 0)
|
||||||
{
|
{
|
||||||
unsigned objnum = FETCH ();
|
unsigned objnum = FETCH ();
|
||||||
SCM what;
|
SCM what;
|
||||||
|
@ -419,7 +385,7 @@ VM_DEFINE_INSTRUCTION (33, toplevel_set, "toplevel-set", 1, 1, 0)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (34, long_toplevel_set, "long-toplevel-set", 2, 1, 0)
|
VM_DEFINE_INSTRUCTION (30, long_toplevel_set, "long-toplevel-set", 2, 1, 0)
|
||||||
{
|
{
|
||||||
SCM what;
|
SCM what;
|
||||||
unsigned int objnum = FETCH ();
|
unsigned int objnum = FETCH ();
|
||||||
|
@ -464,7 +430,7 @@ VM_DEFINE_INSTRUCTION (34, long_toplevel_set, "long-toplevel-set", 2, 1, 0)
|
||||||
NEXT; \
|
NEXT; \
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (35, br, "br", 2, 0, 0)
|
VM_DEFINE_INSTRUCTION (31, br, "br", 2, 0, 0)
|
||||||
{
|
{
|
||||||
scm_t_int16 offset;
|
scm_t_int16 offset;
|
||||||
FETCH_OFFSET (offset);
|
FETCH_OFFSET (offset);
|
||||||
|
@ -472,34 +438,34 @@ VM_DEFINE_INSTRUCTION (35, br, "br", 2, 0, 0)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (36, br_if, "br-if", 2, 0, 0)
|
VM_DEFINE_INSTRUCTION (32, br_if, "br-if", 2, 0, 0)
|
||||||
{
|
{
|
||||||
BR (!SCM_FALSEP (*sp));
|
BR (!SCM_FALSEP (*sp));
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (37, br_if_not, "br-if-not", 2, 0, 0)
|
VM_DEFINE_INSTRUCTION (33, br_if_not, "br-if-not", 2, 0, 0)
|
||||||
{
|
{
|
||||||
BR (SCM_FALSEP (*sp));
|
BR (SCM_FALSEP (*sp));
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (38, br_if_eq, "br-if-eq", 2, 0, 0)
|
VM_DEFINE_INSTRUCTION (34, br_if_eq, "br-if-eq", 2, 0, 0)
|
||||||
{
|
{
|
||||||
sp--; /* underflow? */
|
sp--; /* underflow? */
|
||||||
BR (SCM_EQ_P (sp[0], sp[1]));
|
BR (SCM_EQ_P (sp[0], sp[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (39, br_if_not_eq, "br-if-not-eq", 2, 0, 0)
|
VM_DEFINE_INSTRUCTION (35, br_if_not_eq, "br-if-not-eq", 2, 0, 0)
|
||||||
{
|
{
|
||||||
sp--; /* underflow? */
|
sp--; /* underflow? */
|
||||||
BR (!SCM_EQ_P (sp[0], sp[1]));
|
BR (!SCM_EQ_P (sp[0], sp[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (40, br_if_null, "br-if-null", 2, 0, 0)
|
VM_DEFINE_INSTRUCTION (36, br_if_null, "br-if-null", 2, 0, 0)
|
||||||
{
|
{
|
||||||
BR (SCM_NULLP (*sp));
|
BR (SCM_NULLP (*sp));
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (41, br_if_not_null, "br-if-not-null", 2, 0, 0)
|
VM_DEFINE_INSTRUCTION (37, br_if_not_null, "br-if-not-null", 2, 0, 0)
|
||||||
{
|
{
|
||||||
BR (!SCM_NULLP (*sp));
|
BR (!SCM_NULLP (*sp));
|
||||||
}
|
}
|
||||||
|
@ -509,7 +475,7 @@ VM_DEFINE_INSTRUCTION (41, br_if_not_null, "br-if-not-null", 2, 0, 0)
|
||||||
* Subprogram call
|
* Subprogram call
|
||||||
*/
|
*/
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (43, call, "call", 1, -1, 1)
|
VM_DEFINE_INSTRUCTION (38, call, "call", 1, -1, 1)
|
||||||
{
|
{
|
||||||
SCM x;
|
SCM x;
|
||||||
nargs = FETCH ();
|
nargs = FETCH ();
|
||||||
|
@ -533,53 +499,6 @@ VM_DEFINE_INSTRUCTION (43, call, "call", 1, -1, 1)
|
||||||
APPLY_HOOK ();
|
APPLY_HOOK ();
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_TRAMPOLINE
|
|
||||||
/* Seems to slow down the fibo test, dunno why */
|
|
||||||
/*
|
|
||||||
* Subr call
|
|
||||||
*/
|
|
||||||
switch (nargs)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
{
|
|
||||||
scm_t_trampoline_0 call = scm_trampoline_0 (x);
|
|
||||||
if (call)
|
|
||||||
{
|
|
||||||
SYNC_ALL ();
|
|
||||||
*sp = call (x);
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
scm_t_trampoline_1 call = scm_trampoline_1 (x);
|
|
||||||
if (call)
|
|
||||||
{
|
|
||||||
SCM arg1;
|
|
||||||
POP (arg1);
|
|
||||||
SYNC_ALL ();
|
|
||||||
*sp = call (x, arg1);
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
{
|
|
||||||
scm_t_trampoline_2 call = scm_trampoline_2 (x);
|
|
||||||
if (call)
|
|
||||||
{
|
|
||||||
SCM arg1, arg2;
|
|
||||||
POP (arg2);
|
|
||||||
POP (arg1);
|
|
||||||
SYNC_ALL ();
|
|
||||||
*sp = call (x, arg1, arg2);
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
* Other interpreted or compiled call
|
* Other interpreted or compiled call
|
||||||
*/
|
*/
|
||||||
|
@ -605,32 +524,12 @@ VM_DEFINE_INSTRUCTION (43, call, "call", 1, -1, 1)
|
||||||
}
|
}
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Continuation call
|
|
||||||
*/
|
|
||||||
if (SCM_VM_CONT_P (x))
|
|
||||||
{
|
|
||||||
program = x;
|
|
||||||
vm_call_continuation:
|
|
||||||
/* Check the number of arguments */
|
|
||||||
/* FIXME multiple args */
|
|
||||||
if (nargs != 1)
|
|
||||||
scm_wrong_num_args (program);
|
|
||||||
|
|
||||||
/* Reinstate the continuation */
|
|
||||||
EXIT_HOOK ();
|
|
||||||
reinstate_vm_cont (vp, program);
|
|
||||||
CACHE_REGISTER ();
|
|
||||||
program = SCM_FRAME_PROGRAM (fp);
|
|
||||||
CACHE_PROGRAM ();
|
|
||||||
NEXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
program = x;
|
program = x;
|
||||||
goto vm_error_wrong_type_apply;
|
goto vm_error_wrong_type_apply;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (44, goto_args, "goto/args", 1, -1, 1)
|
VM_DEFINE_INSTRUCTION (39, goto_args, "goto/args", 1, -1, 1)
|
||||||
{
|
{
|
||||||
register SCM x;
|
register SCM x;
|
||||||
nargs = FETCH ();
|
nargs = FETCH ();
|
||||||
|
@ -728,54 +627,6 @@ VM_DEFINE_INSTRUCTION (44, goto_args, "goto/args", 1, -1, 1)
|
||||||
APPLY_HOOK ();
|
APPLY_HOOK ();
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_TRAMPOLINE
|
|
||||||
/* This seems to actually slow down the fibo test -- dunno why */
|
|
||||||
/*
|
|
||||||
* Subr call
|
|
||||||
*/
|
|
||||||
switch (nargs)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
{
|
|
||||||
scm_t_trampoline_0 call = scm_trampoline_0 (x);
|
|
||||||
if (call)
|
|
||||||
{
|
|
||||||
SYNC_ALL ();
|
|
||||||
*sp = call (x);
|
|
||||||
goto vm_return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 1:
|
|
||||||
{
|
|
||||||
scm_t_trampoline_1 call = scm_trampoline_1 (x);
|
|
||||||
if (call)
|
|
||||||
{
|
|
||||||
SCM arg1;
|
|
||||||
POP (arg1);
|
|
||||||
SYNC_ALL ();
|
|
||||||
*sp = call (x, arg1);
|
|
||||||
goto vm_return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
{
|
|
||||||
scm_t_trampoline_2 call = scm_trampoline_2 (x);
|
|
||||||
if (call)
|
|
||||||
{
|
|
||||||
SCM arg1, arg2;
|
|
||||||
POP (arg2);
|
|
||||||
POP (arg1);
|
|
||||||
SYNC_ALL ();
|
|
||||||
*sp = call (x, arg1, arg2);
|
|
||||||
goto vm_return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Other interpreted or compiled call
|
* Other interpreted or compiled call
|
||||||
*/
|
*/
|
||||||
|
@ -801,16 +652,10 @@ VM_DEFINE_INSTRUCTION (44, goto_args, "goto/args", 1, -1, 1)
|
||||||
|
|
||||||
program = x;
|
program = x;
|
||||||
|
|
||||||
/*
|
|
||||||
* Continuation call
|
|
||||||
*/
|
|
||||||
if (SCM_VM_CONT_P (program))
|
|
||||||
goto vm_call_continuation;
|
|
||||||
|
|
||||||
goto vm_error_wrong_type_apply;
|
goto vm_error_wrong_type_apply;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (45, goto_nargs, "goto/nargs", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (40, goto_nargs, "goto/nargs", 0, 0, 1)
|
||||||
{
|
{
|
||||||
SCM x;
|
SCM x;
|
||||||
POP (x);
|
POP (x);
|
||||||
|
@ -819,7 +664,7 @@ VM_DEFINE_INSTRUCTION (45, goto_nargs, "goto/nargs", 0, 0, 1)
|
||||||
goto vm_goto_args;
|
goto vm_goto_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (46, call_nargs, "call/nargs", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (41, call_nargs, "call/nargs", 0, 0, 1)
|
||||||
{
|
{
|
||||||
SCM x;
|
SCM x;
|
||||||
POP (x);
|
POP (x);
|
||||||
|
@ -828,7 +673,7 @@ VM_DEFINE_INSTRUCTION (46, call_nargs, "call/nargs", 0, 0, 1)
|
||||||
goto vm_call;
|
goto vm_call;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (47, mv_call, "mv-call", 3, -1, 1)
|
VM_DEFINE_INSTRUCTION (42, mv_call, "mv-call", 3, -1, 1)
|
||||||
{
|
{
|
||||||
SCM x;
|
SCM x;
|
||||||
scm_t_int16 offset;
|
scm_t_int16 offset;
|
||||||
|
@ -878,20 +723,12 @@ VM_DEFINE_INSTRUCTION (47, mv_call, "mv-call", 3, -1, 1)
|
||||||
}
|
}
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* Continuation call
|
|
||||||
*/
|
|
||||||
if (SCM_VM_CONT_P (x))
|
|
||||||
{
|
|
||||||
program = x;
|
|
||||||
goto vm_call_continuation;
|
|
||||||
}
|
|
||||||
|
|
||||||
program = x;
|
program = x;
|
||||||
goto vm_error_wrong_type_apply;
|
goto vm_error_wrong_type_apply;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (48, apply, "apply", 1, -1, 1)
|
VM_DEFINE_INSTRUCTION (43, apply, "apply", 1, -1, 1)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
SCM ls;
|
SCM ls;
|
||||||
|
@ -910,7 +747,7 @@ VM_DEFINE_INSTRUCTION (48, apply, "apply", 1, -1, 1)
|
||||||
goto vm_call;
|
goto vm_call;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (49, goto_apply, "goto/apply", 1, -1, 1)
|
VM_DEFINE_INSTRUCTION (44, goto_apply, "goto/apply", 1, -1, 1)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
SCM ls;
|
SCM ls;
|
||||||
|
@ -929,7 +766,7 @@ VM_DEFINE_INSTRUCTION (49, goto_apply, "goto/apply", 1, -1, 1)
|
||||||
goto vm_goto_args;
|
goto vm_goto_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (50, call_cc, "call/cc", 0, 1, 1)
|
VM_DEFINE_INSTRUCTION (45, call_cc, "call/cc", 0, 1, 1)
|
||||||
{
|
{
|
||||||
int first;
|
int first;
|
||||||
SCM proc, cont;
|
SCM proc, cont;
|
||||||
|
@ -963,7 +800,7 @@ VM_DEFINE_INSTRUCTION (50, call_cc, "call/cc", 0, 1, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (51, goto_cc, "goto/cc", 0, 1, 1)
|
VM_DEFINE_INSTRUCTION (46, goto_cc, "goto/cc", 0, 1, 1)
|
||||||
{
|
{
|
||||||
int first;
|
int first;
|
||||||
SCM proc, cont;
|
SCM proc, cont;
|
||||||
|
@ -995,7 +832,7 @@ VM_DEFINE_INSTRUCTION (51, goto_cc, "goto/cc", 0, 1, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (52, return, "return", 0, 1, 1)
|
VM_DEFINE_INSTRUCTION (47, return, "return", 0, 1, 1)
|
||||||
{
|
{
|
||||||
vm_return:
|
vm_return:
|
||||||
EXIT_HOOK ();
|
EXIT_HOOK ();
|
||||||
|
@ -1033,7 +870,7 @@ VM_DEFINE_INSTRUCTION (52, return, "return", 0, 1, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (53, return_values, "return/values", 1, -1, -1)
|
VM_DEFINE_INSTRUCTION (48, return_values, "return/values", 1, -1, -1)
|
||||||
{
|
{
|
||||||
/* nvalues declared at top level, because for some reason gcc seems to think
|
/* nvalues declared at top level, because for some reason gcc seems to think
|
||||||
that perhaps it might be used without declaration. Fooey to that, I say. */
|
that perhaps it might be used without declaration. Fooey to that, I say. */
|
||||||
|
@ -1093,7 +930,7 @@ VM_DEFINE_INSTRUCTION (53, return_values, "return/values", 1, -1, -1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (54, return_values_star, "return/values*", 1, -1, -1)
|
VM_DEFINE_INSTRUCTION (49, return_values_star, "return/values*", 1, -1, -1)
|
||||||
{
|
{
|
||||||
SCM l;
|
SCM l;
|
||||||
|
|
||||||
|
@ -1116,7 +953,7 @@ VM_DEFINE_INSTRUCTION (54, return_values_star, "return/values*", 1, -1, -1)
|
||||||
goto vm_return_values;
|
goto vm_return_values;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (55, truncate_values, "truncate-values", 2, -1, -1)
|
VM_DEFINE_INSTRUCTION (50, truncate_values, "truncate-values", 2, -1, -1)
|
||||||
{
|
{
|
||||||
SCM x;
|
SCM x;
|
||||||
int nbinds, rest;
|
int nbinds, rest;
|
||||||
|
@ -1139,7 +976,7 @@ VM_DEFINE_INSTRUCTION (55, truncate_values, "truncate-values", 2, -1, -1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (56, box, "box", 1, 1, 0)
|
VM_DEFINE_INSTRUCTION (51, box, "box", 1, 1, 0)
|
||||||
{
|
{
|
||||||
SCM val;
|
SCM val;
|
||||||
POP (val);
|
POP (val);
|
||||||
|
@ -1153,7 +990,7 @@ VM_DEFINE_INSTRUCTION (56, box, "box", 1, 1, 0)
|
||||||
(set! a (lambda () (b ...)))
|
(set! a (lambda () (b ...)))
|
||||||
...)
|
...)
|
||||||
*/
|
*/
|
||||||
VM_DEFINE_INSTRUCTION (57, empty_box, "empty-box", 1, 0, 0)
|
VM_DEFINE_INSTRUCTION (52, empty_box, "empty-box", 1, 0, 0)
|
||||||
{
|
{
|
||||||
SYNC_BEFORE_GC ();
|
SYNC_BEFORE_GC ();
|
||||||
LOCAL_SET (FETCH (),
|
LOCAL_SET (FETCH (),
|
||||||
|
@ -1161,7 +998,7 @@ VM_DEFINE_INSTRUCTION (57, empty_box, "empty-box", 1, 0, 0)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (58, local_boxed_ref, "local-boxed-ref", 1, 0, 1)
|
VM_DEFINE_INSTRUCTION (53, local_boxed_ref, "local-boxed-ref", 1, 0, 1)
|
||||||
{
|
{
|
||||||
SCM v = LOCAL_REF (FETCH ());
|
SCM v = LOCAL_REF (FETCH ());
|
||||||
ASSERT_BOUND_VARIABLE (v);
|
ASSERT_BOUND_VARIABLE (v);
|
||||||
|
@ -1169,7 +1006,7 @@ VM_DEFINE_INSTRUCTION (58, local_boxed_ref, "local-boxed-ref", 1, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (59, local_boxed_set, "local-boxed-set", 1, 1, 0)
|
VM_DEFINE_INSTRUCTION (54, local_boxed_set, "local-boxed-set", 1, 1, 0)
|
||||||
{
|
{
|
||||||
SCM v, val;
|
SCM v, val;
|
||||||
v = LOCAL_REF (FETCH ());
|
v = LOCAL_REF (FETCH ());
|
||||||
|
@ -1179,7 +1016,7 @@ VM_DEFINE_INSTRUCTION (59, local_boxed_set, "local-boxed-set", 1, 1, 0)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (60, free_ref, "free-ref", 1, 0, 1)
|
VM_DEFINE_INSTRUCTION (55, free_ref, "free-ref", 1, 0, 1)
|
||||||
{
|
{
|
||||||
scm_t_uint8 idx = FETCH ();
|
scm_t_uint8 idx = FETCH ();
|
||||||
|
|
||||||
|
@ -1190,7 +1027,7 @@ VM_DEFINE_INSTRUCTION (60, free_ref, "free-ref", 1, 0, 1)
|
||||||
|
|
||||||
/* no free-set -- if a var is assigned, it should be in a box */
|
/* no free-set -- if a var is assigned, it should be in a box */
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (61, free_boxed_ref, "free-boxed-ref", 1, 0, 1)
|
VM_DEFINE_INSTRUCTION (56, free_boxed_ref, "free-boxed-ref", 1, 0, 1)
|
||||||
{
|
{
|
||||||
SCM v;
|
SCM v;
|
||||||
scm_t_uint8 idx = FETCH ();
|
scm_t_uint8 idx = FETCH ();
|
||||||
|
@ -1201,7 +1038,7 @@ VM_DEFINE_INSTRUCTION (61, free_boxed_ref, "free-boxed-ref", 1, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (62, free_boxed_set, "free-boxed-set", 1, 1, 0)
|
VM_DEFINE_INSTRUCTION (57, free_boxed_set, "free-boxed-set", 1, 1, 0)
|
||||||
{
|
{
|
||||||
SCM v, val;
|
SCM v, val;
|
||||||
scm_t_uint8 idx = FETCH ();
|
scm_t_uint8 idx = FETCH ();
|
||||||
|
@ -1213,7 +1050,7 @@ VM_DEFINE_INSTRUCTION (62, free_boxed_set, "free-boxed-set", 1, 1, 0)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (63, make_closure, "make-closure", 0, 2, 1)
|
VM_DEFINE_INSTRUCTION (58, make_closure, "make-closure", 0, 2, 1)
|
||||||
{
|
{
|
||||||
SCM vect;
|
SCM vect;
|
||||||
POP (vect);
|
POP (vect);
|
||||||
|
@ -1224,7 +1061,7 @@ VM_DEFINE_INSTRUCTION (63, make_closure, "make-closure", 0, 2, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (64, make_variable, "make-variable", 0, 0, 1)
|
VM_DEFINE_INSTRUCTION (59, make_variable, "make-variable", 0, 0, 1)
|
||||||
{
|
{
|
||||||
SYNC_BEFORE_GC ();
|
SYNC_BEFORE_GC ();
|
||||||
/* fixme underflow */
|
/* fixme underflow */
|
||||||
|
@ -1232,7 +1069,7 @@ VM_DEFINE_INSTRUCTION (64, make_variable, "make-variable", 0, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (65, fix_closure, "fix-closure", 2, 0, 1)
|
VM_DEFINE_INSTRUCTION (60, fix_closure, "fix-closure", 2, 0, 1)
|
||||||
{
|
{
|
||||||
SCM x, vect;
|
SCM x, vect;
|
||||||
unsigned int i = FETCH ();
|
unsigned int i = FETCH ();
|
||||||
|
@ -1246,7 +1083,7 @@ VM_DEFINE_INSTRUCTION (65, fix_closure, "fix-closure", 2, 0, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (66, define, "define", 0, 0, 2)
|
VM_DEFINE_INSTRUCTION (61, define, "define", 0, 0, 2)
|
||||||
{
|
{
|
||||||
SCM sym, val;
|
SCM sym, val;
|
||||||
POP (sym);
|
POP (sym);
|
||||||
|
@ -1258,7 +1095,7 @@ VM_DEFINE_INSTRUCTION (66, define, "define", 0, 0, 2)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (67, make_keyword, "make-keyword", 0, 1, 1)
|
VM_DEFINE_INSTRUCTION (62, make_keyword, "make-keyword", 0, 1, 1)
|
||||||
{
|
{
|
||||||
CHECK_UNDERFLOW ();
|
CHECK_UNDERFLOW ();
|
||||||
SYNC_REGISTER ();
|
SYNC_REGISTER ();
|
||||||
|
@ -1266,7 +1103,7 @@ VM_DEFINE_INSTRUCTION (67, make_keyword, "make-keyword", 0, 1, 1)
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_DEFINE_INSTRUCTION (68, make_symbol, "make-symbol", 0, 1, 1)
|
VM_DEFINE_INSTRUCTION (63, make_symbol, "make-symbol", 0, 1, 1)
|
||||||
{
|
{
|
||||||
CHECK_UNDERFLOW ();
|
CHECK_UNDERFLOW ();
|
||||||
SYNC_REGISTER ();
|
SYNC_REGISTER ();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue