Skip to main content

BitInsts

Struct BitInsts 

Source
pub struct BitInsts {
    pub prefix: &'static str,
    pub width: fn(&str, u8) -> Option<u32>,
    pub copies_low: fn(&str) -> bool,
}
Expand description

What a pass has to know about a machine to work out which bits of a register anything reads.

Both are functions of an opcode’s name rather than tables, because a target already has the table both of them read: the assembly listing names each operand at the width the instruction uses it at, and the encoder is generated from the same description, so the widths here are the ones the machine really has rather than a second opinion about them.

Fields§

§prefix: &'static str

What a rule file and the machine IR put in front of this target’s opcodes, such as x64..

§width: fn(&str, u8) -> Option<u32>

How many bits of the operand at that index the instruction of that name uses.

None means all of it, which is the answer for an operand the target’s description does not name: a register inside an addressing mode, an operand of an opcode that encodes to nothing, and an opcode this target does not have. Answering “all of it” where nothing is known is what keeps the analysis from believing bits are dead because a description was silent about them.

§copies_low: fn(&str) -> bool

Whether the instruction of that name puts the low bits of its one source into its one destination, and nothing else.

The widenings and the narrowings, and nothing else. It is what makes the instruction one the pass may take out when the bits above the source’s width turn out to be read by nobody, since what is left of it then is a copy.

Trait Implementations§

Source§

impl Clone for BitInsts

Source§

fn clone(&self) -> BitInsts

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 BitInsts

Source§

impl Debug for BitInsts

Source§

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

Formats the value using the given formatter. Read more

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, 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.