Improve documentation around allocation accessors
This commit is contained in:
parent
7388cb4cf8
commit
823c3b9845
1 changed files with 13 additions and 8 deletions
|
@ -581,8 +581,10 @@ impl<'tcx, Tag, Extra> Allocation<Tag, Extra> {
|
||||||
/// Run-length encoding of the undef mask.
|
/// Run-length encoding of the undef mask.
|
||||||
/// Used to copy parts of a mask multiple times to another allocation.
|
/// Used to copy parts of a mask multiple times to another allocation.
|
||||||
pub struct AllocationDefinedness {
|
pub struct AllocationDefinedness {
|
||||||
|
/// The lengths of ranges that are run-length encoded.
|
||||||
ranges: smallvec::SmallVec::<[u64; 1]>,
|
ranges: smallvec::SmallVec::<[u64; 1]>,
|
||||||
first: bool,
|
/// The definedness of the first range.
|
||||||
|
initial: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Transferring the definedness mask to other allocations.
|
/// Transferring the definedness mask to other allocations.
|
||||||
|
@ -606,9 +608,9 @@ impl<Tag, Extra> Allocation<Tag, Extra> {
|
||||||
// where each element toggles the state
|
// where each element toggles the state
|
||||||
|
|
||||||
let mut ranges = smallvec::SmallVec::<[u64; 1]>::new();
|
let mut ranges = smallvec::SmallVec::<[u64; 1]>::new();
|
||||||
let first = self.undef_mask.get(src.offset);
|
let initial = self.undef_mask.get(src.offset);
|
||||||
let mut cur_len = 1;
|
let mut cur_len = 1;
|
||||||
let mut cur = first;
|
let mut cur = initial;
|
||||||
|
|
||||||
for i in 1..size.bytes() {
|
for i in 1..size.bytes() {
|
||||||
// FIXME: optimize to bitshift the current undef block's bits and read the top bit
|
// FIXME: optimize to bitshift the current undef block's bits and read the top bit
|
||||||
|
@ -623,7 +625,7 @@ impl<Tag, Extra> Allocation<Tag, Extra> {
|
||||||
|
|
||||||
ranges.push(cur_len);
|
ranges.push(cur_len);
|
||||||
|
|
||||||
AllocationDefinedness { ranges, first, }
|
AllocationDefinedness { ranges, initial, }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Apply multiple instances of the run-length encoding to the undef_mask.
|
/// Apply multiple instances of the run-length encoding to the undef_mask.
|
||||||
|
@ -640,7 +642,7 @@ impl<Tag, Extra> Allocation<Tag, Extra> {
|
||||||
self.undef_mask.set_range_inbounds(
|
self.undef_mask.set_range_inbounds(
|
||||||
dest.offset,
|
dest.offset,
|
||||||
dest.offset + size * repeat,
|
dest.offset + size * repeat,
|
||||||
defined.first,
|
defined.initial,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -648,7 +650,7 @@ impl<Tag, Extra> Allocation<Tag, Extra> {
|
||||||
for mut j in 0..repeat {
|
for mut j in 0..repeat {
|
||||||
j *= size.bytes();
|
j *= size.bytes();
|
||||||
j += dest.offset.bytes();
|
j += dest.offset.bytes();
|
||||||
let mut cur = defined.first;
|
let mut cur = defined.initial;
|
||||||
for range in &defined.ranges {
|
for range in &defined.ranges {
|
||||||
let old_j = j;
|
let old_j = j;
|
||||||
j += range;
|
j += range;
|
||||||
|
@ -725,9 +727,9 @@ impl<Tag: Copy, Extra> Allocation<Tag, Extra> {
|
||||||
// shift offsets from source allocation to destination allocation
|
// shift offsets from source allocation to destination allocation
|
||||||
offset + dest_offset - src.offset,
|
offset + dest_offset - src.offset,
|
||||||
reloc,
|
reloc,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
AllocationRelocations {
|
AllocationRelocations {
|
||||||
|
@ -735,6 +737,9 @@ impl<Tag: Copy, Extra> Allocation<Tag, Extra> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Apply a relocation copy.
|
||||||
|
/// The affected range, as defined in the parameters to `prepare_relocation_copy` is expected
|
||||||
|
/// to be clear of relocations.
|
||||||
pub fn mark_relocation_range(
|
pub fn mark_relocation_range(
|
||||||
&mut self,
|
&mut self,
|
||||||
relocations: AllocationRelocations<Tag>,
|
relocations: AllocationRelocations<Tag>,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue