#include "thread.h"
#include "genesis/primitive-objects.h"
#include "genesis/static-symbols.h"
+#include "genesis/layout.h"
#define PRINTNOISE
/* FIXME: Shouldn't this be defined in sbcl.h? See also notes in
* cheneygc.c */
-#ifdef sparc
+#ifdef LISP_FEATURE_SPARC
#define FUN_RAW_ADDR_OFFSET 0
#else
#define FUN_RAW_ADDR_OFFSET (6*sizeof(lispobj) - FUN_POINTER_LOWTAG)
#ifdef LISP_FEATURE_X86
return ptrans_vector(thing, 96, 0, 0, constant);
#endif
-#ifdef sparc
+#ifdef LISP_FEATURE_SPARC
return ptrans_vector(thing, 128, 0, 0, constant);
#endif
#endif
#ifdef LISP_FEATURE_X86
return ptrans_vector(thing, 192, 0, 0, constant);
#endif
-#ifdef sparc
+#ifdef LISP_FEATURE_SPARC
return ptrans_vector(thing, 256, 0, 0, constant);
#endif
#endif
#ifdef LISP_FEATURE_X86
count = fixnum_value(vector->length)*3+2;
#endif
-#ifdef sparc
+#ifdef LISP_FEATURE_SPARC
count = fixnum_value(vector->length)*4+2;
#endif
break;
#ifdef LISP_FEATURE_X86
count = fixnum_value(vector->length)*6+2;
#endif
-#ifdef sparc
+#ifdef LISP_FEATURE_SPARC
count = fixnum_value(vector->length)*8+2;
#endif
break;
count = pscav_fdefn((struct fdefn *)addr);
break;
+ case INSTANCE_HEADER_WIDETAG:
+ {
+ struct instance *instance = (struct instance *) addr;
+ struct layout *layout
+ = (struct layout *) native_pointer(instance->slots[0]);
+ long nuntagged = fixnum_value(layout->n_untagged_slots);
+ long nslots = HeaderValue(*addr);
+ pscav(addr + 1, nslots - nuntagged, constant);
+ count = CEILING(1 + nslots, 2);
+ }
+ break;
+
default:
count = 1;
break;
#endif
#endif
+ /* Blast away instruction cache */
+ os_flush_icache((os_vm_address_t)READ_ONLY_SPACE_START, READ_ONLY_SPACE_SIZE);
+ os_flush_icache((os_vm_address_t)STATIC_SPACE_START, STATIC_SPACE_SIZE);
+
#ifdef PRINTNOISE
printf(" done]\n");
fflush(stdout);