mmtk/util/alloc/
embedded_meta_data.rs

1use crate::util::constants::LOG_BYTES_IN_PAGE;
2use crate::util::Address;
3
4/* The (log of the) size of each region of meta data management */
5pub const LOG_BYTES_IN_REGION: usize = 22;
6pub const BYTES_IN_REGION: usize = 1 << LOG_BYTES_IN_REGION;
7pub const REGION_MASK: usize = BYTES_IN_REGION - 1;
8pub const LOG_PAGES_IN_REGION: usize = LOG_BYTES_IN_REGION - LOG_BYTES_IN_PAGE as usize;
9pub const PAGES_IN_REGION: usize = 1 << LOG_PAGES_IN_REGION;
10
11pub fn get_metadata_base(address: Address) -> Address {
12    address.align_down(BYTES_IN_REGION)
13}
14
15pub fn get_metadata_offset(address: Address, log_coverage: usize, log_align: usize) -> usize {
16    ((address & REGION_MASK) >> (log_coverage + log_align)) << log_align
17}