#[non_exhaustive]pub enum OperandRule {
Def(RegClass),
Tied(u8),
Use(RegClass, Accept),
Cond,
Block,
}Expand description
The rule for one explicit operand of an instruction.
Operands are listed definitions first, then uses, as the MIR printer
shows them (%2 = add64 %0, %1).
§Examples
use backend_lang::target::{Accept, ImmRange, OperandRule};
use backend_lang::x86_64::{self, op, GPR};
let add = x86_64::TARGET.inst(op::ADD64).unwrap();
assert_eq!(add.operands()[0], OperandRule::Def(GPR));
assert_eq!(add.operands()[1], OperandRule::Tied(0));
assert_eq!(add.operands()[2], OperandRule::Use(GPR, Accept::RM.with_imm(ImmRange::I32)));Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
Def(RegClass)
A register the instruction writes, of this class.
Tied(u8)
A use that must be the same register as definition n: the
two-address constraint (add d, s reads and writes d). In SSA form
the definition and the tied use are different virtual registers; the
register allocator gives them one physical register.
Use(RegClass, Accept)
A value the instruction reads, of this class (for a register; the
class of a memory operand’s base and index is the target’s address
class), in the shapes Accept allows.
Cond
A condition code.
Block
A branch target with its arguments.
Trait Implementations§
Source§impl Clone for OperandRule
impl Clone for OperandRule
impl Copy for OperandRule
Source§impl Debug for OperandRule
impl Debug for OperandRule
impl Eq for OperandRule
Source§impl Hash for OperandRule
impl Hash for OperandRule
Source§impl PartialEq for OperandRule
impl PartialEq for OperandRule
impl StructuralPartialEq for OperandRule
Auto Trait Implementations§
impl Freeze for OperandRule
impl RefUnwindSafe for OperandRule
impl Send for OperandRule
impl Sync for OperandRule
impl Unpin for OperandRule
impl UnsafeUnpin for OperandRule
impl UnwindSafe for OperandRule
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