Make bchscheme work with address relocation.
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Mon, 23 Aug 1993 02:22:09 +0000 (02:22 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Mon, 23 Aug 1993 02:22:09 +0000 (02:22 +0000)
v7/src/microcode/bchdmp.c
v7/src/microcode/bchgcc.h
v7/src/microcode/bchgcl.c
v7/src/microcode/bchpur.c
v7/src/microcode/cmpintmd/i386.h

index 597818dbadaf65658d29aa45053c2e4fea5ec479..2fc48a18c33bd6f4e38df10d921222a18dd85a23 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: bchdmp.c,v 9.70 1993/06/24 03:47:00 gjr Exp $
+$Id: bchdmp.c,v 9.71 1993/08/23 02:20:41 gjr Exp $
 
 Copyright (c) 1987-1993 Massachusetts Institute of Technology
 
@@ -53,7 +53,7 @@ DEFUN (mktemp, (fname), unsigned char * fname)
 {
   /* Should call tmpname */
 
-  return;
+  return ((char *) fname);
 }
 
 #  define FASDUMP_FILENAME "\\tmp\\fasdump.bin"
@@ -64,13 +64,7 @@ DEFUN (mktemp, (fname), unsigned char * fname)
 #  include "nt.h"
 #  include "ntio.h"
 
-char *
-DEFUN (mktemp, (fname), unsigned char * fname)
-{
-  /* Should call tmpname */
-
-  return;
-}
+extern char * mktemp (char *);
 
 #  define FASDUMP_FILENAME "\\tmp\\fasdump.bin"
 
@@ -122,9 +116,7 @@ static Boolean compiled_code_present_p;
 #define fasdump_remember_to_fix(location, contents)                    \
 {                                                                      \
   if ((fixup == fixup_buffer) && (!(reset_fixes ())))                  \
-  {                                                                    \
     return (PRIM_INTERRUPT);                                           \
-  }                                                                    \
   *--fixup = contents;                                                 \
   *--fixup = ((SCHEME_OBJECT) location);                               \
 }
@@ -132,9 +124,9 @@ static Boolean compiled_code_present_p;
 #define fasdump_normal_setup()                                         \
 {                                                                      \
   Old = (OBJECT_ADDRESS (Temp));                                       \
-  if ((OBJECT_TYPE (*Old)) == TC_BROKEN_HEART)                         \
+  if (BROKEN_HEART_P (* Old))                                          \
   {                                                                    \
-    *Scan = (MAKE_OBJECT_FROM_OBJECTS (Temp, *Old));                   \
+    (* Scan) = (MAKE_OBJECT_FROM_OBJECTS (Temp, (* Old)));             \
     continue;                                                          \
   }                                                                    \
   New_Address = (MAKE_BROKEN_HEART (To_Address));                      \
@@ -146,14 +138,14 @@ static Boolean compiled_code_present_p;
 #define fasdump_flonum_setup()                                         \
 {                                                                      \
   Old = (OBJECT_ADDRESS (Temp));                                       \
-  if ((OBJECT_TYPE (*Old)) == TC_BROKEN_HEART)                         \
+  if (BROKEN_HEART_P (* Old))                                          \
   {                                                                    \
-    *Scan = (MAKE_OBJECT_FROM_OBJECTS (Temp, *Old));                   \
+    (* Scan) = (MAKE_OBJECT_FROM_OBJECTS (Temp, (* Old)));             \
     continue;                                                          \
   }                                                                    \
   FLOAT_ALIGN_FREE (To_Address, To);                                   \
   New_Address = (MAKE_BROKEN_HEART (To_Address));                      \
-  fasdump_remember_to_fix (Old, *Old);                                 \
+  fasdump_remember_to_fix (Old, (* Old));                              \
 }
 
 #else /* FLOATING_ALIGNMENT */
@@ -169,10 +161,8 @@ static Boolean compiled_code_present_p;
   {                                                                    \
     To = (dump_and_reset_free_buffer ((To - free_buffer_top),          \
                                      &success));                       \
-    if (!success)                                                      \
-    {                                                                  \
+    if (! success)                                                     \
       return (PRIM_INTERRUPT);                                         \
-    }                                                                  \
   }                                                                    \
 }
 
@@ -184,8 +174,8 @@ static Boolean compiled_code_present_p;
 
 #define fasdump_normal_end()                                           \
 {                                                                      \
-  *(OBJECT_ADDRESS (Temp)) = New_Address;                              \
-  *Scan = (MAKE_OBJECT_FROM_OBJECTS (Temp, New_Address));              \
+  (* (OBJECT_ADDRESS (Temp))) = New_Address;                           \
+  (* Scan) = (MAKE_OBJECT_FROM_OBJECTS (Temp, New_Address));           \
   continue;                                                            \
 }
 
@@ -198,20 +188,20 @@ static Boolean compiled_code_present_p;
 \f
 #define fasdump_typeless_setup()                                       \
 {                                                                      \
-  Old = ((SCHEME_OBJECT *) Temp);                                      \
-  if (OBJECT_TYPE (*Old) == TC_BROKEN_HEART)                           \
+  Old = (SCHEME_ADDR_TO_ADDR (Temp));                                  \
+  if (BROKEN_HEART_P (* Old))                                          \
   {                                                                    \
-    *Scan = ((SCHEME_OBJECT) OBJECT_ADDRESS (*Old));                   \
+    (* Scan) = (ADDR_TO_SCHEME_ADDR (OBJECT_ADDRESS (* Old)));         \
     continue;                                                          \
   }                                                                    \
   New_Address = ((SCHEME_OBJECT) To_Address);                          \
-  fasdump_remember_to_fix (Old, *Old);                                 \
+  fasdump_remember_to_fix (Old, (* Old));                              \
 }
 
 #define fasdump_typeless_end()                                         \
 {                                                                      \
-  (* (OBJECT_ADDRESS (Temp))) = (MAKE_BROKEN_HEART (New_Address));     \
-  *Scan = ((SCHEME_OBJECT) New_Address);                               \
+  (* (SCHEME_ADDR_TO_ADDR (Temp))) = (MAKE_BROKEN_HEART (New_Address));        \
+  (* Scan) = (ADDR_TO_SCHEME_ADDR (New_Address));                      \
   continue;                                                            \
 }
 
@@ -222,43 +212,41 @@ static Boolean compiled_code_present_p;
   fasdump_typeless_end ();                                             \
 }
 
