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:
parent
b636cdb0f3
commit
9121d9f1ac
8 changed files with 22 additions and 28 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 *,
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
®isters);
|
||||
NEXT (3);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue