From bf788c39f8290f76c0d6177f6ff3275dcca2b469 Mon Sep 17 00:00:00 2001
From: "Guillermo J. Rozas" <edu/mit/csail/zurich/gjr>
Date: Tue, 18 Feb 1992 17:29:32 +0000
Subject: [PATCH] Changes for 386 port: Conditionally define some of the macros
 so that a cmpint-md.h file can override them. Use
 FIRST_OPERATOR_LINKAGE_OFFSET for some of the execute cache macros.

---
 v7/src/microcode/cmpgc.h | 58 +++++++++++++++++++++++++++++-----------
 1 file changed, 43 insertions(+), 15 deletions(-)

diff --git a/v7/src/microcode/cmpgc.h b/v7/src/microcode/cmpgc.h
index c5d767833..9a2b87782 100644
--- a/v7/src/microcode/cmpgc.h
+++ b/v7/src/microcode/cmpgc.h
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/cmpgc.h,v 1.17 1992/01/14 19:23:41 jinx Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/cmpgc.h,v 1.18 1992/02/18 17:29:32 jinx Exp $
 
 Copyright (c) 1989-1992 Massachusetts Institute of Technology
 
@@ -203,7 +203,7 @@ MAKE_POINTER_OBJECT((OBJECT_TYPE(object)),				\
  ((long) (((format_word *) (scan))[0])))
 
 #define FIRST_MANIFEST_CLOSURE_ENTRY(scan)				\
-(((((format_word *) (scan))[1]) ==   CLOSURE_HEADER_TO_ENTRY_WORD) ?	\
+(((((format_word *) (scan))[1]) == CLOSURE_HEADER_TO_ENTRY_WORD) ?	\
  (((char *) (scan)) + (2 * (sizeof (format_word)))) :			\
  (((char *) (scan)) + (4 * (sizeof (format_word)))))
 
@@ -244,40 +244,54 @@ MAKE_POINTER_OBJECT((OBJECT_TYPE(object)),				\
 #define READ_CACHE_LINKAGE_COUNT(header)				\
   ((header) & 0xffff)
 
+#ifndef FIRST_OPERATOR_LINKAGE_OFFSET
+#  define FIRST_OPERATOR_LINKAGE_OFFSET 1
+#endif
+
 #define READ_OPERATOR_LINKAGE_COUNT(header)				\
-  (EXECUTE_CACHE_COUNT_TO_ENTRIES((header) & 0xffff))
+  (EXECUTE_CACHE_COUNT_TO_ENTRIES					\
+   (((header) & 0xffff) - (FIRST_OPERATOR_LINKAGE_OFFSET - 1)))
   
 #define MAKE_LINKAGE_SECTION_HEADER(kind, count)			\
   (MAKE_OBJECT(TC_LINKAGE_SECTION,					\
-	       ((kind) |						\
-		((((kind) == OPERATOR_LINKAGE_KIND)			\
-		  || ((kind) == GLOBAL_OPERATOR_LINKAGE_KIND)) ?	\
-		 (EXECUTE_CACHE_ENTRIES_TO_COUNT (count)) :		\
-		 (count)))))
+	       ((kind)							\
+		| ((((kind) == OPERATOR_LINKAGE_KIND)			\
+		    || ((kind) == GLOBAL_OPERATOR_LINKAGE_KIND))	\
+		   ? ((EXECUTE_CACHE_ENTRIES_TO_COUNT (count))		\
+		      + (FIRST_OPERATOR_LINKAGE_OFFSET - 1))		\
+		   : (count)))))
 
 /* This takes into account the 1 added by the main loop of the
    relocators.
  */
 
-#define END_OPERATOR_LINKAGE_AREA(scan, count)				\
-  (((SCHEME_OBJECT *) (scan)) + ((count) * EXECUTE_CACHE_ENTRY_SIZE))
+#ifndef END_OPERATOR_LINKAGE_AREA
+#  define END_OPERATOR_LINKAGE_AREA(scan, count)			\
+  (((SCHEME_OBJECT *) (scan))						\
+   + (((count) * EXECUTE_CACHE_ENTRY_SIZE))				\
+   + (FIRST_OPERATOR_LINKAGE_OFFSET - 1))
+#endif
 
 #define FIRST_OPERATOR_LINKAGE_ENTRY(scan)				\
-  ((char *) (((SCHEME_OBJECT *) (scan)) + 1))
+  ((char *) (((SCHEME_OBJECT *) (scan)) + FIRST_OPERATOR_LINKAGE_OFFSET))
 
 #define NEXT_LINKAGE_OPERATOR_ENTRY(word_ptr)				\
   ((char *) (((SCHEME_OBJECT *) (word_ptr)) +				\
 	     EXECUTE_CACHE_ENTRY_SIZE))
 
-#define EXTRACT_OPERATOR_LINKAGE_ADDRESS(target, source)		\
+#ifndef EXTRACT_OPERATOR_LINKAGE_ADDRESS
+#  define EXTRACT_OPERATOR_LINKAGE_ADDRESS(target, source)		\
 {									\
   EXTRACT_EXECUTE_CACHE_ADDRESS (target, source);			\
 }
+#endif
 
-#define STORE_OPERATOR_LINKAGE_ADDRESS(source, target)			\
+#ifndef STORE_OPERATOR_LINKAGE_ADDRESS
+# define STORE_OPERATOR_LINKAGE_ADDRESS(source, target)			\
 {									\
   STORE_EXECUTE_CACHE_ADDRESS (target, source);				\
 }
+#endif
 
 /* Heuristic recovery aid. See uxtrap.c for its use.
    block is the address of a vector header followed by a non-marked
@@ -372,11 +386,11 @@ typedef unsigned short format_word;
 #endif /* HAS_COMPILER_SUPPORT */
 
 #ifndef FLUSH_I_CACHE
-#define FLUSH_I_CACHE() do {} while (0)
+#  define FLUSH_I_CACHE() do {} while (0)
 #endif /* FLUSH_I_CACHE */
 
 #ifndef COMPILER_TRANSPORT_END
-#define COMPILER_TRANSPORT_END() do					\
+#  define COMPILER_TRANSPORT_END() do					\
 {									\
   Registers[REGBLOCK_CLOSURE_SPACE] = ((SCHEME_OBJECT) 0);		\
   Registers[REGBLOCK_CLOSURE_FREE] = ((SCHEME_OBJECT) NULL);		\
@@ -384,4 +398,18 @@ typedef unsigned short format_word;
 } while (0)
 #endif /* COMPILER_TRANSPORT_END */
 
+#ifndef START_CLOSURE_RELOCATION
+#  define START_CLOSURE_RELOCATION(scan) do { } while (0)
+#endif
+#ifndef END_CLOSURE_RELOCATION
+#  define END_CLOSURE_RELOCATION(scan) do { } while (0)
+#endif
+
+#ifndef START_OPERATOR_RELOCATION
+#  define START_OPERATOR_RELOCATION(scan) do { } while (0)
+#endif
+#ifndef END_OPERATOR_RELOCATION
+#  define END_OPERATOR_RELOCATION(scan) do { } while (0)
+#endif
+
 #endif /* CMPGC_H_INCLUDED */
-- 
2.25.1