-#define fasdump_compiled_entry()                                       \
-do {                                                                   \
+#define fasdump_compiled_entry() do                                    \
+{                                                                      \
   compiled_code_present_p = true;                                      \
-  Old = OBJECT_ADDRESS (Temp);                                         \
+  Old = (OBJECT_ADDRESS (Temp));                                       \
   Compiled_BH (false, continue);                                       \
   {                                                                    \
-    SCHEME_OBJECT *Saved_Old = Old;                                    \
+    SCHEME_OBJECT * Saved_Old = Old;                                   \
                                                                        \
-    fasdump_remember_to_fix (Old, *Old);                               \
+    fasdump_remember_to_fix (Old, (* Old));                            \
     New_Address = (MAKE_BROKEN_HEART (To_Address));                    \
     copy_vector (&success);                                            \
     if (!success)                                                      \
-    {                                                                  \
       return (PRIM_INTERRUPT);                                         \
-    }                                                                  \
-    *Saved_Old = New_Address;                                          \
+    (* Saved_Old) = New_Address;                                       \
     Temp = RELOCATE_COMPILED (Temp, (OBJECT_ADDRESS (New_Address)),    \
                              Saved_Old);                               \
     continue;                                                          \
   }                                                                    \
-} while (false)
+} while (0)
 
-#define fasdump_linked_operator()                                      \
+#define fasdump_linked_operator() do                                   \
 {                                                                      \
   Scan = ((SCHEME_OBJECT *) (word_ptr));                               \
   BCH_EXTRACT_OPERATOR_LINKAGE_ADDRESS (Temp, Scan);                   \
   fasdump_compiled_entry ();                                           \
   BCH_STORE_OPERATOR_LINKAGE_ADDRESS (Temp, Scan);                     \
-}
+} while (0)
 
-#define fasdump_manifest_closure()                                     \
+#define fasdump_manifest_closure() do                                  \
 {                                                                      \
   Scan = ((SCHEME_OBJECT *) (word_ptr));                               \
   BCH_EXTRACT_CLOSURE_ENTRY_ADDRESS (Temp, Scan);                      \
   fasdump_compiled_entry ();                                           \
   BCH_STORE_CLOSURE_ENTRY_ADDRESS (Temp, Scan);                                \
-}
+} while (0)
 \f
 int
 DEFUN (eta_read, (fid, buffer, size),
@@ -277,7 +265,7 @@ DEFUN (eta_write, (fid, buffer, size),
 Boolean
 DEFUN (fasdump_exit, (length), long length)
 {
-  fast SCHEME_OBJECT *fixes, *fix_address;
+  fast SCHEME_OBJECT * fixes, * fix_address;
   Boolean result;
 
   Free = saved_free;
@@ -316,9 +304,7 @@ DEFUN (fasdump_exit, (length), long length)
 #endif /* HAVE_TRUNCATE */
 
   if (length == 0)
-  {
     (void) (unlink (dump_file_name));
-  }
   dump_file_name = ((char *) NULL);
 
   fixes = fixup;
@@ -327,8 +313,8 @@ next_buffer:
 
   while (fixes != fixup_buffer_end)
   {
-    fix_address = ((SCHEME_OBJECT *) (*fixes++));      /* Where it goes. */
-    *fix_address = *fixes++;                           /* Put it there. */
+    fix_address = ((SCHEME_OBJECT *) (* fixes++));     /* Where it goes. */
+    (* fix_address) = (* fixes++);                     /* Put it there. */
   }
 
   if (fixup_count >= 0)
@@ -338,7 +324,7 @@ next_buffer:
          (gc_file_start_position + (fixup_count << gc_buffer_byte_shift)),
          gc_buffer_bytes, "read", "the fixup buffer",
          &gc_file_current_position, io_error_retry_p))
-       != gc_buffer_bytes)
+       != ((long) gc_buffer_bytes))
     {
       gc_death (TERM_EXIT,
                "fasdump: Could not read back the fasdump fixup information",
@@ -363,12 +349,12 @@ DEFUN_VOID (reset_fixes)
   fixup_count += 1;
   start = (gc_file_start_position + (fixup_count << gc_buffer_byte_shift));
 
-  if (((start + gc_buffer_bytes) > gc_file_end_position)
+  if (((start + ((long) gc_buffer_bytes)) > gc_file_end_position)
       || ((retrying_file_operation
           (eta_write, real_gc_file, ((char *) fixup_buffer),
            start, gc_buffer_bytes, "write", "the fixup buffer",
            &gc_file_current_position, io_error_always_abort))
-         != gc_buffer_bytes))
+         != ((long) gc_buffer_bytes)))
     return (false);
   fixup = fixup_buffer_end;
   return (true);
@@ -378,27 +364,25 @@ DEFUN_VOID (reset_fixes)
 
 long
 DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
-       fast SCHEME_OBJECT *Scan AND
-       SCHEME_OBJECT **To_ptr AND
-       SCHEME_OBJECT **To_Address_ptr)
+       fast SCHEME_OBJECT * Scan AND
+       SCHEME_OBJECT ** To_ptr AND
+       SCHEME_OBJECT ** To_Address_ptr)
 {
-  fast SCHEME_OBJECT *To, *Old, Temp, *To_Address, New_Address;
+  fast SCHEME_OBJECT * To, * Old, Temp, * To_Address, New_Address;
   Boolean success;
 
   success = true;
-  To = *To_ptr;
-  To_Address = *To_Address_ptr;
+  To = (* To_ptr);
+  To_Address = (* To_Address_ptr);
 
   for ( ; Scan != To; Scan++)
   {
-    Temp = *Scan;
+    Temp = (* Scan);
     Switch_by_GC_Type (Temp)
     {
       case TC_BROKEN_HEART:
         if ((OBJECT_DATUM (Temp)) == 0)
-       {
          break;
-       }
         if (Temp != (MAKE_POINTER_OBJECT (TC_BROKEN_HEART, Scan)))
        {
          sprintf (gc_death_message_buffer,
@@ -408,17 +392,13 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
          /*NOTREACHED*/
        }
        if (Scan != scan_buffer_top)
-       {
          goto end_dumploop;
-       }
 
        /* The -1 is here because of the Scan++ in the for header. */
 
        Scan = ((dump_and_reload_scan_buffer (0, &success)) - 1);
        if (!success)
-       {
          return (PRIM_INTERRUPT);
-       }
        continue;
 \f
       case TC_MANIFEST_NM_VECTOR:
@@ -427,9 +407,7 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
           and if so we need a new bufferfull. */
        Scan += (OBJECT_DATUM (Temp));
        if (Scan < scan_buffer_top)
-       {
          break;
-       }
        else
        {
          unsigned long overflow;
@@ -440,20 +418,18 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
                                                 &success)) +
                   (overflow & gc_buffer_mask)) - 1);
          if (!success)
-         {
            return (PRIM_INTERRUPT);
-         }
          break;
        }
 
       case TC_PRIMITIVE:
       case TC_PCOMB0:
