-#ifdef WANT_CGC
-/* original x86/CGC stack scavenging code by Paul Werkowski */
-
-static int
-maybe_can_move_p(lispobj thing)
-{
- lispobj *thingp,header;
- if (dynamic_pointer_p(thing)) { /* in dynamic space */
- thingp = (lispobj*)PTR(thing);
- header = *thingp;
- if (Pointerp(header) && forwarding_pointer_p(header)) {
- return -1; /* must change it */
- } else if (LowtagOf(thing) == type_ListPointer) {
- return type_ListPointer; /* can we check this somehow */
- } else if (thing & 3) { /* not fixnum */
- int kind = TypeOf(header);
- /* printf(" %x %x",header,kind); */
- switch (kind) { /* something with a header */
- case type_Bignum:
- case type_SingleFloat:
- case type_DoubleFloat:
-#ifdef type_LongFloat
- case type_LongFloat:
-#endif
- case type_Sap:
- case type_SimpleVector:
- case type_SimpleString:
- case type_SimpleBitVector:
- case type_SimpleArrayUnsignedByte2:
- case type_SimpleArrayUnsignedByte4:
- case type_SimpleArrayUnsignedByte8:
- case type_SimpleArrayUnsignedByte16:
- case type_SimpleArrayUnsignedByte32:
-#ifdef type_SimpleArraySignedByte8
- case type_SimpleArraySignedByte8:
-#endif
-#ifdef type_SimpleArraySignedByte16
- case type_SimpleArraySignedByte16:
-#endif
-#ifdef type_SimpleArraySignedByte30
- case type_SimpleArraySignedByte30:
-#endif
-#ifdef type_SimpleArraySignedByte32
- case type_SimpleArraySignedByte32:
-#endif
- case type_SimpleArraySingleFloat:
- case type_SimpleArrayDoubleFloat:
-#ifdef type_SimpleArrayLongFloat
- case type_SimpleArrayLongFloat:
-#endif
-#ifdef type_SimpleArrayComplexSingleFloat
- case type_SimpleArrayComplexSingleFloat:
-#endif
-#ifdef type_SimpleArrayComplexDoubleFloat
- case type_SimpleArrayComplexDoubleFloat:
-#endif
-#ifdef type_SimpleArrayComplexLongFloat
- case type_SimpleArrayComplexLongFloat:
-#endif
- case type_CodeHeader:
- case type_FunctionHeader:
- case type_ClosureFunctionHeader:
- case type_ReturnPcHeader:
- case type_ClosureHeader:
- case type_FuncallableInstanceHeader:
- case type_InstanceHeader:
- case type_ValueCellHeader:
- case type_ByteCodeFunction:
- case type_ByteCodeClosure:
- case type_WeakPointer:
- case type_Fdefn:
- return kind;
- break;
- default:
- return 0;
- }
- }
- }
- return 0;
-}
-
-static int pverbose=0;
-#define PVERBOSE pverbose
-static void
-carefully_pscav_stack(lispobj*lowaddr, lispobj*base)
-{
- lispobj *sp = lowaddr;
- while (sp < base) {
- int k;
- lispobj thing = *sp;
- if ((unsigned)thing & 0x3) { /* may be pointer */
- /* need to check for valid float/double? */
- k = maybe_can_move_p(thing);
- if(PVERBOSE)printf("%8x %8x %d\n",sp, thing, k);
- if(k)
- pscav(sp, 1, 0);
- }
- sp++;
- }
-}
-#endif
-