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,
},
UnaryGlobalValue {
opcode: Opcode,
global_value: GlobalValue,
},
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,
destination: Ebb,
table: JumpTable,
},
BranchTableEntry {
opcode: Opcode,
args: [Value; 2],
imm: Uimm8,
table: JumpTable,
},
BranchTableBase {
opcode: Opcode,
table: JumpTable,
},
IndirectJump {
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,
},
LoadComplex {
opcode: Opcode,
args: ValueList,
flags: MemFlags,
offset: Offset32,
},
Store {
opcode: Opcode,
args: [Value; 2],
flags: MemFlags,
offset: Offset32,
},
StoreComplex {
opcode: Opcode,
args: ValueList,
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,
},
TableAddr {
opcode: Opcode,
arg: Value,
table: Table,
offset: Offset32,
},
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,
},
}