Skip to main content

FrameInsts

Struct FrameInsts 

Source
pub struct FrameInsts {
    pub prefix: &'static str,
    pub classes: &'static [ClassMoves],
    pub push: &'static str,
    pub pop: &'static str,
    pub add: &'static str,
    pub sub: &'static str,
    pub align: &'static str,
    pub lea: &'static str,
    pub ret: &'static str,
}
Expand description

Every instruction a prologue, an epilogue, a spill or a reload is made of.

Fields§

§prefix: &'static str

What a rule file and the machine IR put in front of this target’s opcodes, such as x64., which says which target a term belongs to and is not part of the opcode.

§classes: &'static [ClassMoves]

How a register of each class is moved, one for each class of the register file in the order the file numbers them.

Shorter than the file when the classes at the end are ones nothing spills. An x87 stack register is one of those: the allocator is never given one to hand out, so nothing ever asks how to move it, and a target that answered anyway would be writing down a guess.

§push: &'static str

Puts a register on the stack and moves the stack pointer down by one word.

§pop: &'static str

Takes a word off the stack into a register and moves the stack pointer back up.

§add: &'static str

Adds a constant to the stack pointer, which is how an epilogue gives the frame back.

§sub: &'static str

Takes a constant off the stack pointer, which is how a prologue takes the frame.

§align: &'static str

Clears the low bits of the stack pointer, which is how a prologue forces an alignment nothing else can give it.

§lea: &'static str

Writes a register with an address rather than with what is at it, which is how an epilogue puts the stack pointer back when the frame pointer is the only record of where it was.

§ret: &'static str

Returns to the caller.

Implementations§

Source§

impl FrameInsts

Source

pub fn moves(&self, class: RegClass) -> Option<ClassMoves>

How a register of that class is moved, or None for a class nothing spills.

Trait Implementations§

Source§

impl Clone for FrameInsts

Source§

fn clone(&self) -> FrameInsts

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 FrameInsts

Source§

impl Debug for FrameInsts

Source§

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

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

impl Eq for FrameInsts

Source§

impl PartialEq for FrameInsts

Source§

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

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

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for FrameInsts

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.