8 u32 derived_root_count;
9 u32 return_address_count;
11 cell callsite_bitmap_size()
13 return scrub_d_count + scrub_r_count + gc_root_count;
16 cell total_bitmap_size()
18 return return_address_count * callsite_bitmap_size();
21 cell total_bitmap_bytes()
23 return ((total_bitmap_size() + 7) / 8);
26 u32 *return_addresses()
28 return (u32 *)this - return_address_count;
31 u32 *base_pointer_map()
33 return return_addresses() - return_address_count * derived_root_count;
38 return (u8 *)base_pointer_map() - total_bitmap_bytes();
41 cell callsite_scrub_d(cell index)
43 return index * scrub_d_count;
46 cell callsite_scrub_r(cell index)
48 return return_address_count * scrub_d_count +
49 index * scrub_r_count;
52 cell callsite_gc_roots(cell index)
54 return return_address_count * scrub_d_count
55 + return_address_count * scrub_r_count
56 + index * gc_root_count;
59 u32 lookup_base_pointer(cell index, cell derived_root)
61 return base_pointer_map()[index * derived_root_count + derived_root];
64 cell return_address_index(cell return_address);