-       *Scan = (dump_renumber_primitive (*Scan));
+       (* Scan) = (dump_renumber_primitive (* Scan));
        break;
 \f
       case_compiled_entry_point:
        fasdump_compiled_entry ();
-       *Scan = Temp;
+       (* Scan) = Temp;
        break;
 
       case TC_LINKAGE_SECTION:
@@ -477,7 +453,7 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
              max_count -= count;
              for ( ; --count >= 0; Scan += 1)
              {
-               Temp = *Scan;
+               Temp = (* Scan);
                fasdump_typeless_pointer (copy_quadruple (), 4);
              }
              if (max_count != 0)
@@ -502,7 +478,9 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
            long overflow;
 
            word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan));
-           if (word_ptr > ((char *) scan_buffer_top))
+           if (! (word_ptr > ((char *) scan_buffer_top)))
+             BCH_START_OPERATOR_RELOCATION (Scan);
+           else
            {
              overflow = (word_ptr - ((char *) Scan));
              extend_scan_buffer (word_ptr, To);
@@ -510,8 +488,6 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
              word_ptr = (end_scan_buffer_extension (word_ptr));
              Scan = ((SCHEME_OBJECT *) (word_ptr - overflow));
            }
-           else
-             BCH_START_OPERATOR_RELOCATION (Scan);
            
            count = (READ_OPERATOR_LINKAGE_COUNT (Temp));
            overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) -
@@ -522,15 +498,15 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
                 word_ptr = next_ptr,
                 next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)))
            {
-             if (next_ptr > ((char *) scan_buffer_top))
+             if (! (next_ptr > ((char *) scan_buffer_top)))
+               fasdump_linked_operator ();
+             else
              {
                extend_scan_buffer (next_ptr, To);
                fasdump_linked_operator ();
                next_ptr = (end_scan_buffer_extension (next_ptr));
                overflow -= gc_buffer_size;
              }
-             else
-               fasdump_linked_operator ();
            }
            Scan = (scan_buffer_top + overflow);
            BCH_END_OPERATOR_RELOCATION (Scan);
@@ -538,12 +514,10 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
          }
 
          default:
-         {
            gc_death (TERM_EXIT,
                      "fasdump: Unknown compiler linkage kind.",
                      Scan, Free);
            /*NOTREACHED*/
-         }
        }
        break;
       }
@@ -583,7 +557,9 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
        for ( ; ((--count) >= 0);
             (word_ptr = (NEXT_MANIFEST_CLOSURE_ENTRY (word_ptr))))
        {
-         if ((CLOSURE_ENTRY_END (word_ptr)) > ((char *) scan_buffer_top))
+         if (! ((CLOSURE_ENTRY_END (word_ptr)) > ((char *) scan_buffer_top)))
+           fasdump_manifest_closure ();
+         else
          {
            char * entry_end;
            long de, dw;
@@ -597,8 +573,6 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
            word_ptr = (entry_end - dw);
            end_ptr = (entry_end + de);
          }
-         else
-           fasdump_manifest_closure ();
        }
        Scan = ((SCHEME_OBJECT *) (end_ptr));
        BCH_END_CLOSURE_RELOCATION (Scan);
@@ -610,10 +584,8 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
 
       case TC_REFERENCE_TRAP:
        if ((OBJECT_DATUM (Temp)) <= TRAP_MAX_IMMEDIATE)
-       {
          /* It is a non pointer. */
          break;
-       }
        /* It is a pair, fall through. */
 
       case TC_WEAK_CONS:
@@ -623,8 +595,8 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
       case TC_INTERNED_SYMBOL:
       {
        fasdump_normal_setup ();
-       *To++ = *Old;
-       *To++ = BROKEN_HEART_ZERO;
+       (* To++) = (* Old);
+       (* To++) = BROKEN_HEART_ZERO;
        fasdump_transport_end (2);
        fasdump_normal_end ();
       }
@@ -632,8 +604,8 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
       case TC_UNINTERNED_SYMBOL:
       {
        fasdump_normal_setup ();
-       *To++ = *Old;
-       *To++ = UNBOUND_OBJECT;
+       (* To++) = (* Old);
+       (* To++) = UNBOUND_OBJECT;
        fasdump_transport_end (2);
        fasdump_normal_end ();
       }
@@ -644,9 +616,9 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
       case TC_VARIABLE:
       {
        fasdump_normal_setup ();
-       *To++ = *Old;
-       *To++ = UNCOMPILED_VARIABLE;
-       *To++ = SHARP_F;
+       (* To++) = (* Old);
+       (* To++) = UNCOMPILED_VARIABLE;
+       (* To++) = SHARP_F;
        fasdump_transport_end (3);
        fasdump_normal_end ();
       }
@@ -664,9 +636,7 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
       Move_Vector:
        copy_vector (&success);
        if (!success)
-       {
          return (PRIM_INTERRUPT);
-       }
        fasdump_normal_end ();
 
       case TC_ENVIRONMENT:
