pub const MULTRET: u8 = u8::MAX;
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Instruction {
LoadNil {
dst: u8,
},
LoadBool {
dst: u8,
val: bool,
},
LoadInt {
dst: u8,
val: i32,
},
LoadK {
dst: u8,
k: u16,
},
Move {
dst: u8,
src: u8,
},
GetGlobal {
dst: u8,
name_k: u16,
},
SetGlobal {
src: u8,
name_k: u16,
},
GetUpval {
dst: u8,
upval_idx: u8,
},
SetUpval {
src: u8,
upval_idx: u8,
},
NewTable {
dst: u8,
array_cap: u8,
fields_cap: u8,
},
GetTable {
dst: u8,
table: u8,
key: u8,
},
SetTable {
table: u8,
key: u8,
val: u8,
},
GetTableK {
dst: u8,
table: u8,
key_k: u16,
},
SetTableK {
table: u8,
key_k: u16,
val: u8,
},
AppendArray {
table: u8,
src: u8,
},
GetImport {
dst: u8,
mod_k: u16,
field_k: u16,
site: u16,
},
Add {
dst: u8,
a: u8,
b: u8,
},
Sub {
dst: u8,
a: u8,
b: u8,
},
Mul {
dst: u8,
a: u8,
b: u8,
},
Div {
dst: u8,
a: u8,
b: u8,
},
IDiv {
dst: u8,
a: u8,
b: u8,
},
Mod {
dst: u8,
a: u8,
b: u8,
},
Pow {
dst: u8,
a: u8,
b: u8,
},
BitAnd {
dst: u8,
a: u8,
b: u8,
},
BitOr {
dst: u8,
a: u8,
b: u8,
},
BitXor {
dst: u8,
a: u8,
b: u8,
},
Shl {
dst: u8,
a: u8,
b: u8,
},
Shr {
dst: u8,
a: u8,
b: u8,
},
LShl {
dst: u8,
a: u8,
b: u8,
},
LShr {
dst: u8,
a: u8,
b: u8,
},
Concat {
dst: u8,
a: u8,
b: u8,
},
Unm {
dst: u8,
src: u8,
},
Not {
dst: u8,
src: u8,
},
Len {
dst: u8,
src: u8,
},
BitNot {
dst: u8,
src: u8,
},
Coalesce {
dst: u8,
a: u8,
b: u8,
},
Eq {
a: u8,
b: u8,
jump_if_false: i16,
},
Ne {
a: u8,
b: u8,
jump_if_false: i16,
},
Lt {
a: u8,
b: u8,
jump_if_false: i16,
},
Le {
a: u8,
b: u8,
jump_if_false: i16,
},
Gt {
a: u8,
b: u8,
jump_if_false: i16,
},
Ge {
a: u8,
b: u8,
jump_if_false: i16,
},
Test {
reg: u8,
jump_if_false: i16,
},
Jump {
offset: i16,
},
Call {
callee: u8,
argc: u8,
retc: u8,
},
Return {
base: u8,
count: u8,
},
Closure {
dst: u8,
proto_idx: u16,
},
Vararg {
dst: u8,
count: u8,
},
ForPrep {
base: u8,
jump: i16,
},
ForLoop {
base: u8,
jump: i16,
},
SetList {
table: u8,
base: u8,
count: u8,
},
TForCall {
base: u8,
retc: u8,
},
TForLoop {
base: u8,
jump: i16,
},
CloseUpval {
reg: u8,
},
}