Skip to main content

PrefetchHint

Struct PrefetchHint 

Source
pub struct PrefetchHint {
    pub write: bool,
    pub locality: u8,
}
Expand description

What a crate::Opcode::Prefetch says about the access it is a hint for.

Two facts, both of them out of __builtin_prefetch’s own arguments, and neither of them a promise. A prefetch that says the wrong thing, or a target that ignores it, changes how long the program takes and nothing else, so nothing downstream may read either of these as a fact about what the program will do.

Fields§

§write: bool

Whether the access being prepared for will write, which is the second argument.

It matters on a machine that has separate instructions for the two, because a line fetched for writing is fetched in a state that does not have to be asked for again when the write happens. x86-64 has one for it, prefetchw, and only on a processor that says it has it, so this reaches the back end and the back end decides.

§locality: u8

How much of the data will still be wanted after the access, from zero for none of it to three for all of it, which is the third argument.

Three is the default and is what a program that writes the one argument form means. Zero is the one that is a different instruction rather than a different cache level on x86-64: it says the line is wanted once, so prefetchnta fetches it in a way that does not push anything else out.

Implementations§

Source§

impl PrefetchHint

Source

pub const MOST: u8 = 3

The highest locality, which is the one the one argument form of the builtin means.

Source

pub const fn read() -> Self

The hint a call that said nothing beyond the address means, which is a read that will want all of the data afterwards.

Source

pub const fn access(self) -> &'static str

The word for which half of the access this is about, which is how it prints.

Source

pub const fn is_valid(self) -> bool

Whether the locality is one of the four the builtin has.

Asked by the verifier. Nothing here clamps an out of range one, because a number this did not come from __builtin_prefetch’s third argument is a bug in whoever built the instruction rather than something a program wrote.

Trait Implementations§

Source§

impl Clone for PrefetchHint

Source§

fn clone(&self) -> PrefetchHint

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for PrefetchHint

Source§

impl Debug for PrefetchHint

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for PrefetchHint

Source§

fn default() -> PrefetchHint

Returns the “default value” for a type. Read more
Source§

impl Display for PrefetchHint

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for PrefetchHint

Source§

impl Hash for PrefetchHint

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for PrefetchHint

Source§

fn cmp(&self, other: &PrefetchHint) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl PartialEq for PrefetchHint

Source§

fn eq(&self, other: &PrefetchHint) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for PrefetchHint

Source§

fn partial_cmp(&self, other: &PrefetchHint) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for PrefetchHint

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.