1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

Change SCM_PACK_RTL macros to SCM_PACK_OP / SCM_PACK_OP_ARG

* libguile/instructions.h: Guard in BUILDING_LIBGUILE.
  (SCM_PACK_OP_24):
  (SCM_PACK_OP_8_8_8):
  (SCM_PACK_OP_8_16):
  (SCM_PACK_OP_16_8):
  (SCM_PACK_OP_12_12): Rename from SCM_PACK_RTL_*, and splice in the
  opcode.
  (SCM_PACK_OP_ARG_8_24): New helper.

* libguile/vm.c:
* libguile/gsubr.c:
* libguile/foreign.c:
* libguile/control.c:
* libguile/continuations.c: Adapt.
This commit is contained in:
Andy Wingo 2013-11-19 21:04:24 +01:00
parent 3fe96dd808
commit 095100bbdb
6 changed files with 48 additions and 43 deletions

View file

@ -65,7 +65,7 @@ static scm_t_bits tc16_continuation;
static const scm_t_uint32 continuation_stub_code[] =
{
SCM_PACK_RTL_24 (scm_op_continuation_call, 0)
SCM_PACK_OP_24 (continuation_call, 0)
};
static SCM

View file

@ -59,7 +59,7 @@ scm_i_prompt_pop_abort_args_x (SCM vm)
static const scm_t_uint32 compose_continuation_code[] =
{
SCM_PACK_RTL_24 (scm_op_compose_continuation, 0)
SCM_PACK_OP_24 (compose_continuation, 0)
};

View file