@@ -676,10 +646,8 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
       case TC_FUTURE:
        fasdump_normal_setup ();
        if (!(Future_Spliceable (Temp)))
-       {
          goto Move_Vector;
-       }
-       *Scan = (Future_Value (Temp));
+       (* Scan) = (Future_Value (Temp));
        Scan -= 1;
        continue;
 
@@ -690,26 +658,24 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr),
       case TC_STACK_ENVIRONMENT:
       case_Fasload_Non_Pointer:
        break;
-
       }
   }
 
 end_dumploop:
 
-  *To_ptr = To;
-  *To_Address_ptr = To_Address;
+  (* To_ptr) = To;
+  (* To_Address_ptr) = To_Address;
   return (PRIM_DONE);
 }
 \f
 static SCHEME_OBJECT
 DEFUN (dump_to_file, (root, fname),
-       SCHEME_OBJECT root AND
-       char *fname)
+       SCHEME_OBJECT root AND char * fname)
 {
   Boolean success;
   long value, length, hlength, tlength, tsize;
-  SCHEME_OBJECT *dumped_object, *free_buffer, *dummy;
-  SCHEME_OBJECT *table_start, *table_end, *table_top;
+  SCHEME_OBJECT * dumped_object, * free_buffer, * dummy;
+  SCHEME_OBJECT * table_start, * table_end, * table_top;
   SCHEME_OBJECT header[FASL_HEADER_LENGTH];
 
   if (fixup_buffer == ((SCHEME_OBJECT *) NULL))
@@ -747,7 +713,7 @@ DEFUN (dump_to_file, (root, fname),
   dummy = free_buffer;
   FLOAT_ALIGN_FREE (Free, dummy);
 
-  *free_buffer++ = root;
+  (* free_buffer++) = root;
   dumped_object = Free;
   Free += 1;
 \f
@@ -758,16 +724,12 @@ DEFUN (dump_to_file, (root, fname),
   {
     fasdump_exit (0);
     if (value == PRIM_INTERRUPT)
-    {
       return (SHARP_F);
-    }
     else
-    {
       signal_error_from_primitive (value);
-    }
   }
   end_transport (&success);
-  if (!success)
+  if (! success)
   {
     fasdump_exit (0);
     return (SHARP_F);
@@ -838,9 +800,7 @@ DEFINE_PRIMITIVE ("PRIMITIVE-FASDUMP", Prim_prim_fasdump, 3, 3, 0)
   root = (ARG_REF (1));
 
   if (STRING_P (ARG_REF (2)))
-  {
     PRIMITIVE_RETURN (dump_to_file (root, (STRING_ARG (2))));
-  }
   else
   {
     extern char * EXFUN (mktemp, (char *));
@@ -865,9 +825,7 @@ DEFINE_PRIMITIVE ("PRIMITIVE-FASDUMP", Prim_prim_fasdump, 3, 3, 0)
     (void) mktemp (temp_name);
     fasdump_result = (dump_to_file (root, (temp_name)));
     if (fasdump_result != SHARP_T)
-    {
       PRIMITIVE_RETURN (fasdump_result);
-    }
 
     temp_channel = (OS_open_input_file (temp_name));
     copy_result = (OS_channel_copy ((OS_file_length (temp_channel)),
@@ -876,9 +834,7 @@ DEFINE_PRIMITIVE ("PRIMITIVE-FASDUMP", Prim_prim_fasdump, 3, 3, 0)
     OS_channel_close (temp_channel);
     OS_file_remove (temp_name);
     if (copy_result < 0)
-    {
       signal_error_from_primitive (ERR_IO_ERROR);
-    }
     PRIMITIVE_RETURN (SHARP_T);
   }
 }
@@ -905,25 +861,21 @@ DEFINE_PRIMITIVE ("DUMP-BAND", Prim_band_dump, 2, 2, 0)
   Free[COMB_1_FN] = (ARG_REF (1));
   Free[COMB_1_ARG_1] = SHARP_F;
   Free += 2;
-  *Free++ = Combination;
-  *Free++ = compiler_utilities;
-  *Free = (MAKE_POINTER_OBJECT (TC_LIST, (Free - 2)));
-  Free++;  /* Some compilers are TOO clever about this and increment Free
+  (* Free++) = Combination;
+  (* Free++) = compiler_utilities;
+  (* Free) = (MAKE_POINTER_OBJECT (TC_LIST, (Free - 2)));
+  Free ++;  /* Some compilers are TOO clever about this and increment Free
              before calculating Free-2! */
   table_start = Free;
   table_end = (cons_whole_primitive_table (Free, Heap_Top, &table_length));
   if (table_end >= Heap_Top)
-  {
     result = false;
-  }
   else
   {
     CONST char * filename = ((CONST char *) (STRING_LOC ((ARG_REF (2)), 0)));
     dump_channel = (OS_open_dump_file (filename));
     if (dump_channel == NO_CHANNEL)
-    {
       error_bad_range_arg (2);
-    }
     result = (Write_File ((Free - 1),
                          ((long) (Free - Heap_Bottom)), Heap_Bottom,
                          ((long) (Free_Constant - Constant_Space)),
@@ -933,9 +885,7 @@ DEFINE_PRIMITIVE ("DUMP-BAND", Prim_band_dump, 2, 2, 0)
                          (compiler_utilities != SHARP_F), true));
     OS_channel_close_noerror (dump_channel);
     if (!result)
-    {
       OS_file_remove (filename);
-    }
   }
   Band_Dump_Exit_Hook ();
   Free = saved_free;
index 65e66ef5000593213fac47a2a3797d5237b35dff..6984f5e14a262631a06bdb73e9fb659e6d6cab2f 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: bchgcc.h,v 9.53 1993/08/22 22:19:10 gjr Exp $
+$Id: bchgcc.h,v 9.54 1993/08/23 02:21:13 gjr Exp $
 
 Copyright (c) 1987-1993 Massachusetts Institute of Technology
 
@@ -324,8 +324,8 @@ extern int
 
 #define relocate_normal_end()                                          \
 {                                                                      \
-  *(OBJECT_ADDRESS (Temp)) = New_Address;                              \
-  *Scan = (MAKE_OBJECT_FROM_OBJECTS (Temp, New_Address));              \
+  (* (OBJECT_ADDRESS (Temp))) = New_Address;                           \
+  (* Scan) = (MAKE_OBJECT_FROM_OBJECTS (Temp, New_Address));           \
   continue;                                                            \
 }
 
@@ -368,33 +368,28 @@ do {                                                                      \
 
 #define relocate_typeless_setup()                                      \
 {                                                                      \
-  Old = ((SCHEME_OBJECT *) Temp);                                      \
+  Old = (SCHEME_ADDR_TO_ADDR (Temp));                                  \
   if (Old >= Low_Constant)                                             \
     continue;                                                          \
-  if ((OBJECT_TYPE (*Old)) == TC_BROKEN_HEART)                         \
+  if (BROKEN_HEART_P (* Old))                                          \
   {                                                                    \
-    *Scan = ((SCHEME_OBJECT) (OBJECT_ADDRESS (*Old)));                 \
+    (* Scan) = (ADDR_TO_SCHEME_ADDR (OBJECT_ADDRESS (* Old)));         \
     continue;                                                          \
   }                                                                    \
   New_Address = ((SCHEME_OBJECT) To_Address);                          \
 }
 
-#define relocate_typeless_transport(copy_code, length)                 \
-{                                                                      \
-  relocate_normal_transport (copy_code, length);                       \
-}
-
 #define relocate_typeless_end()                                                \
 {                                                                      \
-  (* ((SCHEME_OBJECT *) Temp)) = (MAKE_BROKEN_HEART (New_Address));    \
-  *Scan = New_Address;                                                 \
+  (* (SCHEME_ADDR_TO_ADDR (Temp))) = (MAKE_BROKEN_HEART (New_Address));        \
+  (* Scan) = (ADDR_TO_SCHEME_ADDR (New_Address));                      \
   continue;                                                            \
 }
 
 #define relocate_typeless_pointer(copy_code, length)                   \
 {                                                                      \
   relocate_typeless_setup ();                                          \
-  relocate_typeless_transport (copy_code, length);                     \
+  relocate_normal_transport (copy_code, length);                       \
   relocate_typeless_end ();                                            \
 }
 \f
@@ -426,20 +421,20 @@ do {                                                                      \
   }                                                                    \
 } while (0)
 
-#define relocate_linked_operator(in_gc_p)                              \
+#define relocate_linked_operator(in_gc_p) do                           \
 {                                                                      \
   Scan = ((SCHEME_OBJECT *) (word_ptr));                               \
   BCH_EXTRACT_OPERATOR_LINKAGE_ADDRESS (Temp, Scan);                   \
   relocate_compiled_entry (in_gc_p);                                   \
   BCH_STORE_OPERATOR_LINKAGE_ADDRESS (Temp, Scan);                     \
-}
+} while (0)
 
-#define relocate_manifest_closure(in_gc_p)                             \
+#define relocate_manifest_closure(in_gc_p) do                          \
 {                                                                      \
   Scan = ((SCHEME_OBJECT *) (word_ptr));                               \
   BCH_EXTRACT_CLOSURE_ENTRY_ADDRESS (Temp, Scan);                      \
   relocate_compiled_entry (in_gc_p);                                   \
   BCH_STORE_CLOSURE_ENTRY_ADDRESS (Temp, Scan);                                \
-}
+} while (0)
 
 #endif /* _BCHGCC_H_INCLUDED */
index 5fa85fc64b307f7b3832e9a78b90e5d983c6bc6d..b920a12e4437f596d058ecfdbf079abf5dee1290 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: bchgcl.c,v 9.45 1993/06/24 07:06:57 gjr Exp $
+$Id: bchgcl.c,v 9.46 1993/08/23 02:21:42 gjr Exp $
 
 Copyright (c) 1987-1992 Massachusetts Institute of Technology
 
@@ -41,19 +41,21 @@ MIT in each case. */
 \f
 SCHEME_OBJECT *
 DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
-       fast SCHEME_OBJECT *Scan AND
-       SCHEME_OBJECT **To_ptr AND
-       SCHEME_OBJECT **To_Address_ptr)
+       fast SCHEME_OBJECT * Scan AND
+       SCHEME_OBJECT ** To_ptr AND
+       SCHEME_OBJECT ** To_Address_ptr)
 {
-  fast SCHEME_OBJECT *To, *Old, Temp, *Low_Constant, *To_Address, New_Address;
+  fast SCHEME_OBJECT
+    * To, * Old, Temp, * Low_Constant,
+    * To_Address, New_Address;
 
-  To = *To_ptr;
-  To_Address = *To_Address_ptr;
+  To = (* To_ptr);
+  To_Address = (* To_Address_ptr);
   Low_Constant = Constant_Space;
 
   for ( ; Scan != To; Scan++)
   {
-    Temp = *Scan;
+    Temp = (* Scan);
     Switch_by_GC_Type (Temp)
     {
       case TC_BROKEN_HEART:
@@ -77,9 +79,7 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
           and if so we need a new bufferfull. */
        Scan += (OBJECT_DATUM (Temp));
        if (Scan < scan_buffer_top)
-       {
          break;
-       }
        else
        {
          unsigned long overflow;
@@ -94,7 +94,7 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
 \f
       case_compiled_entry_point:
        relocate_compiled_entry (true);
-       *Scan = Temp;
+       (* Scan) = Temp;
        break;
 
       case TC_LINKAGE_SECTION:
@@ -118,7 +118,7 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
              max_count -= count;
              for ( ; --count >= 0; Scan += 1)
              {
-               Temp = *Scan;
+               Temp = (* Scan);
                relocate_typeless_pointer (copy_quadruple (), 4);
              }
              if (max_count != 0)
@@ -143,7 +143,9 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
            long overflow;
 
            word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan));
-           if (word_ptr > ((char *) scan_buffer_top))
+           if (! (word_ptr > ((char *) scan_buffer_top)))
+             BCH_START_OPERATOR_RELOCATION (Scan);
+           else
            {
              overflow = (word_ptr - ((char *) Scan));
              extend_scan_buffer (word_ptr, To);
@@ -151,8 +153,6 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
              word_ptr = (end_scan_buffer_extension (word_ptr));
              Scan = ((SCHEME_OBJECT *) (word_ptr - overflow));
            }
-           else
-             BCH_START_OPERATOR_RELOCATION (Scan);
            
            count = (READ_OPERATOR_LINKAGE_COUNT (Temp));
            overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) -
@@ -163,15 +163,15 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
                 word_ptr = next_ptr,
                 next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)))
            {
-             if (next_ptr > ((char *) scan_buffer_top))
+             if (! (next_ptr > ((char *) scan_buffer_top)))
+               relocate_linked_operator (true);
+             else
              {
                extend_scan_buffer (next_ptr, To);
                relocate_linked_operator (true);
                next_ptr = (end_scan_buffer_extension (next_ptr));
                overflow -= gc_buffer_size;
              }
-             else
-               relocate_linked_operator (true);
            }
            Scan = (scan_buffer_top + overflow);
            BCH_END_OPERATOR_RELOCATION (Scan);
