From ae2f88f891c603cca0f26542ededd975bb3ae4fd Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Sun, 5 May 1991 00:46:18 +0000 Subject: [PATCH] Add support for GLOBAL_OPERATOR_LINKAGE_KIND. --- v7/src/microcode/bchdmp.c | 120 ++++++++++++++++++++---------------- v7/src/microcode/bchgcl.c | 122 +++++++++++++++++++++---------------- v7/src/microcode/bchpur.c | 118 +++++++++++++++++++---------------- v7/src/microcode/boot.c | 25 +++++++- v7/src/microcode/cmpgc.h | 8 ++- v7/src/microcode/fasload.c | 81 ++++++++++++++---------- v7/src/microcode/gcloop.c | 90 ++++++++++++++++----------- v7/src/microcode/purify.c | 90 ++++++++++++++++----------- v7/src/microcode/purutl.c | 41 +++++++++---- v7/src/microcode/uxtrap.c | 24 ++++++-- v7/src/microcode/version.h | 4 +- v8/src/microcode/version.h | 4 +- 12 files changed, 436 insertions(+), 291 deletions(-) diff --git a/v7/src/microcode/bchdmp.c b/v7/src/microcode/bchdmp.c index 5244018a8..cf8afe448 100644 --- a/v7/src/microcode/bchdmp.c +++ b/v7/src/microcode/bchdmp.c @@ -1,8 +1,8 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchdmp.c,v 9.54 1990/11/29 00:18:23 cph Rel $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchdmp.c,v 9.55 1991/05/05 00:45:16 jinx Exp $ -Copyright (c) 1987, 1988, 1989, 1990 Massachusetts Institute of Technology +Copyright (c) 1987-1991 Massachusetts Institute of Technology This material was developed by the Scheme project at the Massachusetts Institute of Technology, Department of Electrical Engineering and @@ -377,71 +377,85 @@ DEFUN (dumploop, (Scan, To_ptr, To_Address_ptr), case TC_LINKAGE_SECTION: { - if ((READ_LINKAGE_KIND (Temp)) != OPERATOR_LINKAGE_KIND) + switch (READ_LINKAGE_KIND (Temp)) { - /* count typeless pointers to quads follow. */ + case REFERENCE_LINKAGE_KIND: + case ASSIGNMENT_LINKAGE_KIND: + { + /* count typeless pointers to quads follow. */ - fast long count; - long max_count, max_here; + fast long count; + long max_count, max_here; - Scan++; - max_here = (scan_buffer_top - Scan); - max_count = (READ_CACHE_LINKAGE_COUNT (Temp)); - while (max_count != 0) - { - count = ((max_count > max_here) ? max_here : max_count); - max_count -= count; - for ( ; --count >= 0; Scan += 1) + Scan++; + max_here = (scan_buffer_top - Scan); + max_count = (READ_CACHE_LINKAGE_COUNT (Temp)); + while (max_count != 0) { - Temp = *Scan; - fasdump_typeless_pointer (copy_quadruple (), 4); - } - if (max_count != 0) - { - /* We stopped because we needed to relocate too many. */ - Scan = (dump_and_reload_scan_buffer (0, NULL)); - max_here = GC_DISK_BUFFER_SIZE; + count = ((max_count > max_here) ? max_here : max_count); + max_count -= count; + for ( ; --count >= 0; Scan += 1) + { + Temp = *Scan; + fasdump_typeless_pointer (copy_quadruple (), 4); + } + if (max_count != 0) + { + /* We stopped because we needed to relocate too many. */ + Scan = (dump_and_reload_scan_buffer (0, NULL)); + max_here = GC_DISK_BUFFER_SIZE; + } } + /* The + & -1 are here because of the Scan++ in the for header. */ + Scan -= 1; + break; } - /* The + & -1 are here because of the Scan++ in the for header. */ - Scan -= 1; - break; - } - else - { - /* Operator linkage */ + case OPERATOR_LINKAGE_KIND: + case GLOBAL_OPERATOR_LINKAGE_KIND: + { + /* Operator linkage */ - fast long count; - fast char *word_ptr, *next_ptr; - long overflow; + fast long count; + fast char *word_ptr, *next_ptr; + long overflow; - count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); - word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); - overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) - - scan_buffer_top); + count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); + word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); + overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) - + scan_buffer_top); - for (next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); - (--count >= 0); - word_ptr = next_ptr, - next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr))) - { - if (next_ptr > ((char *) scan_buffer_top)) + for (next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); + (--count >= 0); + word_ptr = next_ptr, + next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr))) { - extend_scan_buffer (((char *) next_ptr), To); - fasdump_linked_operator (); - next_ptr = ((char *) - (end_scan_buffer_extension ((char *) next_ptr))); - overflow -= GC_DISK_BUFFER_SIZE; - } - else - { - fasdump_linked_operator (); + if (next_ptr > ((char *) scan_buffer_top)) + { + extend_scan_buffer (((char *) next_ptr), To); + fasdump_linked_operator (); + next_ptr = ((char *) + (end_scan_buffer_extension ((char *) next_ptr))); + overflow -= GC_DISK_BUFFER_SIZE; + } + else + { + fasdump_linked_operator (); + } } + Scan = (scan_buffer_top + overflow); + break; + } + + default: + { + gc_death (TERM_EXIT, + "fasdump: Unknown compiler linkage kind.", + Scan, Free); + /*NOTREACHED*/ } - Scan = (scan_buffer_top + overflow); - break; } + break; } case TC_MANIFEST_CLOSURE: diff --git a/v7/src/microcode/bchgcl.c b/v7/src/microcode/bchgcl.c index 55ad21b2e..e8de30164 100644 --- a/v7/src/microcode/bchgcl.c +++ b/v7/src/microcode/bchgcl.c @@ -1,8 +1,8 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchgcl.c,v 9.40 1990/04/01 20:26:39 jinx Rel $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchgcl.c,v 9.41 1991/05/05 00:45:23 jinx Exp $ -Copyright (c) 1987, 1988, 1989, 1990 Massachusetts Institute of Technology +Copyright (c) 1987-1991 Massachusetts Institute of Technology This material was developed by the Scheme project at the Massachusetts Institute of Technology, Department of Electrical Engineering and @@ -40,7 +40,7 @@ MIT in each case. */ #include "bchgcc.h" SCHEME_OBJECT * -GCLoop(Scan, To_ptr, To_Address_ptr) +GCLoop (Scan, To_ptr, To_Address_ptr) fast SCHEME_OBJECT *Scan; SCHEME_OBJECT **To_ptr, **To_Address_ptr; { @@ -98,71 +98,85 @@ GCLoop(Scan, To_ptr, To_Address_ptr) case TC_LINKAGE_SECTION: { - if (READ_LINKAGE_KIND(Temp) != OPERATOR_LINKAGE_KIND) + switch (READ_LINKAGE_KIND(Temp)) { - /* count typeless pointers to quads follow. */ + case REFERENCE_LINKAGE_KIND: + case ASSIGNMENT_LINKAGE_KIND: + { + /* count typeless pointers to quads follow. */ - fast long count; - long max_count, max_here; + fast long count; + long max_count, max_here; - Scan++; - max_here = (scan_buffer_top - Scan); - max_count = READ_CACHE_LINKAGE_COUNT(Temp); - while (max_count != 0) - { - count = ((max_count > max_here) ? max_here : max_count); - max_count -= count; - for ( ; --count >= 0; Scan += 1) + Scan++; + max_here = (scan_buffer_top - Scan); + max_count = READ_CACHE_LINKAGE_COUNT(Temp); + while (max_count != 0) { - Temp = *Scan; - relocate_typeless_pointer(copy_quadruple(), 4); - } - if (max_count != 0) - { - /* We stopped because we needed to relocate too many. */ - Scan = dump_and_reload_scan_buffer(0, NULL); - max_here = GC_DISK_BUFFER_SIZE; + count = ((max_count > max_here) ? max_here : max_count); + max_count -= count; + for ( ; --count >= 0; Scan += 1) + { + Temp = *Scan; + relocate_typeless_pointer(copy_quadruple(), 4); + } + if (max_count != 0) + { + /* We stopped because we needed to relocate too many. */ + Scan = dump_and_reload_scan_buffer(0, NULL); + max_here = GC_DISK_BUFFER_SIZE; + } } + /* The + & -1 are here because of the Scan++ in the for header. */ + Scan -= 1; + break; } - /* The + & -1 are here because of the Scan++ in the for header. */ - Scan -= 1; - break; - } - else - { - /* Operator linkage */ + case OPERATOR_LINKAGE_KIND: + case GLOBAL_OPERATOR_LINKAGE_KIND: + { + /* Operator linkage */ - fast long count; - fast char *word_ptr, *next_ptr; - long overflow; + fast long count; + fast char *word_ptr, *next_ptr; + long overflow; - count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); - word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); - overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) - - scan_buffer_top); + count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); + word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); + overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) - + scan_buffer_top); - for (next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); - (--count >= 0); - word_ptr = next_ptr, - next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr))) - { - if (next_ptr > ((char *) scan_buffer_top)) + for (next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); + (--count >= 0); + word_ptr = next_ptr, + next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr))) { - extend_scan_buffer ((char *) next_ptr, To); - relocate_linked_operator (true); - next_ptr = ((char *) - (end_scan_buffer_extension ((char *) next_ptr))); - overflow -= GC_DISK_BUFFER_SIZE; - } - else - { - relocate_linked_operator (true); + if (next_ptr > ((char *) scan_buffer_top)) + { + extend_scan_buffer ((char *) next_ptr, To); + relocate_linked_operator (true); + next_ptr = ((char *) + (end_scan_buffer_extension ((char *) next_ptr))); + overflow -= GC_DISK_BUFFER_SIZE; + } + else + { + relocate_linked_operator (true); + } } + Scan = (scan_buffer_top + overflow); + break; + } + + default: + { + gc_death (TERM_EXIT, + "GC: Unknown compiler linkage kind.", + Scan, Free); + /*NOTREACHED*/ } - Scan = (scan_buffer_top + overflow); - break; } + break; } case TC_MANIFEST_CLOSURE: diff --git a/v7/src/microcode/bchpur.c b/v7/src/microcode/bchpur.c index 564c93e1e..850901a4f 100644 --- a/v7/src/microcode/bchpur.c +++ b/v7/src/microcode/bchpur.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchpur.c,v 9.52 1991/02/26 21:15:56 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/bchpur.c,v 9.53 1991/05/05 00:45:30 jinx Exp $ Copyright (c) 1987-91 Massachusetts Institute of Technology @@ -146,71 +146,85 @@ DEFUN (purifyloop, (Scan, To_ptr, To_Address_ptr, purify_mode), Scan, To); /*NOTREACHED*/ } - if ((READ_LINKAGE_KIND (Temp)) != OPERATOR_LINKAGE_KIND) + switch (READ_LINKAGE_KIND (Temp)) { - /* count typeless pointers to quads follow. */ + case REFERENCE_LINKAGE_KIND: + case ASSIGNMENT_LINKAGE_KIND: + { + /* count typeless pointers to quads follow. */ - fast long count; - long max_count, max_here; + fast long count; + long max_count, max_here; - Scan++; - max_here = (scan_buffer_top - Scan); - max_count = (READ_CACHE_LINKAGE_COUNT (Temp)); - while (max_count != 0) - { - count = ((max_count > max_here) ? max_here : max_count); - max_count -= count; - for ( ; --count >= 0; Scan += 1) + Scan++; + max_here = (scan_buffer_top - Scan); + max_count = (READ_CACHE_LINKAGE_COUNT (Temp)); + while (max_count != 0) { - Temp = *Scan; - relocate_typeless_pointer (copy_quadruple(), 4); - } - if (max_count != 0) - { - /* We stopped because we needed to relocate too many. */ - Scan = dump_and_reload_scan_buffer(0, NULL); - max_here = GC_DISK_BUFFER_SIZE; + count = ((max_count > max_here) ? max_here : max_count); + max_count -= count; + for ( ; --count >= 0; Scan += 1) + { + Temp = *Scan; + relocate_typeless_pointer (copy_quadruple(), 4); + } + if (max_count != 0) + { + /* We stopped because we needed to relocate too many. */ + Scan = dump_and_reload_scan_buffer(0, NULL); + max_here = GC_DISK_BUFFER_SIZE; + } } + /* The + & -1 are here because of the Scan++ in the for header. */ + Scan -= 1; + break; } - /* The + & -1 are here because of the Scan++ in the for header. */ - Scan -= 1; - break; - } - else - { - /* Operator linkage */ + case OPERATOR_LINKAGE_KIND: + case GLOBAL_OPERATOR_LINKAGE_KIND: + { + /* Operator linkage */ - fast long count; - fast char *word_ptr, *next_ptr; - long overflow; + fast long count; + fast char *word_ptr, *next_ptr; + long overflow; - count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); - word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); - overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) - - scan_buffer_top); + count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); + word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); + overflow = ((END_OPERATOR_LINKAGE_AREA (Scan, count)) - + scan_buffer_top); - for (next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); - (--count >= 0); - word_ptr = next_ptr, - next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr))) - { - if (next_ptr > ((char *) scan_buffer_top)) + for (next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); + (--count >= 0); + word_ptr = next_ptr, + next_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr))) { - extend_scan_buffer (((char *) next_ptr), To); - relocate_linked_operator (false); - next_ptr = ((char *) - (end_scan_buffer_extension ((char *) next_ptr))); - overflow -= GC_DISK_BUFFER_SIZE; - } - else - { - relocate_linked_operator (false); + if (next_ptr > ((char *) scan_buffer_top)) + { + extend_scan_buffer (((char *) next_ptr), To); + relocate_linked_operator (false); + next_ptr = ((char *) + (end_scan_buffer_extension ((char *) next_ptr))); + overflow -= GC_DISK_BUFFER_SIZE; + } + else + { + relocate_linked_operator (false); + } } + Scan = (scan_buffer_top + overflow); + break; + } + + default: + { + gc_death (TERM_EXIT, + "purify: Unknown compiler linkage kind.", + Scan, Free); + /*NOTREACHED*/ } - Scan = (scan_buffer_top + overflow); - break; } + break; } case TC_MANIFEST_CLOSURE: diff --git a/v7/src/microcode/boot.c b/v7/src/microcode/boot.c index fa3e018db..b1425db3a 100644 --- a/v7/src/microcode/boot.c +++ b/v7/src/microcode/boot.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/boot.c,v 9.69 1991/05/02 06:12:32 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/boot.c,v 9.70 1991/05/05 00:45:37 jinx Exp $ Copyright (c) 1988-1991 Massachusetts Institute of Technology @@ -259,6 +259,29 @@ DEFUN_VOID (make_fixed_objects_vector) (fixed_objects_vector, GENERIC_TRAMPOLINE_DIVIDE, SHARP_F); + FAST_VECTOR_SET + (fixed_objects_vector, + GENERIC_TRAMPOLINE_QUOTIENT, + SHARP_F); + FAST_VECTOR_SET + (fixed_objects_vector, + GENERIC_TRAMPOLINE_REMAINDER, + SHARP_F); + FAST_VECTOR_SET + (fixed_objects_vector, + GENERIC_TRAMPOLINE_MODULO, + SHARP_F); + + /* This guarantees that it will not be EQ? to anything + until smashed by the runtime system. + */ + + (*Free++) = EMPTY_LIST; + (*Free++) = EMPTY_LIST; + FAST_VECTOR_SET + (fixed_objects_vector, + ARITY_DISPATCHER_TAG, + (MAKE_POINTER_OBJECT (TC_LIST, (Free - 2)))); return (fixed_objects_vector); } diff --git a/v7/src/microcode/cmpgc.h b/v7/src/microcode/cmpgc.h index 9e62335c8..edec2b986 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.15 1991/03/22 06:27:39 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/cmpgc.h,v 1.16 1991/05/05 00:40:42 jinx Exp $ Copyright (c) 1989-1991 Massachusetts Institute of Technology @@ -232,6 +232,7 @@ MAKE_POINTER_OBJECT((OBJECT_TYPE(object)), \ #define OPERATOR_LINKAGE_KIND 0x000000 #define REFERENCE_LINKAGE_KIND 0x010000 #define ASSIGNMENT_LINKAGE_KIND 0x020000 +#define GLOBAL_OPERATOR_LINKAGE_KIND 0x030000 #define READ_LINKAGE_KIND(header) \ ((header) & 0xff0000) @@ -245,8 +246,9 @@ MAKE_POINTER_OBJECT((OBJECT_TYPE(object)), \ #define MAKE_LINKAGE_SECTION_HEADER(kind, count) \ (MAKE_OBJECT(TC_LINKAGE_SECTION, \ ((kind) | \ - (((kind) == OPERATOR_LINKAGE_KIND) ? \ - (EXECUTE_CACHE_ENTRIES_TO_COUNT(count)) : \ + ((((kind) == OPERATOR_LINKAGE_KIND) \ + || ((kind) == GLOBAL_OPERATOR_LINKAGE_KIND)) ? \ + (EXECUTE_CACHE_ENTRIES_TO_COUNT (count)) : \ (count))))) /* This takes into account the 1 added by the main loop of the diff --git a/v7/src/microcode/fasload.c b/v7/src/microcode/fasload.c index 1b5d25cf8..9884b6899 100644 --- a/v7/src/microcode/fasload.c +++ b/v7/src/microcode/fasload.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/fasload.c,v 9.61 1991/03/21 23:26:27 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/fasload.c,v 9.62 1991/05/05 00:45:46 jinx Exp $ Copyright (c) 1987-1991 Massachusetts Institute of Technology @@ -459,46 +459,61 @@ DEFUN (Relocate_Block, (Scan, Stop_At), This also applies to TC_MANIFEST_CLOSURE. The lines affected are the ones where ADDRESS_TO_DATUM is used. */ - if (READ_LINKAGE_KIND(Temp) != OPERATOR_LINKAGE_KIND) + switch (READ_LINKAGE_KIND(Temp)) { - /* Assumes that all others are objects of type TC_QUAD without - their type codes. - */ - - fast long count; - - Scan++; - for (count = (READ_CACHE_LINKAGE_COUNT (Temp)); - --count >= 0; - ) + case REFERENCE_LINKAGE_KIND: + case ASSIGNMENT_LINKAGE_KIND: { - address = (ADDRESS_TO_DATUM ((SCHEME_OBJECT *) (*Scan))); - *Scan++ = ((SCHEME_OBJECT) (Relocate (address))); + /* Assumes that all others are objects of type TC_QUAD without + their type codes. + */ + + fast long count; + + Scan++; + for (count = (READ_CACHE_LINKAGE_COUNT (Temp)); + --count >= 0; + ) + { + address = (ADDRESS_TO_DATUM ((SCHEME_OBJECT *) (*Scan))); + *Scan++ = ((SCHEME_OBJECT) (Relocate (address))); + } + break; } - break; - } - else - { - fast long count; - fast char *word_ptr; - SCHEME_OBJECT *end_scan; - count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); - word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); - end_scan = (END_OPERATOR_LINKAGE_AREA (Scan, count)); + case OPERATOR_LINKAGE_KIND: + case GLOBAL_OPERATOR_LINKAGE_KIND: + { + fast long count; + fast char *word_ptr; + SCHEME_OBJECT *end_scan; + + count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); + word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); + end_scan = (END_OPERATOR_LINKAGE_AREA (Scan, count)); + + while(--count >= 0) + { + Scan = ((SCHEME_OBJECT *) (word_ptr)); + word_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); + EXTRACT_OPERATOR_LINKAGE_ADDRESS (address, Scan); + address = (ADDRESS_TO_DATUM ((SCHEME_OBJECT *) address)); + address = ((long) (Relocate (address))); + STORE_OPERATOR_LINKAGE_ADDRESS (address, Scan); + } + Scan = &end_scan[1]; + break; + } - while(--count >= 0) + default: { - Scan = ((SCHEME_OBJECT *) (word_ptr)); - word_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); - EXTRACT_OPERATOR_LINKAGE_ADDRESS (address, Scan); - address = (ADDRESS_TO_DATUM ((SCHEME_OBJECT *) address)); - address = ((long) (Relocate (address))); - STORE_OPERATOR_LINKAGE_ADDRESS (address, Scan); + gc_death (TERM_EXIT, + "Relocate_Block: Unknown compiler linkage kind.", + Scan, NULL); + /*NOTREACHED*/ } - Scan = &end_scan[1]; - break; } + break; } case TC_MANIFEST_CLOSURE: diff --git a/v7/src/microcode/gcloop.c b/v7/src/microcode/gcloop.c index 43222dda0..0932b7341 100644 --- a/v7/src/microcode/gcloop.c +++ b/v7/src/microcode/gcloop.c @@ -1,6 +1,6 @@ /* -*-C-*- -Copyright (c) 1987, 1988, 1989, 1990 Massachusetts Institute of Technology +Copyright (c) 1987-1991 Massachusetts Institute of Technology This material was developed by the Scheme project at the Massachusetts Institute of Technology, Department of Electrical Engineering and @@ -30,7 +30,7 @@ Technology nor of any adaptation thereof in any advertising, promotional, or sales literature without prior written consent from MIT in each case. */ -/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/gcloop.c,v 9.34 1990/01/20 07:29:47 cph Rel $ +/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/gcloop.c,v 9.35 1991/05/05 00:45:55 jinx Exp $ * * This file contains the code for the most primitive part * of garbage collection. @@ -152,49 +152,65 @@ GCLoop(Scan, To_Pointer) case TC_LINKAGE_SECTION: { - if (READ_LINKAGE_KIND(Temp) != OPERATOR_LINKAGE_KIND) + switch (READ_LINKAGE_KIND (Temp)) { - /* Assumes that all others are objects of type TC_QUAD without - their type codes. - */ - - fast long count; - - Scan++; - for (count = READ_CACHE_LINKAGE_COUNT(Temp); - --count >= 0; - Scan += 1) + case REFERENCE_LINKAGE_KIND: + case ASSIGNMENT_LINKAGE_KIND: { - Temp = *Scan; - Setup_Pointer_for_GC(Transport_Quadruple()); + /* Assumes that all others are objects of type TC_QUAD without + their type codes. + */ + + fast long count; + + Scan++; + for (count = READ_CACHE_LINKAGE_COUNT(Temp); + --count >= 0; + Scan += 1) + { + Temp = *Scan; + Setup_Pointer_for_GC(Transport_Quadruple()); + } + Scan -= 1; + break; } - Scan -= 1; - break; - } - else - { - fast long count; - fast char *word_ptr; - SCHEME_OBJECT *end_scan; - count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); - word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); - end_scan = (END_OPERATOR_LINKAGE_AREA (Scan, count)); + case OPERATOR_LINKAGE_KIND: + case GLOBAL_OPERATOR_LINKAGE_KIND: + { + fast long count; + fast char *word_ptr; + SCHEME_OBJECT *end_scan; + + count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); + word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); + end_scan = (END_OPERATOR_LINKAGE_AREA (Scan, count)); + + while(--count >= 0) + { + Scan = ((SCHEME_OBJECT *) word_ptr); + word_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); + EXTRACT_OPERATOR_LINKAGE_ADDRESS (Temp, Scan); + GC_Pointer(Setup_Internal(true, + Transport_Compiled(), + Compiled_BH(true, + goto next_operator))); + next_operator: + STORE_OPERATOR_LINKAGE_ADDRESS (Temp, Scan); + } + Scan = end_scan; + break; + } - while(--count >= 0) + default: { - Scan = ((SCHEME_OBJECT *) word_ptr); - word_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); - EXTRACT_OPERATOR_LINKAGE_ADDRESS (Temp, Scan); - GC_Pointer(Setup_Internal(true, - Transport_Compiled(), - Compiled_BH(true, goto next_operator))); - next_operator: - STORE_OPERATOR_LINKAGE_ADDRESS (Temp, Scan); + gc_death (TERM_EXIT, + "GC: Unknown compiler linkage kind.", + Scan, Free); + /*NOTREACHED*/ } - Scan = end_scan; - break; } + break; } case TC_MANIFEST_CLOSURE: diff --git a/v7/src/microcode/purify.c b/v7/src/microcode/purify.c index c2422d6a5..aa597f4af 100644 --- a/v7/src/microcode/purify.c +++ b/v7/src/microcode/purify.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/purify.c,v 9.45 1991/02/24 01:10:56 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/purify.c,v 9.46 1991/05/05 00:46:02 jinx Exp $ Copyright (c) 1988-1991 Massachusetts Institute of Technology @@ -126,50 +126,66 @@ DEFUN (PurifyLoop, Scan, To); /*NOTREACHED*/ } - if (READ_LINKAGE_KIND(Temp) != OPERATOR_LINKAGE_KIND) - { - /* Assumes that all others are objects of type TC_QUAD without - their type codes. - */ - - fast long count; - Scan++; - for (count = READ_CACHE_LINKAGE_COUNT(Temp); - --count >= 0; - Scan += 1) + switch (READ_LINKAGE_KIND (Temp)) + { + case REFERENCE_LINKAGE_KIND: + case ASSIGNMENT_LINKAGE_KIND: { - Temp = *Scan; - Setup_Pointer_for_Purify(Transport_Quadruple()); + /* Assumes that all others are objects of type TC_QUAD without + their type codes. + */ + + fast long count; + + Scan++; + for (count = READ_CACHE_LINKAGE_COUNT(Temp); + --count >= 0; + Scan += 1) + { + Temp = *Scan; + Setup_Pointer_for_Purify(Transport_Quadruple()); + } + Scan -= 1; + break; } - Scan -= 1; - break; - } - else - { - fast long count; - fast char *word_ptr; - SCHEME_OBJECT *end_scan; - count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); - word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); - end_scan = (END_OPERATOR_LINKAGE_AREA (Scan, count)); + case OPERATOR_LINKAGE_KIND: + case GLOBAL_OPERATOR_LINKAGE_KIND: + { + fast long count; + fast char *word_ptr; + SCHEME_OBJECT *end_scan; + + count = (READ_OPERATOR_LINKAGE_COUNT (Temp)); + word_ptr = (FIRST_OPERATOR_LINKAGE_ENTRY (Scan)); + end_scan = (END_OPERATOR_LINKAGE_AREA (Scan, count)); + + while(--count >= 0) + { + Scan = ((SCHEME_OBJECT *) word_ptr); + word_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); + EXTRACT_OPERATOR_LINKAGE_ADDRESS (Temp, Scan); + Purify_Pointer(Setup_Internal(false, + Transport_Compiled(), + Compiled_BH(false, + goto next_operator))); + next_operator: + STORE_OPERATOR_LINKAGE_ADDRESS(Temp, Scan); + } + Scan = end_scan; + break; + } - while(--count >= 0) + default: { - Scan = ((SCHEME_OBJECT *) word_ptr); - word_ptr = (NEXT_LINKAGE_OPERATOR_ENTRY (word_ptr)); - EXTRACT_OPERATOR_LINKAGE_ADDRESS (Temp, Scan); - Purify_Pointer(Setup_Internal(false, - Transport_Compiled(), - Compiled_BH(false, - goto next_operator))); - next_operator: - STORE_OPERATOR_LINKAGE_ADDRESS(Temp, Scan); + gc_death (TERM_EXIT, + "purifyloop: Unknown compiler linkage kind.", + Scan, Free); + /*NOTREACHED*/ } - Scan = end_scan; - break; } + break; } case TC_MANIFEST_CLOSURE: diff --git a/v7/src/microcode/purutl.c b/v7/src/microcode/purutl.c index 442e34fdf..c56411578 100644 --- a/v7/src/microcode/purutl.c +++ b/v7/src/microcode/purutl.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/purutl.c,v 9.40 1991/02/24 01:11:04 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/purutl.c,v 9.41 1991/05/05 00:46:07 jinx Exp $ Copyright (c) 1987-1991 Massachusetts Institute of Technology @@ -51,12 +51,12 @@ DEFUN (Update, for (; From < To; From++) { - if (GC_Type_Special(*From)) + if (GC_Type_Special (*From)) { - switch(OBJECT_TYPE (*From)) + switch (OBJECT_TYPE (*From)) { case TC_MANIFEST_NM_VECTOR: - From += OBJECT_DATUM (*From); + From += (OBJECT_DATUM (*From)); continue; /* The following two type codes assume that none of the protected @@ -64,17 +64,32 @@ DEFUN (Update, This may be seriously wrong! */ case TC_LINKAGE_SECTION: - if (READ_LINKAGE_KIND(*From) != OPERATOR_LINKAGE_KIND) + switch (READ_LINKAGE_KIND (*From)) { - From += READ_CACHE_LINKAGE_COUNT(*From); - continue; - } - else - { - count = READ_OPERATOR_LINKAGE_COUNT(*From); - From = END_OPERATOR_LINKAGE_AREA(From, count); - continue; + case REFERENCE_LINKAGE_KIND: + case ASSIGNMENT_LINKAGE_KIND: + { + From += (READ_CACHE_LINKAGE_COUNT (*From)); + continue; + } + + case OPERATOR_LINKAGE_KIND: + case GLOBAL_OPERATOR_LINKAGE_KIND: + { + count = (READ_OPERATOR_LINKAGE_COUNT (*From)); + From = (END_OPERATOR_LINKAGE_AREA (From, count)); + continue; + } + + default: + { + gc_death (TERM_EXIT, + "Impurify: Unknown compiler linkage kind.", + From, NULL); + /*NOTREACHED*/ + } } + case TC_MANIFEST_CLOSURE: { diff --git a/v7/src/microcode/uxtrap.c b/v7/src/microcode/uxtrap.c index 14e566eba..e62cd963f 100644 --- a/v7/src/microcode/uxtrap.c +++ b/v7/src/microcode/uxtrap.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxtrap.c,v 1.8 1991/02/24 01:11:22 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/uxtrap.c,v 1.9 1991/05/05 00:46:12 jinx Exp $ Copyright (c) 1990-1991 Massachusetts Institute of Technology @@ -674,13 +674,29 @@ DEFUN (find_block_address_in_area, (pc_value, area_start), { case TC_LINKAGE_SECTION: { - if ((READ_LINKAGE_KIND (object)) != OPERATOR_LINKAGE_KIND) - area += ((READ_CACHE_LINKAGE_COUNT (object)) + 1); - else + switch (READ_LINKAGE_KIND (object)) + { + case REFERENCE_LINKAGE_KIND: + case ASSIGNMENT_LINKAGE_KIND: + area += ((READ_CACHE_LINKAGE_COUNT (object)) + 1); + break; + + case OPERATOR_LINKAGE_KIND: + case GLOBAL_OPERATOR_LINKAGE_KIND: { long count = (READ_OPERATOR_LINKAGE_COUNT (object)); area = ((END_OPERATOR_LINKAGE_AREA (area, count)) + 1); + break; } + + default: + { + gc_death (TERM_EXIT, + "find_block_address: Unknown compiler linkage kind.", + area, NULL); + /*NOTREACHED*/ + } + } break; } case TC_MANIFEST_CLOSURE: diff --git a/v7/src/microcode/version.h b/v7/src/microcode/version.h index 965bb8279..bebb1689f 100644 --- a/v7/src/microcode/version.h +++ b/v7/src/microcode/version.h @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 11.76 1991/04/27 00:43:50 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/Attic/version.h,v 11.77 1991/05/05 00:46:18 jinx Exp $ Copyright (c) 1988-91 Massachusetts Institute of Technology @@ -46,5 +46,5 @@ MIT in each case. */ #define VERSION 11 #endif #ifndef SUBVERSION -#define SUBVERSION 76 +#define SUBVERSION 77 #endif diff --git a/v8/src/microcode/version.h b/v8/src/microcode/version.h index 27ef9ea4d..f3e9d0040 100644 --- a/v8/src/microcode/version.h +++ b/v8/src/microcode/version.h @@ -1,6 +1,6 @@ /* -*-C-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 11.76 1991/04/27 00:43:50 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v8/src/microcode/version.h,v 11.77 1991/05/05 00:46:18 jinx Exp $ Copyright (c) 1988-91 Massachusetts Institute of Technology @@ -46,5 +46,5 @@ MIT in each case. */ #define VERSION 11 #endif #ifndef SUBVERSION -#define SUBVERSION 76 +#define SUBVERSION 77 #endif -- 2.25.1