All instruction pointers are now scm_t_uint32*
authorAndy Wingo <wingo@pobox.com>
Tue, 19 Nov 2013 17:09:34 +0000 (18:09 +0100)
committerAndy Wingo <wingo@pobox.com>
Tue, 19 Nov 2013 17:09:34 +0000 (18:09 +0100)
* 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.

libguile/control.c
libguile/dynstack.c
libguile/dynstack.h
libguile/frames.c
libguile/frames.h
libguile/vm-engine.c
libguile/vm.c
libguile/vm.h

index 3e5c0d8..4b51edf 100644 (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;
 
index 5f19a2b..2d8895e 100644 (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;
index 08e36a2..fe5bb54 100644 (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 *,
index 8ca628a..a96b133 100644 (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");
index bc52165..d425b94 100644 (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 */
 };
 
@@ -132,14 +132,6 @@ struct scm_vm_frame
 #define SCM_FRAME_PROGRAM(fp) (SCM_FRAME_LOCAL (fp, 0))
 
 \f
-
-/* 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))
-
-\f
 /*
  * 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);
index 7fe7893..3d689f7 100644 (file)
    exception.  */
 
 #define SYNC_IP() \
-  vp->ip = (scm_t_uint8 *) (ip)
+  vp->ip = (ip)
 
 #define SYNC_REGISTER() \
   SYNC_IP()
     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);
     }
index b083d06..e2e4606 100644 (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;
index 7012eef..c678e42 100644 (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,