@@ -179,12 +179,10 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
          }
 
          default:
-         {
            gc_death (TERM_EXIT,
                      "GC: Unknown compiler linkage kind.",
                      Scan, Free);
            /*NOTREACHED*/
-         }
        }
        break;
       }
@@ -224,7 +222,9 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
        for ( ; ((--count) >= 0);
             (word_ptr = (NEXT_MANIFEST_CLOSURE_ENTRY (word_ptr))))
        {
-         if ((CLOSURE_ENTRY_END (word_ptr)) > ((char *) scan_buffer_top))
+         if (! ((CLOSURE_ENTRY_END (word_ptr)) > ((char *) scan_buffer_top)))
+           relocate_manifest_closure (true);
+         else
          {
            char * entry_end;
            long de, dw;
@@ -238,8 +238,6 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
            word_ptr = (entry_end - dw);
            end_ptr = (entry_end + de);
          }
-         else
-           relocate_manifest_closure (true);
        }
        Scan = ((SCHEME_OBJECT *) (end_ptr));
        BCH_END_CLOSURE_RELOCATION (Scan);
@@ -251,10 +249,8 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
 
       case TC_REFERENCE_TRAP:
        if ((OBJECT_DATUM (Temp)) <= TRAP_MAX_IMMEDIATE)
