]> gitweb.factorcode.org Git - factor.git/blob - vm/gc_info.hpp
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / vm / gc_info.hpp
1 namespace factor
2 {
3
4 const u32 gc_info_missing_value = (u32)-1;
5
6 struct gc_info {
7         u32 scrub_d_count;
8         u32 scrub_r_count;
9         u32 gc_root_count;
10         u32 derived_root_count;
11         u32 return_address_count;
12
13         cell callsite_bitmap_size()
14         {
15                 return scrub_d_count + scrub_r_count + gc_root_count;
16         }
17
18         cell total_bitmap_size()
19         {
20                 return return_address_count * callsite_bitmap_size();
21         }
22
23         cell total_bitmap_bytes()
24         {
25                 return ((total_bitmap_size() + 7) / 8);
26         }
27
28         u32 *return_addresses()
29         {
30                 return (u32 *)this - return_address_count;
31         }
32
33         u32 *base_pointer_map()
34         {
35                 return return_addresses() - return_address_count * derived_root_count;
36         }
37
38         u8 *gc_info_bitmap()
39         {
40                 return (u8 *)base_pointer_map() - total_bitmap_bytes();
41         }
42
43         cell callsite_scrub_d(cell index)
44         {
45                 return index * scrub_d_count;
46         }
47
48         cell callsite_scrub_r(cell index)
49         {
50                 return return_address_count * scrub_d_count +
51                         index * scrub_r_count;
52         }
53
54         cell callsite_gc_roots(cell index)
55         {
56                 return return_address_count * scrub_d_count
57                         + return_address_count * scrub_r_count
58                         + index * gc_root_count;
59         }
60
61         cell lookup_base_pointer(cell index, cell derived_root)
62         {
63                 return base_pointer_map()[index * derived_root_count + derived_root];
64         }
65
66         cell return_address_index(cell return_address);
67 };
68
69 }