Enum cretonne_codegen::ir::instructions::Opcode
[−]
[src]
pub enum Opcode { Jump, Fallthrough, Brz, Brnz, BrIcmp, Brif, Brff, BrTable, Trap, Trapz, Trapnz, Trapif, Trapff, Return, Call, CallIndirect, FuncAddr, Load, Store, Uload8, Sload8, Istore8, Uload16, Sload16, Istore16, Uload32, Sload32, Istore32, StackLoad, StackStore, StackAddr, GlobalAddr, GlobalsymAddr, HeapAddr, Iconst, F32const, F64const, Bconst, Select, Selectif, Copy, Spill, Fill, Regmove, CopySpecial, StackCheck, AdjustSpDown, AdjustSpUpImm, AdjustSpDownImm, IfcmpSp, Regspill, Regfill, Vsplit, Vconcat, Vselect, Splat, Insertlane, Extractlane, Icmp, IcmpImm, Ifcmp, IfcmpImm, Iadd, Isub, Imul, Umulhi, Smulhi, Udiv, Sdiv, Urem, Srem, IaddImm, ImulImm, UdivImm, SdivImm, UremImm, SremImm, IrsubImm, IaddCin, IaddCout, IaddCarry, IsubBin, IsubBout, IsubBorrow, Band, Bor, Bxor, Bnot, BandNot, BorNot, BxorNot, BandImm, BorImm, BxorImm, Rotl, Rotr, RotlImm, RotrImm, Ishl, Ushr, Sshr, IshlImm, UshrImm, SshrImm, Clz, Cls, Ctz, Popcnt, Fcmp, Ffcmp, Fadd, Fsub, Fmul, Fdiv, Sqrt, Fma, Fneg, Fabs, Fcopysign, Fmin, Fmax, Ceil, Floor, Trunc, Nearest, Trueif, Trueff, Bitcast, Breduce, Bextend, Bint, Bmask, Ireduce, Uextend, Sextend, Fpromote, Fdemote, FcvtToUint, FcvtToSint, FcvtFromUint, FcvtFromSint, Isplit, Iconcat, X86Udivmodx, X86Sdivmodx, X86Umulx, X86Smulx, X86Cvtt2si, X86Fmin, X86Fmax, X86Push, X86Pop, X86Bsr, X86Bsf, }
An instruction opcode.
All instructions from all supported ISAs are present.
Variants
Jump
jump EBB, args
. (Jump)
Fallthrough
fallthrough EBB, args
. (Jump)
Brz
brz c, EBB, args
. (Branch)
Type inferred from c
.
Brnz
brnz c, EBB, args
. (Branch)
Type inferred from c
.
BrIcmp
br_icmp Cond, x, y, EBB, args
. (BranchIcmp)
Type inferred from x
.
Brif
brif Cond, f, EBB, args
. (BranchInt)
Brff
brff Cond, f, EBB, args
. (BranchFloat)
BrTable
br_table x, JT
. (BranchTable)
Type inferred from x
.
Trap
trap code
. (Trap)
Trapz
trapz c, code
. (CondTrap)
Type inferred from c
.
Trapnz
trapnz c, code
. (CondTrap)
Type inferred from c
.
Trapif
trapif Cond, f, code
. (IntCondTrap)
Trapff
trapff Cond, f, code
. (FloatCondTrap)
Return
return rvals
. (MultiAry)
Call
rvals = call FN, args
. (Call)
CallIndirect
rvals = call_indirect SIG, callee, args
. (CallIndirect)
Type inferred from callee
.
FuncAddr
addr = func_addr FN
. (FuncAddr)
Load
a = load Flags, p, Offset
. (Load)
Store
store Flags, x, p, Offset
. (Store)
Type inferred from x
.
Uload8
a = uload8 Flags, p, Offset
. (Load)
Sload8
a = sload8 Flags, p, Offset
. (Load)
Istore8
istore8 Flags, x, p, Offset
. (Store)
Type inferred from x
.
Uload16
a = uload16 Flags, p, Offset
. (Load)
Sload16
a = sload16 Flags, p, Offset
. (Load)
Istore16
istore16 Flags, x, p, Offset
. (Store)
Type inferred from x
.
Uload32
a = uload32 Flags, p, Offset
. (Load)
Type inferred from p
.
Sload32
a = sload32 Flags, p, Offset
. (Load)
Type inferred from p
.
Istore32
istore32 Flags, x, p, Offset
. (Store)
Type inferred from x
.
StackLoad
a = stack_load SS, Offset
. (StackLoad)
StackStore
stack_store x, SS, Offset
. (StackStore)
Type inferred from x
.
StackAddr
addr = stack_addr SS, Offset
. (StackLoad)
GlobalAddr
addr = global_addr GV
. (UnaryGlobalVar)
GlobalsymAddr
addr = globalsym_addr GV
. (UnaryGlobalVar)
HeapAddr
addr = heap_addr H, p, Size
. (HeapAddr)
Iconst
a = iconst N
. (UnaryImm)
F32const
a = f32const N
. (UnaryIeee32)
F64const
a = f64const N
. (UnaryIeee64)
Bconst
a = bconst N
. (UnaryBool)
Select
a = select c, x, y
. (Ternary)
Type inferred from x
.
Selectif
a = selectif cc, flags, x, y
. (IntSelect)
Copy
a = copy x
. (Unary)
Type inferred from x
.
Spill
a = spill x
. (Unary)
Type inferred from x
.
Fill
a = fill x
. (Unary)
Type inferred from x
.
Regmove
regmove x, src, dst
. (RegMove)
Type inferred from x
.
CopySpecial
copy_special src, dst
. (CopySpecial)
StackCheck
stack_check GV
. (UnaryGlobalVar)
AdjustSpDown
adjust_sp_down delta
. (Unary)
Type inferred from delta
.
AdjustSpUpImm
adjust_sp_up_imm Offset
. (UnaryImm)
AdjustSpDownImm
adjust_sp_down_imm Offset
. (UnaryImm)
IfcmpSp
f = ifcmp_sp addr
. (Unary)
Type inferred from addr
.
Regspill
regspill x, src, SS
. (RegSpill)
Type inferred from x
.
Regfill
regfill x, SS, dst
. (RegFill)
Type inferred from x
.
Vsplit
lo, hi = vsplit x
. (Unary)
Type inferred from x
.
Vconcat
a = vconcat x, y
. (Binary)
Type inferred from x
.
Vselect
a = vselect c, x, y
. (Ternary)
Type inferred from x
.
Splat
a = splat x
. (Unary)
Insertlane
a = insertlane x, Idx, y
. (InsertLane)
Type inferred from x
.
Extractlane
a = extractlane x, Idx
. (ExtractLane)
Type inferred from x
.
Icmp
a = icmp Cond, x, y
. (IntCompare)
Type inferred from x
.
IcmpImm
a = icmp_imm Cond, x, Y
. (IntCompareImm)
Type inferred from x
.
Ifcmp
f = ifcmp x, y
. (Binary)
Type inferred from x
.
IfcmpImm
f = ifcmp_imm x, Y
. (BinaryImm)
Type inferred from x
.
Iadd
a = iadd x, y
. (Binary)
Type inferred from x
.
Isub
a = isub x, y
. (Binary)
Type inferred from x
.
Imul
a = imul x, y
. (Binary)
Type inferred from x
.
Umulhi
a = umulhi x, y
. (Binary)
Type inferred from x
.
Smulhi
a = smulhi x, y
. (Binary)
Type inferred from x
.
Udiv
a = udiv x, y
. (Binary)
Type inferred from x
.
Sdiv
a = sdiv x, y
. (Binary)
Type inferred from x
.
Urem
a = urem x, y
. (Binary)
Type inferred from x
.
Srem
a = srem x, y
. (Binary)
Type inferred from x
.
IaddImm
a = iadd_imm x, Y
. (BinaryImm)
Type inferred from x
.
ImulImm
a = imul_imm x, Y
. (BinaryImm)
Type inferred from x
.
UdivImm
a = udiv_imm x, Y
. (BinaryImm)
Type inferred from x
.
SdivImm
a = sdiv_imm x, Y
. (BinaryImm)
Type inferred from x
.
UremImm
a = urem_imm x, Y
. (BinaryImm)
Type inferred from x
.
SremImm
a = srem_imm x, Y
. (BinaryImm)
Type inferred from x
.
IrsubImm
a = irsub_imm x, Y
. (BinaryImm)
Type inferred from x
.
IaddCin
a = iadd_cin x, y, c_in
. (Ternary)
Type inferred from y
.
IaddCout
a, c_out = iadd_cout x, y
. (Binary)
Type inferred from x
.
IaddCarry
a, c_out = iadd_carry x, y, c_in
. (Ternary)
Type inferred from y
.
IsubBin
a = isub_bin x, y, b_in
. (Ternary)
Type inferred from y
.
IsubBout
a, b_out = isub_bout x, y
. (Binary)
Type inferred from x
.
IsubBorrow
a, b_out = isub_borrow x, y, b_in
. (Ternary)
Type inferred from y
.
Band
a = band x, y
. (Binary)
Type inferred from x
.
Bor
a = bor x, y
. (Binary)
Type inferred from x
.
Bxor
a = bxor x, y
. (Binary)
Type inferred from x
.
Bnot
a = bnot x
. (Unary)
Type inferred from x
.
BandNot
a = band_not x, y
. (Binary)
Type inferred from x
.
BorNot
a = bor_not x, y
. (Binary)
Type inferred from x
.
BxorNot
a = bxor_not x, y
. (Binary)
Type inferred from x
.
BandImm
a = band_imm x, Y
. (BinaryImm)
Type inferred from x
.
BorImm
a = bor_imm x, Y
. (BinaryImm)
Type inferred from x
.
BxorImm
a = bxor_imm x, Y
. (BinaryImm)
Type inferred from x
.
Rotl
a = rotl x, y
. (Binary)
Type inferred from x
.
Rotr
a = rotr x, y
. (Binary)
Type inferred from x
.
RotlImm
a = rotl_imm x, Y
. (BinaryImm)
Type inferred from x
.
RotrImm
a = rotr_imm x, Y
. (BinaryImm)
Type inferred from x
.
Ishl
a = ishl x, y
. (Binary)
Type inferred from x
.
Ushr
a = ushr x, y
. (Binary)
Type inferred from x
.
Sshr
a = sshr x, y
. (Binary)
Type inferred from x
.
IshlImm
a = ishl_imm x, Y
. (BinaryImm)
Type inferred from x
.
UshrImm
a = ushr_imm x, Y
. (BinaryImm)
Type inferred from x
.
SshrImm
a = sshr_imm x, Y
. (BinaryImm)
Type inferred from x
.
Clz
a = clz x
. (Unary)
Type inferred from x
.
Cls
a = cls x
. (Unary)
Type inferred from x
.
Ctz
a = ctz x
. (Unary)
Type inferred from x
.
Popcnt
a = popcnt x
. (Unary)
Type inferred from x
.
Fcmp
a = fcmp Cond, x, y
. (FloatCompare)
Type inferred from x
.
Ffcmp
f = ffcmp x, y
. (Binary)
Type inferred from x
.
Fadd
a = fadd x, y
. (Binary)
Type inferred from x
.
Fsub
a = fsub x, y
. (Binary)
Type inferred from x
.
Fmul
a = fmul x, y
. (Binary)
Type inferred from x
.
Fdiv
a = fdiv x, y
. (Binary)
Type inferred from x
.
Sqrt
a = sqrt x
. (Unary)
Type inferred from x
.
Fma
a = fma x, y, z
. (Ternary)
Type inferred from y
.
Fneg
a = fneg x
. (Unary)
Type inferred from x
.
Fabs
a = fabs x
. (Unary)
Type inferred from x
.
Fcopysign
a = fcopysign x, y
. (Binary)
Type inferred from x
.
Fmin
a = fmin x, y
. (Binary)
Type inferred from x
.
Fmax
a = fmax x, y
. (Binary)
Type inferred from x
.
Ceil
a = ceil x
. (Unary)
Type inferred from x
.
Floor
a = floor x
. (Unary)
Type inferred from x
.
Trunc
a = trunc x
. (Unary)
Type inferred from x
.
Nearest
a = nearest x
. (Unary)
Type inferred from x
.
Trueif
a = trueif Cond, f
. (IntCond)
Trueff
a = trueff Cond, f
. (FloatCond)
Bitcast
a = bitcast x
. (Unary)
Breduce
a = breduce x
. (Unary)
Bextend
a = bextend x
. (Unary)
Bint
a = bint x
. (Unary)
Bmask
a = bmask x
. (Unary)
Ireduce
a = ireduce x
. (Unary)
Uextend
a = uextend x
. (Unary)
Sextend
a = sextend x
. (Unary)
Fpromote
a = fpromote x
. (Unary)
Fdemote
a = fdemote x
. (Unary)
FcvtToUint
a = fcvt_to_uint x
. (Unary)
FcvtToSint
a = fcvt_to_sint x
. (Unary)
FcvtFromUint
a = fcvt_from_uint x
. (Unary)
FcvtFromSint
a = fcvt_from_sint x
. (Unary)
Isplit
lo, hi = isplit x
. (Unary)
Type inferred from x
.
Iconcat
a = iconcat lo, hi
. (Binary)
Type inferred from lo
.
X86Udivmodx
q, r = x86_udivmodx nlo, nhi, d
. (Ternary)
Type inferred from nhi
.
X86Sdivmodx
q, r = x86_sdivmodx nlo, nhi, d
. (Ternary)
Type inferred from nhi
.
X86Umulx
resLo, resHi = x86_umulx argL, argR
. (Binary)
Type inferred from argL
.
X86Smulx
resLo, resHi = x86_smulx argL, argR
. (Binary)
Type inferred from argL
.
X86Cvtt2si
a = x86_cvtt2si x
. (Unary)
X86Fmin
a = x86_fmin x, y
. (Binary)
Type inferred from x
.
X86Fmax
a = x86_fmax x, y
. (Binary)
Type inferred from x
.
X86Push
x86_push x
. (Unary)
Type inferred from x
.
X86Pop
x = x86_pop
. (NullAry)
X86Bsr
y, rflags = x86_bsr x
. (Unary)
Type inferred from x
.
X86Bsf
y, rflags = x86_bsf x
. (Unary)
Type inferred from x
.
Methods
impl Opcode
[src]
pub fn can_load(self) -> bool
[src]
Can this instruction read from memory?
pub fn can_store(self) -> bool
[src]
Can this instruction write to memory?
pub fn can_trap(self) -> bool
[src]
Can this instruction cause a trap?
pub fn is_branch(self) -> bool
[src]
True for all branch or jump instructions.
pub fn is_call(self) -> bool
[src]
Is this a call instruction?
pub fn is_return(self) -> bool
[src]
Is this a return instruction?
pub fn is_terminator(self) -> bool
[src]
True for instructions that terminate the EBB.
pub fn other_side_effects(self) -> bool
[src]
Does this instruction have other side effects besides can_*
pub fn writes_cpu_flags(self) -> bool
[src]
Does this instruction write to CPU flags?
impl Opcode
[src]
pub fn format(self) -> InstructionFormat
[src]
Get the instruction format for this opcode.
pub fn constraints(self) -> OpcodeConstraints
[src]
Get the constraint descriptor for this opcode.
Panic if this is called on NotAnOpcode
.
Trait Implementations
impl Copy for Opcode
[src]
impl Clone for Opcode
[src]
fn clone(&self) -> Opcode
[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 PartialEq for Opcode
[src]
fn eq(&self, __arg_0: &Opcode) -> bool
[src]
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests for !=
.
impl Eq for Opcode
[src]
impl Debug for Opcode
[src]
fn fmt(&self, __arg_0: &mut Formatter) -> Result
[src]
Formats the value using the given formatter. Read more
impl Hash for Opcode
[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 Display for Opcode
[src]
fn fmt(&self, f: &mut Formatter) -> Result
[src]
Formats the value using the given formatter. Read more