@ -766,8 +766,8 @@ SCM_DEFINE (scm_pointer_to_procedure, "pointer->procedure", 3, 0, 0,
/* We support calling foreign functions with up to 100 arguments. */
#define CODE(nreq) \
SCM_PACK_RTL_24 (scm_op_assert_nargs_ee, nreq + 1), \
SCM_PACK_RTL_12_12 (scm_op_foreign_call, 0, 1)
SCM_PACK_OP_24 (assert_nargs_ee, nreq + 1), \
SCM_PACK_OP_12_12 (foreign_call, 0, 1)
#define CODE_10(n) \
CODE (n + 0), CODE (n + 1), CODE (n + 2), CODE (n + 3), CODE (n + 4), \

View file

@ -75,45 +75,45 @@
/* A: req; B: opt; C: rest */
#define A(nreq) \
SCM_PACK_RTL_24 (scm_op_assert_nargs_ee, nreq + 1), \
SCM_PACK_RTL_24 (scm_op_subr_call, 0), \
SCM_PACK_OP_24 (assert_nargs_ee, nreq + 1), \
SCM_PACK_OP_24 (subr_call, 0), \
0, \
0
#define B(nopt) \
SCM_PACK_RTL_24 (scm_op_assert_nargs_le, nopt + 1), \
SCM_PACK_RTL_24 (scm_op_alloc_frame, nopt + 1), \
SCM_PACK_RTL_24 (scm_op_subr_call, 0), \
SCM_PACK_OP_24 (assert_nargs_le, nopt + 1), \
SCM_PACK_OP_24 (alloc_frame, nopt + 1), \
SCM_PACK_OP_24 (subr_call, 0), \
0
#define C() \
SCM_PACK_RTL_24 (scm_op_bind_rest, 1), \
SCM_PACK_RTL_24 (scm_op_subr_call, 0), \
SCM_PACK_OP_24 (bind_rest, 1), \
SCM_PACK_OP_24 (subr_call, 0), \
0, \
0
#define AB(nreq, nopt) \
SCM_PACK_RTL_24 (scm_op_assert_nargs_ge, nreq + 1), \
SCM_PACK_RTL_24 (scm_op_assert_nargs_le, nreq + nopt + 1), \
SCM_PACK_RTL_24 (scm_op_alloc_frame, nreq + nopt + 1), \
SCM_PACK_RTL_24 (scm_op_subr_call, 0)
SCM_PACK_OP_24 (assert_nargs_ge, nreq + 1), \
SCM_PACK_OP_24 (assert_nargs_le, nreq + nopt + 1), \
SCM_PACK_OP_24 (alloc_frame, nreq + nopt + 1), \
SCM_PACK_OP_24 (subr_call, 0)
#define AC(nreq) \
SCM_PACK_RTL_24 (scm_op_assert_nargs_ge, nreq + 1), \
SCM_PACK_RTL_24 (scm_op_bind_rest, nreq + 1), \
SCM_PACK_RTL_24 (scm_op_subr_call, 0), \
SCM_PACK_OP_24 (assert_nargs_ge, nreq + 1), \
SCM_PACK_OP_24 (bind_rest, nreq + 1), \
SCM_PACK_OP_24 (subr_call, 0), \
0
#define BC(nopt) \
SCM_PACK_RTL_24 (scm_op_bind_rest, nopt + 1), \
SCM_PACK_RTL_24 (scm_op_subr_call, 0), \
SCM_PACK_OP_24 (bind_rest, nopt + 1), \
SCM_PACK_OP_24 (subr_call, 0), \
0, \
0
#define ABC(nreq, nopt) \
SCM_PACK_RTL_24 (scm_op_assert_nargs_ge, nreq + 1), \
SCM_PACK_RTL_24 (scm_op_bind_rest, nreq + nopt + 1), \
SCM_PACK_RTL_24 (scm_op_subr_call, 0), \
SCM_PACK_OP_24 (assert_nargs_ge, nreq + 1), \
SCM_PACK_OP_24 (bind_rest, nreq + nopt + 1), \
SCM_PACK_OP_24 (subr_call, 0), \
0

View file

@ -22,6 +22,8 @@
#include <libguile.h>
#include <libguile/vm-operations.h>
#ifdef BUILDING_LIBGUILE
enum scm_opcode
{
#define ENUM(opcode, tag, name, meta) scm_op_##tag = opcode,
@ -29,11 +31,12 @@ enum scm_opcode
#undef ENUM
};
#define SCM_PACK_RTL_8_8_8(op,a,b,c) ((op) | ((a) << 8) | ((b) << 16) | ((c) << 24))
#define SCM_PACK_RTL_8_16(op,a,b) ((op) | ((a) << 8) | ((b) << 16))
#define SCM_PACK_RTL_16_8(op,a,b) ((op) | ((a) << 8) | ((b) << 24))
#define SCM_PACK_RTL_12_12(op,a,b) ((op) | ((a) << 8) | ((b) << 20))
#define SCM_PACK_RTL_24(op,a) ((op) | ((a) << 8))
#define SCM_PACK_OP_24(op,arg) (scm_op_##op | (arg) << 8)
#define SCM_PACK_OP_8_8_8(op,a,b,c) SCM_PACK_OP_24 (op, (a) | ((b) << 8) | ((c) << 16))
#define SCM_PACK_OP_8_16(op,a,b) SCM_PACK_OP_24 (op, (a) | (b) << 8)
#define SCM_PACK_OP_16_8(op,a,b) SCM_PACK_OP_24 (op, (a) | (b) << 16)
#define SCM_PACK_OP_12_12(op,a,b) SCM_PACK_OP_24 (op, (a) | (b) << 12)
#define SCM_PACK_OP_ARG_8_24(a,b) ((a) | ((b) << 8))
#define SCM_UNPACK_RTL_8_8_8(op,a,b,c) \
do \
@ -78,6 +81,8 @@ enum scm_opcode
#define SCM_VM_NUM_INSTRUCTIONS (1<<8)
#define SCM_VM_INSTRUCTION_MASK (SCM_VM_NUM_INSTRUCTIONS-1)
#endif /* BUILDING_LIBGUILE */
SCM_INTERNAL SCM scm_instruction_list (void);
SCM_INTERNAL void scm_bootstrap_instructions (void);

View file

@ -600,37 +600,37 @@ static SCM vm_builtin_call_with_values;
static SCM vm_builtin_call_with_current_continuation;
static const scm_t_uint32 vm_boot_continuation_code[] = {
SCM_PACK_RTL_24 (scm_op_halt, 0)
SCM_PACK_OP_24 (halt, 0)
};
static const scm_t_uint32 vm_builtin_apply_code[] = {
SCM_PACK_RTL_24 (scm_op_assert_nargs_ge, 3),
SCM_PACK_RTL_24 (scm_op_tail_apply, 0), /* proc in r1, args from r2 */
SCM_PACK_OP_24 (assert_nargs_ge, 3),
SCM_PACK_OP_24 (tail_apply, 0), /* proc in r1, args from r2 */
};
static const scm_t_uint32 vm_builtin_values_code[] = {
SCM_PACK_RTL_24 (scm_op_return_values, 0) /* vals from r1 */
SCM_PACK_OP_24 (return_values, 0) /* vals from r1 */
};
static const scm_t_uint32 vm_builtin_abort_to_prompt_code[] = {
SCM_PACK_RTL_24 (scm_op_assert_nargs_ge, 2),
SCM_PACK_RTL_24 (scm_op_abort, 0), /* tag in r1, vals from r2 */
SCM_PACK_OP_24 (assert_nargs_ge, 2),
SCM_PACK_OP_24 (abort, 0), /* tag in r1, vals from r2 */
/* FIXME: Partial continuation should capture caller regs. */
SCM_PACK_RTL_24 (scm_op_return_values, 0) /* vals from r1 */
SCM_PACK_OP_24 (return_values, 0) /* vals from r1 */
};
static const scm_t_uint32 vm_builtin_call_with_values_code[] = {
SCM_PACK_RTL_24 (scm_op_assert_nargs_ee, 3),
SCM_PACK_RTL_24 (scm_op_alloc_frame, 7),
SCM_PACK_RTL_12_12 (scm_op_mov, 6, 1),
SCM_PACK_RTL_24 (scm_op_call, 6), SCM_PACK_RTL_24 (0, 1),
SCM_PACK_RTL_12_12 (scm_op_mov, 0, 2),
SCM_PACK_RTL_24 (scm_op_tail_call_shuffle, 7)
SCM_PACK_OP_24 (assert_nargs_ee, 3),
SCM_PACK_OP_24 (alloc_frame, 7),
SCM_PACK_OP_12_12 (mov, 6, 1),
SCM_PACK_OP_24 (call, 6), SCM_PACK_OP_ARG_8_24 (0, 1),
SCM_PACK_OP_12_12 (mov, 0, 2),
SCM_PACK_OP_24 (tail_call_shuffle, 7)
};
static const scm_t_uint32 vm_builtin_call_with_current_continuation_code[] = {
SCM_PACK_RTL_24 (scm_op_assert_nargs_ee, 2),
SCM_PACK_RTL_24 (scm_op_call_cc, 0)
SCM_PACK_OP_24 (assert_nargs_ee, 2),
SCM_PACK_OP_24 (call_cc, 0)
};