use crate::error::VmResult;
use crate::state::VmState;
pub fn handle_push_imm(state: &mut VmState) -> VmResult<()> {
let value = state.read_u64()?;
state.push(value)
}
pub fn handle_push_imm8(state: &mut VmState) -> VmResult<()> {
let value = state.read_u8()? as u64;
state.push(value)
}
pub fn handle_push_imm16(state: &mut VmState) -> VmResult<()> {
let value = state.read_u16()? as u64;
state.push(value)
}
pub fn handle_push_imm32(state: &mut VmState) -> VmResult<()> {
let value = state.read_u32()? as u64;
state.push(value)
}
pub fn handle_push_reg(state: &mut VmState) -> VmResult<()> {
let reg_idx = state.read_u8()?;
let value = state.get_reg(reg_idx)?;
state.push(value)
}
pub fn handle_pop_reg(state: &mut VmState) -> VmResult<()> {
let reg_idx = state.read_u8()?;
let value = state.pop()?;
state.set_reg(reg_idx, value)
}
pub fn handle_dup(state: &mut VmState) -> VmResult<()> {
let value = state.peek()?;
state.push(value)
}
pub fn handle_swap(state: &mut VmState) -> VmResult<()> {
let top = state.pop()?;
let below = state.pop()?;
state.push(top)?;
state.push(below)
}
pub fn handle_drop(state: &mut VmState) -> VmResult<()> {
state.pop()?;
Ok(())
}