bquarkz 694d6c8be6 dev/vm-improvements (#3)
Co-authored-by: Nilton Constantino <nilton.constantino@visma.com>
Reviewed-on: #3
2026-01-20 10:18:44 +00:00

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
}