Enum cretonne_codegen::ir::instructions::InstructionData
[−]
[src]
pub enum InstructionData { Unary { opcode: Opcode, arg: Value, }, UnaryImm { opcode: Opcode, imm: Imm64, }, UnaryIeee32 { opcode: Opcode, imm: Ieee32, }, UnaryIeee64 { opcode: Opcode, imm: Ieee64, }, UnaryBool { opcode: Opcode, imm: bool, }, UnaryGlobalVar { opcode: Opcode, global_var: GlobalVar, }, Binary { opcode: Opcode, args: [Value; 2], }, BinaryImm { opcode: Opcode, arg: Value, imm: Imm64, }, Ternary { opcode: Opcode, args: [Value; 3], }, MultiAry { opcode: Opcode, args: ValueList, }, NullAry { opcode: Opcode, }, InsertLane { opcode: Opcode, args: [Value; 2], lane: Uimm8, }, ExtractLane { opcode: Opcode, arg: Value, lane: Uimm8, }, IntCompare { opcode: Opcode, args: [Value; 2], cond: IntCC, }, IntCompareImm { opcode: Opcode, arg: Value, cond: IntCC, imm: Imm64, }, IntCond { opcode: Opcode, arg: Value, cond: IntCC, }, FloatCompare { opcode: Opcode, args: [Value; 2], cond: FloatCC, }, FloatCond { opcode: Opcode, arg: Value, cond: FloatCC, }, IntSelect { opcode: Opcode, args: [Value; 3], cond: IntCC, }, Jump { opcode: Opcode, args: ValueList, destination: Ebb, }, Branch { opcode: Opcode, args: ValueList, destination: Ebb, }, BranchInt { opcode: Opcode, args: ValueList, cond: IntCC, destination: Ebb, }, BranchFloat { opcode: Opcode, args: ValueList, cond: FloatCC, destination: Ebb, }, BranchIcmp { opcode: Opcode, args: ValueList, cond: IntCC, destination: Ebb, }, BranchTable { opcode: Opcode, arg: Value, table: JumpTable, }, Call { opcode: Opcode, args: ValueList, func_ref: FuncRef, }, CallIndirect { opcode: Opcode, args: ValueList, sig_ref: SigRef, }, FuncAddr { opcode: Opcode, func_ref: FuncRef, }, Load { opcode: Opcode, arg: Value, flags: MemFlags, offset: Offset32, }, Store { opcode: Opcode, args: [Value; 2], flags: MemFlags, offset: Offset32, }, StackLoad { opcode: Opcode, stack_slot: StackSlot, offset: Offset32, }, StackStore { opcode: Opcode, arg: Value, stack_slot: StackSlot, offset: Offset32, }, HeapAddr { opcode: Opcode, arg: Value, heap: Heap, imm: Uimm32, }, RegMove { opcode: Opcode, arg: Value, src: RegUnit, dst: RegUnit, }, CopySpecial { opcode: Opcode, src: RegUnit, dst: RegUnit, }, RegSpill { opcode: Opcode, arg: Value, src: RegUnit, dst: StackSlot, }, RegFill { opcode: Opcode, arg: Value, src: StackSlot, dst: RegUnit, }, Trap { opcode: Opcode, code: TrapCode, }, CondTrap { opcode: Opcode, arg: Value, code: TrapCode, }, IntCondTrap { opcode: Opcode, arg: Value, cond: IntCC, code: TrapCode, }, FloatCondTrap { opcode: Opcode, arg: Value, cond: FloatCC, code: TrapCode, }, }
Variants
Unary
Fields of Unary
opcode: Opcode | |
arg: Value |
UnaryImm
Fields of UnaryImm
opcode: Opcode | |
imm: Imm64 |
UnaryIeee32
Fields of UnaryIeee32
opcode: Opcode | |
imm: Ieee32 |
UnaryIeee64
Fields of UnaryIeee64
opcode: Opcode | |
imm: Ieee64 |
UnaryBool
Fields of UnaryBool
opcode: Opcode | |
imm: bool |
UnaryGlobalVar
Fields of UnaryGlobalVar
opcode: Opcode | |
global_var: GlobalVar |
Binary
Fields of Binary
opcode: Opcode | |
args: [Value; 2] |
BinaryImm
Fields of BinaryImm
opcode: Opcode | |
arg: Value | |
imm: Imm64 |
Ternary
Fields of Ternary
opcode: Opcode | |
args: [Value; 3] |
MultiAry
Fields of MultiAry
opcode: Opcode | |
args: ValueList |
NullAry
Fields of NullAry
opcode: Opcode |
InsertLane
Fields of InsertLane
opcode: Opcode | |
args: [Value; 2] | |
lane: Uimm8 |
ExtractLane
Fields of ExtractLane
opcode: Opcode | |
arg: Value | |
lane: Uimm8 |
IntCompare
Fields of IntCompare
opcode: Opcode | |
args: [Value; 2] | |
cond: IntCC |
IntCompareImm
Fields of IntCompareImm
opcode: Opcode | |
arg: Value | |
cond: IntCC | |
imm: Imm64 |
IntCond
Fields of IntCond
opcode: Opcode | |
arg: Value | |
cond: IntCC |
FloatCompare
Fields of FloatCompare
opcode: Opcode | |
args: [Value; 2] | |
cond: FloatCC |
FloatCond
Fields of FloatCond
opcode: Opcode | |
arg: Value | |
cond: FloatCC |
IntSelect
Fields of IntSelect
opcode: Opcode | |
args: [Value; 3] | |
cond: IntCC |
Jump
Fields of Jump
opcode: Opcode | |
args: ValueList | |
destination: Ebb |
Branch
Fields of Branch
opcode: Opcode | |
args: ValueList | |
destination: Ebb |
BranchInt
Fields of BranchInt
opcode: Opcode | |
args: ValueList | |
cond: IntCC | |
destination: Ebb |
BranchFloat
Fields of BranchFloat
opcode: Opcode | |
args: ValueList | |
cond: FloatCC | |
destination: Ebb |
BranchIcmp
Fields of BranchIcmp
opcode: Opcode | |
args: ValueList | |
cond: IntCC | |
destination: Ebb |
BranchTable
Fields of BranchTable
opcode: Opcode | |
arg: Value | |
table: JumpTable |
Call
Fields of Call
opcode: Opcode | |
args: ValueList | |
func_ref: FuncRef |
CallIndirect
Fields of CallIndirect
opcode: Opcode | |
args: ValueList | |
sig_ref: SigRef |
FuncAddr
Fields of FuncAddr
opcode: Opcode | |
func_ref: FuncRef |
Load
Fields of Load
opcode: Opcode | |
arg: Value | |
flags: MemFlags | |
offset: Offset32 |
Store
Fields of Store
opcode: Opcode | |
args: [Value; 2] | |
flags: MemFlags | |
offset: Offset32 |
StackLoad
Fields of StackLoad
opcode: Opcode | |
stack_slot: StackSlot | |
offset: Offset32 |
StackStore
Fields of StackStore
opcode: Opcode | |
arg: Value | |
stack_slot: StackSlot | |
offset: Offset32 |
HeapAddr
Fields of HeapAddr
opcode: Opcode | |
arg: Value | |
heap: Heap | |
imm: Uimm32 |
RegMove
Fields of RegMove
opcode: Opcode | |
arg: Value | |
src: RegUnit | |
dst: RegUnit |
CopySpecial
Fields of CopySpecial
opcode: Opcode | |
src: RegUnit | |
dst: RegUnit |
RegSpill
Fields of RegSpill
opcode: Opcode | |
arg: Value | |
src: RegUnit | |
dst: StackSlot |
RegFill
Fields of RegFill
opcode: Opcode | |
arg: Value | |
src: StackSlot | |
dst: RegUnit |
Trap
Fields of Trap
opcode: Opcode | |
code: TrapCode |
CondTrap
Fields of CondTrap
opcode: Opcode | |
arg: Value | |
code: TrapCode |
IntCondTrap
Fields of IntCondTrap
opcode: Opcode | |
arg: Value | |
cond: IntCC | |
code: TrapCode |
FloatCondTrap
Fields of FloatCondTrap
opcode: Opcode | |
arg: Value | |
cond: FloatCC | |
code: TrapCode |
Methods
impl InstructionData
[src]
pub fn opcode(&self) -> Opcode
[src]
Get the opcode of this instruction.
pub fn typevar_operand(&self, pool: &ValueListPool) -> Option<Value>
[src]
Get the controlling type variable operand.
pub fn arguments<'a>(&'a self, pool: &'a ValueListPool) -> &[Value]
[src]
Get the value arguments to this instruction.
pub fn arguments_mut<'a>(
&'a mut self,
pool: &'a mut ValueListPool
) -> &mut [Value]
[src]
&'a mut self,
pool: &'a mut ValueListPool
) -> &mut [Value]
Get mutable references to the value arguments to this instruction.
pub fn take_value_list(&mut self) -> Option<ValueList>
[src]
Take out the value list with all the value arguments and return it.
This leaves the value list in the instruction empty. Use
put_value_list
to put the value list back.
pub fn put_value_list(&mut self, vlist: ValueList)
[src]
Put back a value list.
After removing a value list with take_value_list()
, use this
method to put it back. It is required that this instruction has
a format that accepts a value list, and that the existing value
list is empty. This avoids leaking list pool memory.
impl InstructionData
[src]
Analyzing an instruction.
Avoid large matches on instruction formats by using the methods defined here to examine instructions.
pub fn analyze_branch<'a>(&'a self, pool: &'a ValueListPool) -> BranchInfo<'a>
[src]
Return information about the destination of a branch or jump instruction.
Any instruction that can transfer control to another EBB reveals its possible destinations here.
pub fn branch_destination(&self) -> Option<Ebb>
[src]
Get the single destination of this branch instruction, if it is a single destination branch or jump.
Multi-destination branches like br_table
return None
.
pub fn branch_destination_mut(&mut self) -> Option<&mut Ebb>
[src]
Get a mutable reference to the single destination of this branch instruction, if it is a single destination branch or jump.
Multi-destination branches like br_table
return None
.
pub fn analyze_call<'a>(&'a self, pool: &'a ValueListPool) -> CallInfo<'a>
[src]
Return information about a call instruction.
Any instruction that can call another function reveals its call signature here.
Trait Implementations
impl<'a> From<&'a InstructionData> for InstructionFormat
[src]
fn from(inst: &'a InstructionData) -> Self
[src]
Performs the conversion.
impl Clone for InstructionData
[src]
fn clone(&self) -> InstructionData
[src]
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
Performs copy-assignment from source
. Read more
impl Debug for InstructionData
[src]
fn fmt(&self, __arg_0: &mut Formatter) -> Result
[src]
Formats the value using the given formatter. Read more
impl Hash for InstructionData
[src]
fn hash<__H: Hasher>(&self, __arg_0: &mut __H)
[src]
Feeds this value into the given [Hasher
]. Read more
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
Feeds a slice of this type into the given [Hasher
]. Read more
impl PartialEq for InstructionData
[src]
fn eq(&self, __arg_0: &InstructionData) -> bool
[src]
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, __arg_0: &InstructionData) -> bool
[src]
This method tests for !=
.