4 const u32 gc_info_missing_value = (u32)-1;
10 u32 derived_root_count;
11 u32 return_address_count;
13 cell callsite_bitmap_size()
15 return scrub_d_count + scrub_r_count + gc_root_count;
18 cell total_bitmap_size()
20 return return_address_count * callsite_bitmap_size();
23 cell total_bitmap_bytes()
25 return ((total_bitmap_size() + 7) / 8);
28 u32 *return_addresses()
30 return (u32 *)this - return_address_count;
33 u32 *base_pointer_map()
35 return return_addresses() - return_address_count * derived_root_count;
40 return (u8 *)base_pointer_map() - total_bitmap_bytes();
43 cell callsite_scrub_d(cell index)
45 return index * scrub_d_count;
48 cell callsite_scrub_r(cell index)
50 return return_address_count * scrub_d_count +
51 index * scrub_r_count;
54 cell callsite_gc_roots(cell index)
56 return return_address_count * scrub_d_count
57 + return_address_count * scrub_r_count
58 + index * gc_root_count;
61 cell lookup_base_pointer(cell index, cell derived_root)
63 return base_pointer_map()[index * derived_root_count + derived_root];
66 cell return_address_index(cell return_address);