X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fgc-common.c;h=2dfe4c9e49dfe7c05af5f7a750ce18e4bac1ccd1;hb=eb5265ab22a2b1cae18bbdf43c871dba9b5927ea;hp=861029456d7743eadb0e0c17a519636261a47903;hpb=d2e48d5a1805e3fb98268473a71aff38d8fd9d0b;p=sbcl.git diff --git a/src/runtime/gc-common.c b/src/runtime/gc-common.c index 8610294..2dfe4c9 100644 --- a/src/runtime/gc-common.c +++ b/src/runtime/gc-common.c @@ -15,21 +15,6 @@ */ /* - * GENerational Conservative Garbage Collector for SBCL x86 - */ - -/* - * This software is part of the SBCL system. See the README file for - * more information. - * - * This software is derived from the CMU CL system, which was - * written at Carnegie Mellon University and released into the - * public domain. The software is in the public domain and is - * provided with absolutely no warranty. See the COPYING and CREDITS - * files for more information. - */ - -/* * For a review of garbage collection techniques (e.g. generational * GC) and terminology (e.g. "scavenging") see Paul R. Wilson, * "Uniprocessor Garbage Collection Techniques". As of 20000618, this @@ -42,8 +27,9 @@ #include #include -#include "runtime.h" +#include #include "sbcl.h" +#include "runtime.h" #include "os.h" #include "interr.h" #include "globals.h" @@ -99,6 +85,9 @@ lispobj (*transother[256])(lispobj object); int (*sizetab[256])(lispobj *where); struct weak_pointer *weak_pointers; +unsigned long bytes_consed_between_gcs = 12*1024*1024; + + /* * copying objects */ @@ -109,7 +98,6 @@ copy_object(lispobj object, int nwords) { int tag; lispobj *new; - lispobj *source, *dest; gc_assert(is_lisp_pointer(object)); gc_assert(from_space_p(object)); @@ -119,20 +107,10 @@ copy_object(lispobj object, int nwords) tag = lowtag_of(object); /* Allocate space. */ - new = gc_general_alloc(nwords*4,ALLOC_BOXED,ALLOC_QUICK); - - dest = new; - source = (lispobj *) native_pointer(object); + new = gc_general_alloc(nwords*N_WORD_BYTES,ALLOC_BOXED,ALLOC_QUICK); /* Copy the object. */ - while (nwords > 0) { - dest[0] = source[0]; - dest[1] = source[1]; - dest += 2; - source += 2; - nwords -= 2; - } - + memcpy(new,native_pointer(object),nwords*N_WORD_BYTES); return make_lispobj(new,tag); } @@ -141,14 +119,12 @@ static int scav_lose(lispobj *where, lispobj object); /* forward decl */ /* FIXME: Most calls end up going to some trouble to compute an * 'n_words' value for this function. The system might be a little * simpler if this function used an 'end' parameter instead. */ - void scavenge(lispobj *start, long n_words) { lispobj *end = start + n_words; lispobj *object_ptr; int n_words_scavenged; - for (object_ptr = start; object_ptr < end; object_ptr += n_words_scavenged) { @@ -199,7 +175,7 @@ scavenge(lispobj *start, long n_words) } } #endif - else if ((object & 3) == 0) { + else if (fixnump(object)) { /* It's a fixnum: really easy.. */ n_words_scavenged = 1; } else { @@ -230,7 +206,6 @@ scav_fun_pointer(lispobj *where, lispobj object) switch (widetag_of(*first_pointer)) { case SIMPLE_FUN_HEADER_WIDETAG: - case CLOSURE_FUN_HEADER_WIDETAG: copy = trans_fun_header(object); break; default: @@ -325,7 +300,7 @@ trans_code(struct code *code) /* fix self pointer. */ nfheaderp->self = -#ifdef LISP_FEATURE_GENCGC /* GENCGC? Maybe x86 is better conditional */ +#ifdef LISP_FEATURE_X86 FUN_RAW_ADDR_OFFSET + #endif nfheaderl; @@ -405,6 +380,7 @@ size_code_header(lispobj *where) return nwords; } +#ifndef LISP_FEATURE_X86 static int scav_return_pc_header(lispobj *where, lispobj object) { @@ -413,6 +389,7 @@ scav_return_pc_header(lispobj *where, lispobj object) (unsigned long) object); return 0; /* bogus return value to satisfy static type checking */ } +#endif /* LISP_FEATURE_X86 */ static lispobj trans_return_pc_header(lispobj object) @@ -422,7 +399,8 @@ trans_return_pc_header(lispobj object) struct code *code, *ncode; return_pc = (struct simple_fun *) native_pointer(object); - offset = HeaderValue(return_pc->header) * 4 ; + /* FIXME: was times 4, should it really be N_WORD_BYTES? */ + offset = HeaderValue(return_pc->header) * N_WORD_BYTES; /* Transport the whole code object */ code = (struct code *) ((unsigned long) return_pc - offset); @@ -457,6 +435,7 @@ scav_closure_header(lispobj *where, lispobj object) } #endif +#ifndef LISP_FEATURE_X86 static int scav_fun_header(lispobj *where, lispobj object) { @@ -465,6 +444,7 @@ scav_fun_header(lispobj *where, lispobj object) (unsigned long) object); return 0; /* bogus return value to satisfy static type checking */ } +#endif /* LISP_FEATURE_X86 */ static lispobj trans_fun_header(lispobj object) @@ -474,7 +454,8 @@ trans_fun_header(lispobj object) struct code *code, *ncode; fheader = (struct simple_fun *) native_pointer(object); - offset = HeaderValue(fheader->header) * 4; + /* FIXME: was times 4, should it really be N_WORD_BYTES? */ + offset = HeaderValue(fheader->header) * N_WORD_BYTES; /* Transport the whole code object */ code = (struct code *) ((unsigned long) fheader - offset); @@ -711,8 +692,7 @@ scav_fdefn(lispobj *where, lispobj object) fdefn->raw_addr = (char *)(fdefn->fun + FUN_RAW_ADDR_OFFSET); /* gc.c has more casts here, which may be relevant or alternatively may be compiler warning defeaters. try - fdefn->raw_addr = - (u32) ((char *) LOW_WORD(fdefn->fun)) + FUN_RAW_ADDR_OFFSET; + fdefn->raw_addr = ((char *) LOW_WORD(fdefn->fun)) + FUN_RAW_ADDR_OFFSET; */ return sizeof(struct fdefn) / sizeof(lispobj); } else { @@ -764,9 +744,7 @@ size_unboxed(lispobj *where) static int /* vector-like objects */ -#define NWORDS(x,y) (CEILING((x),(y)) / (y)) - -scav_string(lispobj *where, lispobj object) +scav_base_string(lispobj *where, lispobj object) { struct vector *vector; int length, nwords; @@ -776,12 +754,12 @@ scav_string(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length) + 1; - nwords = CEILING(NWORDS(length, 4) + 2, 2); + nwords = CEILING(NWORDS(length, 8) + 2, 2); return nwords; } static lispobj -trans_string(lispobj object) +trans_base_string(lispobj object) { struct vector *vector; int length, nwords; @@ -794,13 +772,13 @@ trans_string(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length) + 1; - nwords = CEILING(NWORDS(length, 4) + 2, 2); + nwords = CEILING(NWORDS(length, 8) + 2, 2); return copy_large_unboxed_object(object, nwords); } static int -size_string(lispobj *where) +size_base_string(lispobj *where) { struct vector *vector; int length, nwords; @@ -811,7 +789,7 @@ size_string(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length) + 1; - nwords = CEILING(NWORDS(length, 4) + 2, 2); + nwords = CEILING(NWORDS(length, 8) + 2, 2); return nwords; } @@ -846,6 +824,26 @@ size_vector(lispobj *where) } static int +scav_vector_nil(lispobj *where, lispobj object) +{ + return 2; +} + +static lispobj +trans_vector_nil(lispobj object) +{ + gc_assert(is_lisp_pointer(object)); + return copy_unboxed_object(object, 2); +} + +static int +size_vector_nil(lispobj *where) +{ + /* Just the header word and the length word */ + return 2; +} + +static int scav_vector_bit(lispobj *where, lispobj object) { struct vector *vector; @@ -853,7 +851,7 @@ scav_vector_bit(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 32) + 2, 2); + nwords = CEILING(NWORDS(length, 1) + 2, 2); return nwords; } @@ -868,7 +866,7 @@ trans_vector_bit(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 32) + 2, 2); + nwords = CEILING(NWORDS(length, 1) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -881,7 +879,7 @@ size_vector_bit(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 32) + 2, 2); + nwords = CEILING(NWORDS(length, 1) + 2, 2); return nwords; } @@ -894,7 +892,7 @@ scav_vector_unsigned_byte_2(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 16) + 2, 2); + nwords = CEILING(NWORDS(length, 2) + 2, 2); return nwords; } @@ -909,7 +907,7 @@ trans_vector_unsigned_byte_2(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 16) + 2, 2); + nwords = CEILING(NWORDS(length, 2) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -922,7 +920,7 @@ size_vector_unsigned_byte_2(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 16) + 2, 2); + nwords = CEILING(NWORDS(length, 2) + 2, 2); return nwords; } @@ -935,7 +933,7 @@ scav_vector_unsigned_byte_4(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 8) + 2, 2); + nwords = CEILING(NWORDS(length, 4) + 2, 2); return nwords; } @@ -950,7 +948,7 @@ trans_vector_unsigned_byte_4(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 8) + 2, 2); + nwords = CEILING(NWORDS(length, 4) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -962,7 +960,7 @@ size_vector_unsigned_byte_4(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 8) + 2, 2); + nwords = CEILING(NWORDS(length, 4) + 2, 2); return nwords; } @@ -976,7 +974,7 @@ scav_vector_unsigned_byte_8(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 4) + 2, 2); + nwords = CEILING(NWORDS(length, 8) + 2, 2); return nwords; } @@ -995,7 +993,7 @@ trans_vector_unsigned_byte_8(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 4) + 2, 2); + nwords = CEILING(NWORDS(length, 8) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -1008,7 +1006,7 @@ size_vector_unsigned_byte_8(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 4) + 2, 2); + nwords = CEILING(NWORDS(length, 8) + 2, 2); return nwords; } @@ -1022,7 +1020,7 @@ scav_vector_unsigned_byte_16(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 2) + 2, 2); + nwords = CEILING(NWORDS(length, 16) + 2, 2); return nwords; } @@ -1037,7 +1035,7 @@ trans_vector_unsigned_byte_16(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 2) + 2, 2); + nwords = CEILING(NWORDS(length, 16) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -1050,7 +1048,7 @@ size_vector_unsigned_byte_16(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(NWORDS(length, 2) + 2, 2); + nwords = CEILING(NWORDS(length, 16) + 2, 2); return nwords; } @@ -1063,7 +1061,7 @@ scav_vector_unsigned_byte_32(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length + 2, 2); + nwords = CEILING(NWORDS(length, 32) + 2, 2); return nwords; } @@ -1078,7 +1076,7 @@ trans_vector_unsigned_byte_32(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(length + 2, 2); + nwords = CEILING(NWORDS(length, 32) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -1091,10 +1089,53 @@ size_vector_unsigned_byte_32(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length + 2, 2); + nwords = CEILING(NWORDS(length, 32) + 2, 2); + + return nwords; +} + +#if N_WORD_BITS == 64 +static int +scav_vector_unsigned_byte_64(lispobj *where, lispobj object) +{ + struct vector *vector; + int length, nwords; + + vector = (struct vector *) where; + length = fixnum_value(vector->length); + nwords = CEILING(NWORDS(length, 64) + 2, 2); + + return nwords; +} + +static lispobj +trans_vector_unsigned_byte_64(lispobj object) +{ + struct vector *vector; + int length, nwords; + + gc_assert(is_lisp_pointer(object)); + + vector = (struct vector *) native_pointer(object); + length = fixnum_value(vector->length); + nwords = CEILING(NWORDS(length, 64) + 2, 2); + + return copy_large_unboxed_object(object, nwords); +} + +static int +size_vector_unsigned_byte_64(lispobj *where) +{ + struct vector *vector; + int length, nwords; + + vector = (struct vector *) where; + length = fixnum_value(vector->length); + nwords = CEILING(NWORDS(length, 64) + 2, 2); return nwords; } +#endif static int scav_vector_single_float(lispobj *where, lispobj object) @@ -1104,7 +1145,7 @@ scav_vector_single_float(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length + 2, 2); + nwords = CEILING(NWORDS(length, 32) + 2, 2); return nwords; } @@ -1119,7 +1160,7 @@ trans_vector_single_float(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(length + 2, 2); + nwords = CEILING(NWORDS(length, 32) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -1132,7 +1173,7 @@ size_vector_single_float(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length + 2, 2); + nwords = CEILING(NWORDS(length, 32) + 2, 2); return nwords; } @@ -1145,7 +1186,7 @@ scav_vector_double_float(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length * 2 + 2, 2); + nwords = CEILING(NWORDS(length, 64) + 2, 2); return nwords; } @@ -1160,7 +1201,7 @@ trans_vector_double_float(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(length * 2 + 2, 2); + nwords = CEILING(NWORDS(length, 64) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -1173,7 +1214,7 @@ size_vector_double_float(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length * 2 + 2, 2); + nwords = CEILING(NWORDS(length, 64) + 2, 2); return nwords; } @@ -1232,7 +1273,7 @@ scav_vector_complex_single_float(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length * 2 + 2, 2); + nwords = CEILING(NWORDS(length, 64) + 2, 2); return nwords; } @@ -1247,7 +1288,7 @@ trans_vector_complex_single_float(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(length * 2 + 2, 2); + nwords = CEILING(NWORDS(length, 64) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -1260,7 +1301,7 @@ size_vector_complex_single_float(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length * 2 + 2, 2); + nwords = CEILING(NWORDS(length, 64) + 2, 2); return nwords; } @@ -1275,7 +1316,7 @@ scav_vector_complex_double_float(lispobj *where, lispobj object) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length * 4 + 2, 2); + nwords = CEILING(NWORDS(length, 128) + 2, 2); return nwords; } @@ -1290,7 +1331,7 @@ trans_vector_complex_double_float(lispobj object) vector = (struct vector *) native_pointer(object); length = fixnum_value(vector->length); - nwords = CEILING(length * 4 + 2, 2); + nwords = CEILING(NWORDS(length, 128) + 2, 2); return copy_large_unboxed_object(object, nwords); } @@ -1303,7 +1344,7 @@ size_vector_complex_double_float(lispobj *where) vector = (struct vector *) where; length = fixnum_value(vector->length); - nwords = CEILING(length * 4 + 2, 2); + nwords = CEILING(NWORDS(length, 128) + 2, 2); return nwords; } @@ -1430,8 +1471,9 @@ static int scav_lose(lispobj *where, lispobj object) { lose("no scavenge function for object 0x%08x (widetag 0x%x)", - (unsigned long)object, - widetag_of(*(lispobj*)native_pointer(object))); + (unsigned long)object, + widetag_of(*(lispobj*)native_pointer(object))); + return 0; /* bogus return value to satisfy static type checking */ } @@ -1506,18 +1548,41 @@ gc_init_tables(void) scavtab[COMPLEX_LONG_FLOAT_WIDETAG] = scav_unboxed; #endif scavtab[SIMPLE_ARRAY_WIDETAG] = scav_boxed; - scavtab[SIMPLE_STRING_WIDETAG] = scav_string; + scavtab[SIMPLE_BASE_STRING_WIDETAG] = scav_base_string; scavtab[SIMPLE_BIT_VECTOR_WIDETAG] = scav_vector_bit; + scavtab[SIMPLE_ARRAY_NIL_WIDETAG] = scav_vector_nil; scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_2_WIDETAG] = scav_vector_unsigned_byte_2; scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_4_WIDETAG] = scav_vector_unsigned_byte_4; + scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_7_WIDETAG] = + scav_vector_unsigned_byte_8; scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_8_WIDETAG] = scav_vector_unsigned_byte_8; + scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_15_WIDETAG] = + scav_vector_unsigned_byte_16; scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_16_WIDETAG] = scav_vector_unsigned_byte_16; +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG + scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG] = + scav_vector_unsigned_byte_32; +#endif + scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_31_WIDETAG] = + scav_vector_unsigned_byte_32; scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_32_WIDETAG] = scav_vector_unsigned_byte_32; +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_60_WIDETAG + scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_60_WIDETAG] = + scav_vector_unsigned_byte_64; +#endif +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_63_WIDETAG + scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_63_WIDETAG] = + scav_vector_unsigned_byte_64; +#endif +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_64_WIDETAG + scavtab[SIMPLE_ARRAY_UNSIGNED_BYTE_64_WIDETAG] = + scav_vector_unsigned_byte_64; +#endif #ifdef SIMPLE_ARRAY_SIGNED_BYTE_8_WIDETAG scavtab[SIMPLE_ARRAY_SIGNED_BYTE_8_WIDETAG] = scav_vector_unsigned_byte_8; #endif @@ -1533,6 +1598,14 @@ gc_init_tables(void) scavtab[SIMPLE_ARRAY_SIGNED_BYTE_32_WIDETAG] = scav_vector_unsigned_byte_32; #endif +#ifdef SIMPLE_ARRAY_SIGNED_BYTE_61_WIDETAG + scavtab[SIMPLE_ARRAY_SIGNED_BYTE_61_WIDETAG] = + scav_vector_unsigned_byte_64; +#endif +#ifdef SIMPLE_ARRAY_SIGNED_BYTE_64_WIDETAG + scavtab[SIMPLE_ARRAY_SIGNED_BYTE_64_WIDETAG] = + scav_vector_unsigned_byte_64; +#endif scavtab[SIMPLE_ARRAY_SINGLE_FLOAT_WIDETAG] = scav_vector_single_float; scavtab[SIMPLE_ARRAY_DOUBLE_FLOAT_WIDETAG] = scav_vector_double_float; #ifdef SIMPLE_ARRAY_LONG_FLOAT_WIDETAG @@ -1550,14 +1623,14 @@ gc_init_tables(void) scavtab[SIMPLE_ARRAY_COMPLEX_LONG_FLOAT_WIDETAG] = scav_vector_complex_long_float; #endif - scavtab[COMPLEX_STRING_WIDETAG] = scav_boxed; + scavtab[COMPLEX_BASE_STRING_WIDETAG] = scav_boxed; + scavtab[COMPLEX_VECTOR_NIL_WIDETAG] = scav_boxed; scavtab[COMPLEX_BIT_VECTOR_WIDETAG] = scav_boxed; scavtab[COMPLEX_VECTOR_WIDETAG] = scav_boxed; scavtab[COMPLEX_ARRAY_WIDETAG] = scav_boxed; scavtab[CODE_HEADER_WIDETAG] = scav_code_header; #ifndef LISP_FEATURE_GENCGC /* FIXME ..._X86 ? */ scavtab[SIMPLE_FUN_HEADER_WIDETAG] = scav_fun_header; - scavtab[CLOSURE_FUN_HEADER_WIDETAG] = scav_fun_header; scavtab[RETURN_PC_HEADER_WIDETAG] = scav_return_pc_header; #endif #ifdef LISP_FEATURE_X86 @@ -1600,19 +1673,42 @@ gc_init_tables(void) transother[COMPLEX_LONG_FLOAT_WIDETAG] = trans_unboxed; #endif transother[SIMPLE_ARRAY_WIDETAG] = trans_boxed; /* but not GENCGC */ - transother[SIMPLE_STRING_WIDETAG] = trans_string; + transother[SIMPLE_BASE_STRING_WIDETAG] = trans_base_string; transother[SIMPLE_BIT_VECTOR_WIDETAG] = trans_vector_bit; transother[SIMPLE_VECTOR_WIDETAG] = trans_vector; + transother[SIMPLE_ARRAY_NIL_WIDETAG] = trans_vector_nil; transother[SIMPLE_ARRAY_UNSIGNED_BYTE_2_WIDETAG] = trans_vector_unsigned_byte_2; transother[SIMPLE_ARRAY_UNSIGNED_BYTE_4_WIDETAG] = trans_vector_unsigned_byte_4; + transother[SIMPLE_ARRAY_UNSIGNED_BYTE_7_WIDETAG] = + trans_vector_unsigned_byte_8; transother[SIMPLE_ARRAY_UNSIGNED_BYTE_8_WIDETAG] = trans_vector_unsigned_byte_8; + transother[SIMPLE_ARRAY_UNSIGNED_BYTE_15_WIDETAG] = + trans_vector_unsigned_byte_16; transother[SIMPLE_ARRAY_UNSIGNED_BYTE_16_WIDETAG] = trans_vector_unsigned_byte_16; +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG + transother[SIMPLE_ARRAY_UNSIGNED_BYTE_29_WIDETAG] = + trans_vector_unsigned_byte_32; +#endif + transother[SIMPLE_ARRAY_UNSIGNED_BYTE_31_WIDETAG] = + trans_vector_unsigned_byte_32; transother[SIMPLE_ARRAY_UNSIGNED_BYTE_32_WIDETAG] = trans_vector_unsigned_byte_32; +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_60_WIDETAG + transother[SIMPLE_ARRAY_UNSIGNED_BYTE_60_WIDETAG] = + trans_vector_unsigned_byte_64; +#endif +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_63_WIDETAG + transother[SIMPLE_ARRAY_UNSIGNED_BYTE_63_WIDETAG] = + trans_vector_unsigned_byte_64; +#endif +#ifdef SIMPLE_ARRAY_UNSIGNED_BYTE_64_WIDETAG + transother[SIMPLE_ARRAY_UNSIGNED_BYTE_64_WIDETAG] = + trans_vector_unsigned_byte_64; +#endif #ifdef SIMPLE_ARRAY_SIGNED_BYTE_8_WIDETAG transother[SIMPLE_ARRAY_SIGNED_BYTE_8_WIDETAG] = trans_vector_unsigned_byte_8; @@ -1629,6 +1725,14 @@ gc_init_tables(void) transother[SIMPLE_ARRAY_SIGNED_BYTE_32_WIDETAG] = trans_vector_unsigned_byte_32; #endif +#ifdef SIMPLE_ARRAY_SIGNED_BYTE_61_WIDETAG + transother[SIMPLE_ARRAY_SIGNED_BYTE_61_WIDETAG] = + trans_vector_unsigned_byte_64; +#endif +#ifdef SIMPLE_ARRAY_SIGNED_BYTE_64_WIDETAG + transother[SIMPLE_ARRAY_SIGNED_BYTE_64_WIDETAG] = + trans_vector_unsigned_byte_64; +#endif transother[SIMPLE_ARRAY_SINGLE_FLOAT_WIDETAG] = trans_vector_single_float; transother[SIMPLE_ARRAY_DOUBLE_FLOAT_WIDETAG] = @@ -1649,13 +1753,13 @@ gc_init_tables(void) transother[SIMPLE_ARRAY_COMPLEX_LONG_FLOAT_WIDETAG] = trans_vector_complex_long_float; #endif - transother[COMPLEX_STRING_WIDETAG] = trans_boxed; + transother[COMPLEX_BASE_STRING_WIDETAG] = trans_boxed; transother[COMPLEX_BIT_VECTOR_WIDETAG] = trans_boxed; + transother[COMPLEX_VECTOR_NIL_WIDETAG] = trans_boxed; transother[COMPLEX_VECTOR_WIDETAG] = trans_boxed; transother[COMPLEX_ARRAY_WIDETAG] = trans_boxed; transother[CODE_HEADER_WIDETAG] = trans_code_header; transother[SIMPLE_FUN_HEADER_WIDETAG] = trans_fun_header; - transother[CLOSURE_FUN_HEADER_WIDETAG] = trans_fun_header; transother[RETURN_PC_HEADER_WIDETAG] = trans_return_pc_header; transother[CLOSURE_HEADER_WIDETAG] = trans_boxed; transother[FUNCALLABLE_INSTANCE_HEADER_WIDETAG] = trans_boxed; @@ -1672,14 +1776,14 @@ gc_init_tables(void) for (i = 0; i < ((sizeof sizetab)/(sizeof sizetab[0])); i++) sizetab[i] = size_lose; for (i = 0; i < (1<<(N_WIDETAG_BITS-N_LOWTAG_BITS)); i++) { - sizetab[EVEN_FIXNUM_LOWTAG|(i<<3)] = size_immediate; - sizetab[FUN_POINTER_LOWTAG|(i<<3)] = size_pointer; + sizetab[EVEN_FIXNUM_LOWTAG|(i<