-       {
          /* It is a non pointer. */
          break;
-       }
        /* It is a pair, fall through. */
       case_Pair:
        relocate_normal_pointer (copy_pair (), 2);
@@ -298,7 +294,7 @@ DEFUN (GCLoop, (Scan, To_ptr, To_Address_ptr),
       }
   }
 end_gcloop:
-  *To_ptr = To;
-  *To_Address_ptr = To_Address;
+  (* To_ptr) = To;
+  (* To_Address_ptr) = To_Address;
   return (Scan);
 }
index 63f77c62c9abffb5c62bd70c15d7f0347c30b680..f19e081c157686975ff9fa7a59bc05acdee713bb 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: bchpur.c,v 9.60 1993/08/22 22:39:01 gjr Exp $
+$Id: bchpur.c,v 9.61 1993/08/23 02:22:09 gjr Exp $
 
 Copyright (c) 1987-1992 Massachusetts Institute of Technology
 
@@ -60,16 +60,14 @@ MIT in each case. */
   Old = OBJECT_ADDRESS (Temp);                                         \
   if (Old >= Low_Constant)                                             \
     continue;                                                          \
-  if (OBJECT_TYPE (*Old) == TC_BROKEN_HEART)                           \
-  {                                                                    \
+  if (BROKEN_HEART_P (* Old))                                          \
     continue;                                                          \
-  }                                                                    \
   New_Address = (MAKE_BROKEN_HEART (To_Address));                      \
 }
 
 #define relocate_indirect_end()                                                \
 {                                                                      \
-  *OBJECT_ADDRESS (Temp) = New_Address;                                        \
+  (* (OBJECT_ADDRESS (Temp))) = New_Address;                           \
   continue;                                                            \
 }
 \f
@@ -77,20 +75,22 @@ MIT in each case. */
 
 static SCHEME_OBJECT *
 DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
-       fast SCHEME_OBJECT *Scan AND
-       SCHEME_OBJECT **To_ptr AND
-       SCHEME_OBJECT **To_Address_ptr AND
+       fast SCHEME_OBJECT * Scan AND
+       SCHEME_OBJECT ** To_ptr AND
+       SCHEME_OBJECT ** To_Address_ptr AND
        int purify_mode)
 {
-  fast SCHEME_OBJECT *To, *Old, Temp, *Low_Constant, *To_Address, New_Address;
+  fast SCHEME_OBJECT
+    * To, * Old, Temp, * Low_Constant,
+    * To_Address, New_Address;
 
-  To = *To_ptr;
-  To_Address = *To_Address_ptr;
+  To = (* To_ptr);
+  To_Address = (* To_Address_ptr);
   Low_Constant = Constant_Space;
 
   for ( ; Scan != To; Scan++)
   {
-    Temp = *Scan;
+    Temp = (* Scan);
     Switch_by_GC_Type (Temp)
     {
       case TC_BROKEN_HEART:
@@ -133,18 +133,16 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
        if (purify_mode == PURE_COPY)
          break;
        relocate_compiled_entry (false);
-       *Scan = Temp;
+       (* Scan) = Temp;
        break;
 
       case TC_LINKAGE_SECTION:
       {
        if (purify_mode == PURE_COPY)
-       {
          gc_death (TERM_COMPILER_DEATH,
                    "purifyloop: linkage section in pure area",
                    Scan, To);
          /*NOTREACHED*/
-       }
        switch (READ_LINKAGE_KIND (Temp))
        {
          case REFERENCE_LINKAGE_KIND:
@@ -189,7 +187,9 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
            long overflow;
 
            word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan));
-           if (word_ptr > ((char *) scan_buffer_top))
+           if (! (word_ptr > ((char *) scan_buffer_top)))
+             BCH_START_OPERATOR_RELOCATION (Scan);
+           else
            {
              overflow = (word_ptr - ((char *) Scan));
              extend_scan_buffer (word_ptr, To);
@@ -197,8 +197,6 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
              word_ptr = (end_scan_buffer_extension (word_ptr));
              Scan = ((SCHEME_OBJECT *) (word_ptr - overflow));
            }
-           else
-             BCH_START_OPERATOR_RELOCATION (Scan);
            
            count = (READ_OPERATOR_LINKAGE_COUNT (Temp));
            overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) -
@@ -209,15 +207,15 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
                 word_ptr = next_ptr,
                 next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)))
            {
-             if (next_ptr > ((char *) scan_buffer_top))
+             if (! (next_ptr > ((char *) scan_buffer_top)))
+               relocate_linked_operator (false);
+             else
              {
                extend_scan_buffer (next_ptr, To);
                relocate_linked_operator (false);
                next_ptr = (end_scan_buffer_extension (next_ptr));
                overflow -= gc_buffer_size;
              }
-             else
-               relocate_linked_operator (false);
            }
            Scan = (scan_buffer_top + overflow);
            BCH_END_OPERATOR_RELOCATION (Scan);
