pub struct Effects<'a> { /* private fields */ }Expand description
Extra implicit operands for one instruction: registers it reads and writes without naming them, and registers it clobbers, beyond what its opcode always has. Used for calls (argument registers, return registers, the convention’s clobbers), returns (result registers), and system calls.
§Examples
use backend_lang::mir::Effects;
use backend_lang::x86_64::{SYSV, RAX, RDI};
let e = Effects::new().uses(&[RDI]).defs(&[RAX]).clobbers(SYSV.call_clobbers());
assert_eq!(e.uses_regs(), [RDI]);
assert!(e.clobber_set().contains(RAX));Implementations§
Source§impl<'a> Effects<'a>
impl<'a> Effects<'a>
Sourcepub const fn new() -> Effects<'a>
pub const fn new() -> Effects<'a>
No extra operands.
§Examples
use backend_lang::mir::Effects;
assert!(Effects::new().uses_regs().is_empty());Sourcepub const fn uses(self, regs: &'a [PReg]) -> Effects<'a>
pub const fn uses(self, regs: &'a [PReg]) -> Effects<'a>
Registers read.
§Examples
use backend_lang::mir::Effects;
use backend_lang::x86_64::RSI;
assert_eq!(Effects::new().uses(&[RSI]).uses_regs(), [RSI]);Sourcepub const fn defs(self, regs: &'a [PReg]) -> Effects<'a>
pub const fn defs(self, regs: &'a [PReg]) -> Effects<'a>
Registers written with defined values.
§Examples
use backend_lang::mir::Effects;
use backend_lang::x86_64::RAX;
assert_eq!(Effects::new().defs(&[RAX]).defs_regs(), [RAX]);Sourcepub const fn clobbers(self, regs: RegSet) -> Effects<'a>
pub const fn clobbers(self, regs: RegSet) -> Effects<'a>
Registers left with unspecified contents.
§Examples
use backend_lang::RegSet;
use backend_lang::mir::Effects;
use backend_lang::x86_64::R11;
assert!(Effects::new().clobbers(RegSet::of(&[R11])).clobber_set().contains(R11));Sourcepub const fn uses_regs(&self) -> &'a [PReg]
pub const fn uses_regs(&self) -> &'a [PReg]
The registers read.
§Examples
use backend_lang::mir::Effects;
assert!(Effects::new().uses_regs().is_empty());Sourcepub const fn defs_regs(&self) -> &'a [PReg]
pub const fn defs_regs(&self) -> &'a [PReg]
The registers written.
§Examples
use backend_lang::mir::Effects;
assert!(Effects::new().defs_regs().is_empty());Sourcepub const fn clobber_set(&self) -> RegSet
pub const fn clobber_set(&self) -> RegSet
The registers clobbered.
§Examples
use backend_lang::mir::Effects;
assert!(Effects::new().clobber_set().is_empty());Trait Implementations§
impl<'a> Copy for Effects<'a>
impl<'a> Eq for Effects<'a>
impl<'a> StructuralPartialEq for Effects<'a>
Auto Trait Implementations§
impl<'a> Freeze for Effects<'a>
impl<'a> RefUnwindSafe for Effects<'a>
impl<'a> Send for Effects<'a>
impl<'a> Sync for Effects<'a>
impl<'a> Unpin for Effects<'a>
impl<'a> UnsafeUnpin for Effects<'a>
impl<'a> UnwindSafe for Effects<'a>
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
Mutably borrows from an owned value. Read more