src/gchtfind.c
/************************************************************************/
/*									*/
/*	     e n t e r _ b i g _ r e f e r e n c e _ c o u n t		*/
/*									*/
/*	Add a new overflow entry, for a count that won't fit into	*/
/*	the field of a main GC table entry.				*/
/*									*/
/************************************************************************/
e n t e r _ b i g _ r e f e r e n c e _ c o u n t

Add a new overflow entry, for a count that won't fit into
the field of a main GC table entry.
e n t e r _ b i g _ r e f e r e n c e _ c o u n t Add a new overflow entry for a count that won ' t fit into the field of a main GC table entry .
void enter_big_reference_count(LispPTR ptr) {
  struct gc_ovfl *oventry;
  register LispPTR tmp;
  ptr &= 0xfffffffe;
  oventry = (struct gc_ovfl *)HTbigcount;
  while (((tmp = oventry->ovfl_ptr) != ATOM_T) && (tmp != NIL))
  {
    if (tmp == ptr) {
      error("ERROR : PTR already in overflow table.\n");
      oventry->ovfl_cnt += 0x10000; 
      return;
    } else
      ++oventry;
  };
  if (tmp == NIL) {
    if (Evenp(LADDR_from_68k(oventry + 1), DLWORDSPER_PAGE)) {
      if ((UNSIGNED)oventry + 1 >= (UNSIGNED)HTcoll) error("GC big reference count table overflow");
      newpage(LADDR_from_68k(oventry + 1));
    }
  }
  oventry->ovfl_cnt = MAX_GCCOUNT;
  oventry->ovfl_ptr = ptr;
  return;
}
void enter_big_reference_count ( LispPTR ptr ) { struct gc_ovfl * oventry ; register LispPTR tmp ; ptr &= 0xfffffffe ; oventry = ( struct gc_ovfl * ) HTbigcount ; while ( ( ( tmp = oventry -> ovfl_ptr ) != ATOM_T ) && ( tmp != NIL ) ) { if ( tmp == ptr ) { error ( " \n " ) ; oventry -> ovfl_cnt += 0x10000 ; return ; } else ++ oventry ; } ; if ( tmp == NIL ) { if ( Evenp ( LADDR_from_68k ( oventry + 1 ) , DLWORDSPER_PAGE ) ) { if ( ( UNSIGNED ) oventry + 1 >= ( UNSIGNED ) HTcoll ) error ( " " ) ; newpage ( LADDR_from_68k ( oventry + 1 ) ) ; } } oventry -> ovfl_cnt = MAX_GCCOUNT ; oventry -> ovfl_ptr = ptr ; return ; }
e n t e r _ b i g _ r e f e r e n c e _ c o u n t
e n t e r _ b i g _ r e f e r e n c e _ c o u n t
/* this kludge is apparently necessary. Odd pointers are
  illegal, but apparently some are reference counted. If you
  get an odd pointer, just ignore the low bit */ /* free area ? */ /* "Assure it lives forever" */