@@ -225,12 +223,10 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
          }
 
          default:
-         {
            gc_death (TERM_EXIT,
                      "purify: Unknown compiler linkage kind.",
                      Scan, Free);
            /*NOTREACHED*/
-         }
        }
        break;
       }
@@ -238,12 +234,10 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
       case TC_MANIFEST_CLOSURE:
       {
        if (purify_mode == PURE_COPY)
-       {
          gc_death (TERM_COMPILER_DEATH,
                    "purifyloop: manifest closure in pure area",
                    Scan, To);
          /*NOTREACHED*/
-       }
       }
       {
        fast long count;
@@ -279,7 +273,9 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
        for ( ; ((--count) >= 0);
             (word_ptr = (NEXT_MANIFEST_CLOSURE_ENTRY (word_ptr))))
        {
-         if ((CLOSURE_ENTRY_END (word_ptr)) > ((char *) scan_buffer_top))
+         if (! ((CLOSURE_ENTRY_END (word_ptr)) > ((char *) scan_buffer_top)))
+           relocate_manifest_closure (false);
+         else
          {
            char * entry_end;
            long de, dw;
@@ -293,8 +289,6 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
            word_ptr = (entry_end - dw);
            end_ptr = (entry_end + de);
          }
-         else
-           relocate_manifest_closure (false);
        }
        Scan = ((SCHEME_OBJECT *) (end_ptr));
        BCH_END_CLOSURE_RELOCATION (Scan);
@@ -357,7 +351,7 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
        relocate_normal_setup();
        if (!(Future_Spliceable (Temp)))
          goto Move_Vector;
-       *Scan = (Future_Value (Temp));
+       (* Scan) = (Future_Value (Temp));
        Scan -= 1;
        continue;
 
@@ -371,8 +365,8 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode),
       }
   }
 end_purifyloop:
-  *To_ptr = To;
-  *To_Address_ptr = To_Address;
+  (* To_ptr) = To;
+  (* To_Address_ptr) = To_Address;
   return (Scan);
 }
 \f
@@ -381,9 +375,9 @@ end_purifyloop:
  */
 
 static SCHEME_OBJECT *
