1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 03:30:27 +02:00

All instruction pointers are now scm_t_uint32*

* libguile/frames.h (SCM_FRAME_RTL_RETURN_ADDRESS)
  (SCM_FRAME_SET_RTL_RETURN_ADDRESS): Remove.  The variants without _RTL
  now work fine.
  (struct scm_vm_frame): Change the return address to be a
  scm_t_uint32*.
  (struct scm_frame): Change IP to be scm_t_uint32*.

* libguile/frames.c (scm_c_make_frame)
* libguile/control.c (reify_partial_continuation, scm_c_abort)
* libguile/dynstack.c (PROMPT_IP)
  (scm_dynstack_push_prompt, scm_dynstack_find_prompt)
* libguile/dynstack.h:
* libguile/vm-engine.c (SYNC_IP, RETURN_ONE_VALUE)
  (call, return-values, prompt): Adapt.
This commit is contained in:
Andy Wingo 2013-11-19 18:09:34 +01:00
parent b636cdb0f3
commit 9121d9f1ac
8 changed files with 22 additions and 28 deletions

View file

@ -79,7 +79,9 @@ make_partial_continuation (SCM vm_cont)
static SCM
reify_partial_continuation (SCM vm,
SCM *saved_fp, SCM *saved_sp, scm_t_uint8 *saved_ip,
SCM *saved_fp,
SCM *saved_sp,
scm_t_uint32 *saved_ip,
scm_i_jmp_buf *saved_registers,
scm_t_dynstack *dynstack,
scm_i_jmp_buf *current_registers)
@ -128,7 +130,7 @@ scm_c_abort (SCM vm, SCM tag, size_t n, SCM *argv,
scm_t_bits *prompt;
scm_t_dynstack_prompt_flags flags;
SCM *fp, *sp;
scm_t_uint8 *ip;
scm_t_uint32 *ip;
scm_i_jmp_buf *registers;
size_t i;

View file

@ -38,7 +38,7 @@
#define PROMPT_KEY(top) (SCM_PACK ((top)[0]))
#define PROMPT_FP(top) ((SCM *) ((top)[1]))
#define PROMPT_SP(top) ((SCM *) ((top)[2]))
#define PROMPT_IP(top) ((scm_t_uint8 *) ((top)[3]))
#define PROMPT_IP(top) ((scm_t_uint32 *) ((top)[3]))
#define PROMPT_JMPBUF(top) ((scm_i_jmp_buf *) ((top)[4]))
#define WINDER_WORDS 2
@ -186,7 +186,7 @@ void
scm_dynstack_push_prompt (scm_t_dynstack *dynstack,
scm_t_dynstack_prompt_flags flags,
SCM key,
SCM *fp, SCM *sp, scm_t_uint8 *ip,
SCM *fp, SCM *sp, scm_t_uint32 *ip,
scm_i_jmp_buf *registers)
{
scm_t_bits *words;
@ -442,7 +442,7 @@ scm_dynstack_unwind_fork (scm_t_dynstack *dynstack, scm_t_dynstack *branch)
scm_t_bits*
scm_dynstack_find_prompt (scm_t_dynstack *dynstack, SCM key,
scm_t_dynstack_prompt_flags *flags,
SCM **fp, SCM **sp, scm_t_uint8 **ip,
SCM **fp, SCM **sp, scm_t_uint32 **ip,
scm_i_jmp_buf **registers)
{
scm_t_bits *walk;

View file

@ -155,7 +155,7 @@ SCM_INTERNAL void scm_dynstack_push_fluid (scm_t_dynstack *,
SCM_INTERNAL void scm_dynstack_push_prompt (scm_t_dynstack *,
scm_t_dynstack_prompt_flags,
SCM key,
SCM *fp, SCM *sp, scm_t_uint8 *ip,
SCM *fp, SCM *sp, scm_t_uint32 *ip,
scm_i_jmp_buf *registers);
SCM_INTERNAL void scm_dynstack_push_dynwind (scm_t_dynstack *,
SCM enter, SCM leave);
@ -191,7 +191,7 @@ SCM_INTERNAL void scm_dynstack_unwind_fluid (scm_t_dynstack *dynstack,
SCM_INTERNAL scm_t_bits* scm_dynstack_find_prompt (scm_t_dynstack *, SCM,
scm_t_dynstack_prompt_flags *,
SCM **, SCM **, scm_t_uint8 **,
SCM **, SCM **, scm_t_uint32 **,
scm_i_jmp_buf **);
SCM_INTERNAL void scm_dynstack_wind_prompt (scm_t_dynstack *, scm_t_bits *,

View file

@ -37,7 +37,7 @@ verify (offsetof (struct scm_vm_frame, dynamic_link) == 0);
SCM
scm_c_make_frame (SCM stack_holder, SCM *fp, SCM *sp,
scm_t_uint8 *ip, scm_t_ptrdiff offset)
scm_t_uint32 *ip, scm_t_ptrdiff offset)
{
struct scm_frame *p = scm_gc_malloc (sizeof (struct scm_frame),
"vmframe");

View file

@ -85,7 +85,7 @@
struct scm_vm_frame
{
SCM *dynamic_link;
scm_t_uint8 *return_address;
scm_t_uint32 *return_address;
SCM locals[1]; /* Variable-length */
};
@ -131,14 +131,6 @@ struct scm_vm_frame
#define SCM_FRAME_PROGRAM(fp) (SCM_FRAME_LOCAL (fp, 0))
/* FIXME: Replace SCM_FRAME_RETURN_ADDRESS with these. */
#define SCM_FRAME_RTL_RETURN_ADDRESS(fp) \
((scm_t_uint32 *) SCM_FRAME_RETURN_ADDRESS (fp))
#define SCM_FRAME_SET_RTL_RETURN_ADDRESS(fp, ip) \
SCM_FRAME_SET_RETURN_ADDRESS (fp, (scm_t_uint8 *) (ip))
/*
* Heap frames
@ -149,7 +141,7 @@ struct scm_frame
SCM stack_holder;
SCM *fp;
SCM *sp;
scm_t_uint8 *ip;
scm_t_uint32 *ip;
scm_t_ptrdiff offset;
};
@ -163,7 +155,7 @@ struct scm_frame
#define SCM_VALIDATE_VM_FRAME(p,x) SCM_MAKE_VALIDATE (p, x, VM_FRAME_P)
SCM_API SCM scm_c_make_frame (SCM stack_holder, SCM *fp, SCM *sp,
scm_t_uint8 *ip, scm_t_ptrdiff offset);
scm_t_uint32 *ip, scm_t_ptrdiff offset);
SCM_API SCM scm_frame_p (SCM obj);
SCM_API SCM scm_frame_procedure (SCM frame);
SCM_API SCM scm_frame_arguments (SCM frame);

View file

@ -130,7 +130,7 @@
exception. */
#define SYNC_IP() \
vp->ip = (scm_t_uint8 *) (ip)
vp->ip = (ip)
#define SYNC_REGISTER() \
SYNC_IP()
@ -230,7 +230,7 @@
SCM val = ret; \
SCM *old_fp = fp; \
VM_HANDLE_INTERRUPTS; \
ip = SCM_FRAME_RTL_RETURN_ADDRESS (fp); \
ip = SCM_FRAME_RETURN_ADDRESS (fp); \
fp = vp->fp = SCM_FRAME_DYNAMIC_LINK (fp); \
/* Clear frame. */ \
old_fp[-1] = SCM_BOOL_F; \
@ -577,7 +577,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
fp = vp->fp = old_fp + proc;
SCM_FRAME_SET_DYNAMIC_LINK (fp, old_fp);
SCM_FRAME_SET_RTL_RETURN_ADDRESS (fp, ip + 2);
SCM_FRAME_SET_RETURN_ADDRESS (fp, ip + 2);
RESET_FRAME (nlocals);
@ -712,7 +712,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
SCM *old_fp = fp;
VM_HANDLE_INTERRUPTS;
ip = SCM_FRAME_RTL_RETURN_ADDRESS (fp);
ip = SCM_FRAME_RETURN_ADDRESS (fp);
fp = vp->fp = SCM_FRAME_DYNAMIC_LINK (fp);
/* Clear stack frame. */
@ -2012,7 +2012,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_)
LOCAL_REF (tag),
fp,
LOCAL_ADDRESS (proc_slot),
(scm_t_uint8 *)(ip + offset),
ip + offset,
&registers);
NEXT (3);
}

View file

@ -103,7 +103,7 @@ scm_i_vm_cont_print (SCM x, SCM port, scm_print_state *pstate)
call to vm_run; but that's currently not implemented.
*/
SCM
scm_i_vm_capture_stack (SCM *stack_base, SCM *fp, SCM *sp, scm_t_uint8 *ra,
scm_i_vm_capture_stack (SCM *stack_base, SCM *fp, SCM *sp, scm_t_uint32 *ra,
scm_t_dynstack *dynstack, scm_t_uint32 flags)
{
struct scm_vm_cont *p;

View file

@ -41,7 +41,7 @@ typedef SCM (*scm_t_vm_engine) (SCM vm, SCM program, SCM *argv, int nargs);
#define SCM_VM_NUM_ENGINES 2
struct scm_vm {
scm_t_uint8 *ip; /* instruction pointer */
scm_t_uint32 *ip; /* instruction pointer */
SCM *sp; /* stack pointer */
SCM *fp; /* frame pointer */
size_t stack_size; /* stack size */
@ -88,7 +88,7 @@ SCM_API void scm_c_set_default_vm_engine_x (int engine);
struct scm_vm_cont {
SCM *sp;
SCM *fp;
scm_t_uint8 *ra;
scm_t_uint32 *ra;
scm_t_ptrdiff stack_size;
SCM *stack_base;
scm_t_ptrdiff reloc;
@ -110,7 +110,7 @@ SCM_INTERNAL void scm_i_vm_print (SCM x, SCM port,
SCM_INTERNAL SCM scm_i_call_with_current_continuation (SCM proc);
SCM_INTERNAL SCM scm_i_capture_current_stack (void);
SCM_INTERNAL SCM scm_i_vm_capture_stack (SCM *stack_base, SCM *fp, SCM *sp,
scm_t_uint8 *ra,
scm_t_uint32 *ra,
scm_t_dynstack *dynstack,
scm_t_uint32 flags);
SCM_INTERNAL void scm_i_vm_cont_print (SCM x, SCM port,