case STOP_FRAME:
case CATCH_FRAME:
case RET_SMALL:
- case RET_VEC_SMALL:
bitmap = BITMAP_BITS(info->i.layout.bitmap);
size = BITMAP_SIZE(info->i.layout.bitmap);
p++;
// large bitmap (> 32 entries, or 64 on a 64-bit machine)
case RET_BIG:
- case RET_VEC_BIG:
p++;
size = GET_LARGE_BITMAP(&info->i)->size;
thread_large_bitmap(p, GET_LARGE_BITMAP(&info->i), size);
thread_(&bco->instrs);
thread_(&bco->literals);
thread_(&bco->ptrs);
- thread_(&bco->itbls);
return p + bco_sizeW(bco);
}
// know the destination without the size, because we may
// spill into the next block. So we have to run down the
// threaded list and get the info ptr first.
+ //
+ // ToDo: one possible avenue of attack is to use the fact
+ // that if (p&BLOCK_MASK) >= (free&BLOCK_MASK), then we
+ // definitely have enough room. Also see bug #1147.
info = get_threaded_info(p);
q = p;