-DEFUN (purify_header_overflow, (free_buffer), SCHEME_OBJECT *free_buffer)
+DEFUN (purify_header_overflow, (free_buffer), SCHEME_OBJECT * free_buffer)
 {
-  SCHEME_OBJECT *scan_buffer;
+  SCHEME_OBJECT * scan_buffer;
   long delta;
 
   delta = (free_buffer - free_buffer_top);
@@ -420,36 +414,34 @@ DEFUN (purify, (object, flag),
     fast SCHEME_OBJECT *ptr, *ptrend;
 
     for (ptr = block_start, ptrend = old_free; ptr != ptrend; )
-      *free_buffer_ptr++ = *ptr++;
+      * free_buffer_ptr++ = *ptr++;
   }
 
   new_free += 2;
-  *free_buffer_ptr++ = SHARP_F;        /* Pure block header. */
-  *free_buffer_ptr++ = object;
+  * free_buffer_ptr++ = SHARP_F;       /* Pure block header. */
+  * free_buffer_ptr++ = object;
   if (free_buffer_ptr >= free_buffer_top)
     free_buffer_ptr =
       (dump_and_reset_free_buffer ((free_buffer_ptr - free_buffer_top), NULL));
 
-  if (flag == SHARP_T)
+  if (flag != SHARP_T)
+    pure_length = 3;
+  else
   {
     scan_start = ((initialize_scan_buffer (block_start)) + delta);
     result = (purifyloop (scan_start, &free_buffer_ptr,
                          &new_free, PURE_COPY));
     if (result != free_buffer_ptr)
-    {
       gc_death (TERM_BROKEN_HEART,
                "purify: pure copy ended too early",
                result, free_buffer_ptr);
       /*NOTREACHED*/
-    }
     pure_length = ((new_free - old_free) + 1);
   }
-  else
-    pure_length = 3;
 
   new_free += 2;
-  *free_buffer_ptr++ = (MAKE_OBJECT (TC_MANIFEST_SPECIAL_NM_VECTOR, 1));
-  *free_buffer_ptr++ = (MAKE_OBJECT (CONSTANT_PART, pure_length));
+  * free_buffer_ptr++ = (MAKE_OBJECT (TC_MANIFEST_SPECIAL_NM_VECTOR, 1));
+  * free_buffer_ptr++ = (MAKE_OBJECT (CONSTANT_PART, pure_length));
   if (free_buffer_ptr >= free_buffer_top)
     free_buffer_ptr = (purify_header_overflow (free_buffer_ptr));
 \f
@@ -461,32 +453,28 @@ DEFUN (purify, (object, flag),
     result = (GCLoop (scan_start, &free_buffer_ptr, &new_free));
 
   if (result != free_buffer_ptr)
-  {
     gc_death (TERM_BROKEN_HEART, "purify: constant copy ended too early",
              result, free_buffer_ptr);
     /*NOTREACHED*/
-  }
 
   new_free += 2;
   length = (new_free - old_free);
-  *free_buffer_ptr++ = (MAKE_OBJECT (TC_MANIFEST_SPECIAL_NM_VECTOR, 1));
-  *free_buffer_ptr++ = (MAKE_OBJECT (END_OF_BLOCK, (length - 1)));
+  * free_buffer_ptr++ = (MAKE_OBJECT (TC_MANIFEST_SPECIAL_NM_VECTOR, 1));
+  * free_buffer_ptr++ = (MAKE_OBJECT (END_OF_BLOCK, (length - 1)));
   if (free_buffer_ptr >= free_buffer_top)
     free_buffer_ptr = (purify_header_overflow (free_buffer_ptr));
   end_transport (NULL);
 
   if (!(TEST_CONSTANT_TOP (new_free)))
-  {
     gc_death (TERM_NO_SPACE, "purify: object too large", NULL, NULL);
     /*NOTREACHED*/
-  }
 
   final_reload (block_start,
                (new_free - block_start),
                "the new constant space block");
 
-  *old_free++ = (MAKE_OBJECT (TC_MANIFEST_SPECIAL_NM_VECTOR, pure_length));
-  *old_free = (MAKE_OBJECT (PURE_PART, (length - 1)));
+  * old_free++ = (MAKE_OBJECT (TC_MANIFEST_SPECIAL_NM_VECTOR, pure_length));
+  * old_free = (MAKE_OBJECT (PURE_PART, (length - 1)));
   Free_Constant = new_free;
   SET_CONSTANT_TOP ();
 
@@ -541,8 +529,8 @@ DEFINE_PRIMITIVE ("PRIMITIVE-PURIFY", Prim_primitive_purify, 3, 3, 0)
     purify_result = (purify (object, (ARG_REF (2))));
     words_free = (LONG_TO_UNSIGNED_FIXNUM (MemTop - Free));
     result = (MAKE_POINTER_OBJECT (TC_LIST, Free));
-    (*Free++) = purify_result;
-    (*Free++) = words_free;
+    (* Free++) = purify_result;
+    (* Free++) = words_free;
   }
   run_post_gc_hooks ();
   POP_PRIMITIVE_FRAME (3);
index d607bb2d04dcec94ed8741a9d50443b062f0ca29..7f22384b4895ff8eb623ba0a4fd3f75ef3b7f7fb 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: i386.h,v 1.22 1993/08/21 01:51:42 gjr Exp $
+$Id: i386.h,v 1.23 1993/08/23 02:19:52 gjr Exp $
 
 Copyright (c) 1992-1993 Massachusetts Institute of Technology
 
@@ -264,14 +264,16 @@ extern long i386_pc_displacement_relocation;
                      + i386_pc_displacement_relocation);               \
   (* ((long *) displacement_address)) = new_displacement;              \
   (var) = ((SCHEME_OBJECT)                                             \
-          ((((long) (v_addr)) + 5) + new_displacement));               \
+          ((ADDR_TO_SCHEME_ADDR (((long) (v_addr)) + 5))               \
+           + new_displacement));                                       \
 } while (0)
 
 #define BCH_STORE_DISPLACEMENT_FROM_ADDRESS(target, v_addr, p_addr) do \
 {                                                                      \
   long displacement_address = (((long) (p_addr)) + 1);                 \
   (* ((long *) displacement_address))                                  \
-    = (((long) (target)) - (((long) (v_addr)) + 5));                   \
+    = (((long) (target))                                               \
+       - (ADDR_TO_SCHEME_ADDR (((long) (v_addr)) + 5)));               \
 } while (0)
 \f
 #define START_CLOSURE_RELOCATION(scan) do                              \
@@ -385,13 +387,13 @@ extern long i386_pc_displacement_relocation;
 
 #define START_OPERATOR_RELOCATION(scan)        do                              \
 {                                                                      \
-  SCHEME_OBJECT * _new, * _old, _loc;                                  \
+  SCHEME_OBJECT * _scan, * _old, _loc;                                 \
                                                                        \
-  _new = (((SCHEME_OBJECT *) (scan)) + 1);                             \
-  _old = ((SCHEME_OBJECT *) (* _new));                                 \
-  _loc = (ADDR_TO_SCHEME_ADDR (_new));                                 \
+  _scan = (((SCHEME_OBJECT *) (scan)) + 1);                            \
+  _old = ((SCHEME_OBJECT *) (* _scan));                                        \
+  _loc = (ADDR_TO_SCHEME_ADDR (_scan));                                        \
                                                                        \
-  (* _new) = _loc;                                                     \
+  (* _scan) = _loc;                                                    \
   i386_pc_displacement_relocation = (((long) _old) - ((long) _loc));   \
 } while (0)
 
@@ -399,15 +401,15 @@ extern long i386_pc_displacement_relocation;
 \f
 #define BCH_START_OPERATOR_RELOCATION(scan) do                         \
 {                                                                      \
-  SCHEME_OBJECT * _scan, * _new, * _old;                               \
+  SCHEME_OBJECT * _scan, * _old, _loc;                                 \
                                                                        \
   _scan = (((SCHEME_OBJECT *) (scan)) + 1);                            \
-  _new = ((SCHEME_OBJECT *)                                            \
-         (SCAN_POINTER_TO_NEWSPACE_ADDRESS (_scan)));                  \
   _old = ((SCHEME_OBJECT *) (* _scan));                                        \
+  _loc = (ADDR_TO_SCHEME_ADDR                                          \
+         (SCAN_POINTER_TO_NEWSPACE_ADDRESS (_scan)));                  \
                                                                        \
-  * _scan = ((SCHEME_OBJECT) _new);                                    \
-  i386_pc_displacement_relocation = (((long) _old) - ((long) _new));   \
+  * _scan = _loc;                                                      \
+  i386_pc_displacement_relocation = (((long) _old) - ((long) _loc));   \
 } while (0)
 
 #define BCH_END_OPERATOR_RELOCATION            END_OPERATOR_RELOCATION