lunar_wave/lunar_wave_vm/src/instruction.rs

100 lines
1.3 KiB
Rust
Raw Normal View History

#[derive (Clone, Copy, Debug, PartialEq)]
2023-09-26 21:47:51 +00:00
pub enum Instruction {
Add (u8, u8, u8),
2023-09-30 14:57:51 +00:00
AddI (u8, u8, i8),
2023-09-26 21:47:51 +00:00
Call (u8, u8, u8),
Closure (u8, u32),
Concat (u8, u8),
2023-09-26 21:47:51 +00:00
2023-09-30 15:05:07 +00:00
Div (u8, u8, u8),
2023-09-27 03:45:41 +00:00
EqI (u8, i8, bool),
2023-09-26 21:47:51 +00:00
// Equals Constant?
EqK (u8, u8, bool),
ExtraArg (u32),
ForLoop (u8, u32),
ForPrep (u8, u32),
GetField (u8, u8, u8),
2023-09-26 21:47:51 +00:00
// Get Immediate?
GetI (u8, u8, u8),
GetTable (u8, u8, u8),
2023-09-26 21:47:51 +00:00
// Get Table, Upvalue
GetTabUp (u8, u8, u8),
GetUpVal (u8, u8),
// Jump
Jmp (i32),
Len (u8, u8),
2023-09-26 21:47:51 +00:00
// Load F (Float?)
LoadF (u8, i32),
LoadFalse (u8),
// Load Integer?
LoadI (u8, i32),
// Load Constant
LoadK (u8, u32),
LoadNil (u8),
LoadTrue (u8),
// MetaMethod, Binary
MmBin (u8, u8, u8),
2023-09-30 15:01:30 +00:00
MmBinI (u8, i8, u8, bool),
2023-09-27 03:45:41 +00:00
MmBinK (u8, u8, u8, bool),
ModK (u8, u8, u8),
2023-09-26 21:47:51 +00:00
Move (u8, u8),
Mul (u8, u8, u8),
2023-09-30 14:52:42 +00:00
MulK (u8, u8, u8),
2023-09-26 21:47:51 +00:00
NewTable (u8),
Not (u8, u8),
// (A, B, _C, k) Return B - 1 registers starting with A
Return (u8, u8, u8, bool),
Return0,
// Return just one register
Return1 (u8),
SetField (u8, u8, u8, bool),
SetI (u8, u8, u8, bool),
SetList (u8, u8, u8, bool),
SetTabUp (u8, u8, u8, bool),
2023-09-26 21:47:51 +00:00
2023-09-30 15:01:30 +00:00
Sub (u8, u8, u8),
2023-09-26 21:47:51 +00:00
TailCall (u8, u8, u8, bool),
Test (u8, bool),
2023-09-30 15:05:07 +00:00
UnM (u8, u8),
2023-09-26 21:47:51 +00:00
VarArgPrep (i32),
}