Struct mmtk::vm::VMLocalMarkBitSpec
source · pub struct VMLocalMarkBitSpec(_);Implementations§
source§impl VMLocalMarkBitSpec
impl VMLocalMarkBitSpec
pub const LOG_NUM_BITS: usize = 0usize
pub const IS_GLOBAL: bool = false
pub const fn in_header(bit_offset: isize) -> Self
pub const fn side_first() -> Self
pub const fn side_after(spec: &MetadataSpec) -> Self
pub const fn as_spec(&self) -> &MetadataSpec
pub const fn num_bits(&self) -> usize
Methods from Deref<Target = MetadataSpec>§
pub fn is_on_side(&self) -> bool
pub fn is_in_header(&self) -> bool
sourcepub fn extract_side_spec(&self) -> &SideMetadataSpec
pub fn extract_side_spec(&self) -> &SideMetadataSpec
Extract SideMetadataSpec from a MetadataSpec. Panics if this is not side metadata.
sourcepub unsafe fn load<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
mask: Option<T>
) -> T
pub unsafe fn load<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, mask: Option<T> ) -> T
A function to non-atomically load the specified metadata’s content. Returns the metadata value.
Arguments:
object: is a reference to the target object.mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.
Safety
This is a non-atomic load, thus not thread-safe.
sourcepub fn load_atomic<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
mask: Option<T>,
ordering: Ordering
) -> T
pub fn load_atomic<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, mask: Option<T>, ordering: Ordering ) -> T
A function to atomically load the specified metadata’s content. Returns the metadata value.
Arguments:
object: is a reference to the target object.mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.atomic_ordering: is the ordering for the load operation.
sourcepub unsafe fn store<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
mask: Option<T>
)
pub unsafe fn store<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, mask: Option<T> )
A function to non-atomically store a value to the specified metadata.
Arguments:
object: is a reference to the target object.val: is the new metadata value to be stored.mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.
Safety
This is a non-atomic store, thus not thread-safe.
sourcepub fn store_atomic<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
mask: Option<T>,
ordering: Ordering
)
pub fn store_atomic<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, mask: Option<T>, ordering: Ordering )
A function to atomically store a value to the specified metadata.
Arguments:
object: is a reference to the target object.val: is the new metadata value to be stored.mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.ordering: is the ordering for the store operation.
sourcepub fn compare_exchange_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
old_val: T,
new_val: T,
mask: Option<T>,
success_order: Ordering,
failure_order: Ordering
) -> Result<T, T>
pub fn compare_exchange_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, old_val: T, new_val: T, mask: Option<T>, success_order: Ordering, failure_order: Ordering ) -> Result<T, T>
A function to atomically compare-and-exchange the specified metadata’s content.
Returns true if the operation is successful, and false otherwise.
Arguments:
object: is a reference to the target object.old_val: is the expected current value of the metadata.new_val: is the new metadata value to be stored if the compare-and-exchange operation is successful.mask: is an optional mask value for the metadata. This value is used in cases like the forwarding pointer metadata, where some of the bits are reused by other metadata such as the forwarding bits.success_order: is the atomic ordering used if the operation is successful.failure_order: is the atomic ordering used if the operation fails.
sourcepub fn fetch_add_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
order: Ordering
) -> T
pub fn fetch_add_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, order: Ordering ) -> T
A function to atomically perform an add operation on the specified metadata’s content. Returns the old metadata value.
Arguments:
object: is a reference to the target object.val: is the value to be added to the current value of the metadata.order: is the atomic ordering of the fetch-and-add operation.
sourcepub fn fetch_sub_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
order: Ordering
) -> T
pub fn fetch_sub_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, order: Ordering ) -> T
A function to atomically perform a subtract operation on the specified metadata’s content. Returns the old metadata value.
Arguments:
object: is a reference to the target object.val: is the value to be subtracted from the current value of the metadata.order: is the atomic ordering of the fetch-and-add operation.
sourcepub fn fetch_and_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
order: Ordering
) -> T
pub fn fetch_and_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, order: Ordering ) -> T
A function to atomically perform a bit-and operation on the specified metadata’s content. Returns the old metadata value.
Arguments:
object: is a reference to the target object.val: is the value to bit-and with the current value of the metadata.order: is the atomic ordering of the fetch-and-add operation.
sourcepub fn fetch_or_metadata<VM: VMBinding, T: MetadataValue>(
&self,
object: ObjectReference,
val: T,
order: Ordering
) -> T
pub fn fetch_or_metadata<VM: VMBinding, T: MetadataValue>( &self, object: ObjectReference, val: T, order: Ordering ) -> T
A function to atomically perform a bit-or operation on the specified metadata’s content. Returns the old metadata value.
Arguments:
object: is a reference to the target object.val: is the value to bit-or with the current value of the metadata.order: is the atomic ordering of the fetch-and-add operation.
sourcepub fn fetch_update_metadata<VM: VMBinding, T: MetadataValue, F: FnMut(T) -> Option<T> + Copy>(
&self,
object: ObjectReference,
set_order: Ordering,
fetch_order: Ordering,
f: F
) -> Result<T, T>
pub fn fetch_update_metadata<VM: VMBinding, T: MetadataValue, F: FnMut(T) -> Option<T> + Copy>( &self, object: ObjectReference, set_order: Ordering, fetch_order: Ordering, f: F ) -> Result<T, T>
A function to atomically perform an update operation on the specified metadata’s content. The semantics are the same as Rust’s fetch_update on atomic types.
Returns a Result of Ok(previous_value) if the function returned Some(_), else Err(previous_value).
Arguments:
object: is a reference to the target object.val: is the value to bit-or with the current value of the metadata.order: is the atomic ordering of the fetch-and-add operation.f: the update function. The function may be called multiple times.
Trait Implementations§
Auto Trait Implementations§
impl RefUnwindSafe for VMLocalMarkBitSpec
impl Send for VMLocalMarkBitSpec
impl Sync for VMLocalMarkBitSpec
impl Unpin for VMLocalMarkBitSpec
impl UnwindSafe for VMLocalMarkBitSpec
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
source§fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.source§fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.