Co-authored-by: Nilton Constantino <nilton.constantino@visma.com> Reviewed-on: #3
30 lines
793 B
Rust
30 lines
793 B
Rust
use crate::opcode::OpCode;
|
|
|
|
pub fn operand_size(opcode: OpCode) -> usize {
|
|
match opcode {
|
|
OpCode::PushConst => 4,
|
|
OpCode::PushI32 => 4,
|
|
OpCode::PushI64 => 8,
|
|
OpCode::PushF64 => 8,
|
|
OpCode::PushBool => 1,
|
|
OpCode::PopN => 4,
|
|
OpCode::Jmp | OpCode::JmpIfFalse | OpCode::JmpIfTrue => 4,
|
|
OpCode::GetGlobal | OpCode::SetGlobal => 4,
|
|
OpCode::GetLocal | OpCode::SetLocal => 4,
|
|
OpCode::Call => 8, // addr(u32) + args_count(u32)
|
|
OpCode::Syscall => 4,
|
|
_ => 0,
|
|
}
|
|
}
|
|
|
|
pub fn is_jump(opcode: OpCode) -> bool {
|
|
match opcode {
|
|
OpCode::Jmp | OpCode::JmpIfFalse | OpCode::JmpIfTrue => true,
|
|
_ => false,
|
|
}
|
|
}
|
|
|
|
pub fn has_immediate(opcode: OpCode) -> bool {
|
|
operand_size(opcode) > 0
|
|
}
|