use crate::error::VmResult;
use crate::state::VmState;
pub fn handle_heap_alloc(state: &mut VmState) -> VmResult<()> {
let size = state.pop()? as usize;
let addr = state.heap_alloc(size)?;
state.push(addr)
}
pub fn handle_heap_free(state: &mut VmState) -> VmResult<()> {
let addr = state.pop()? as usize;
state.heap_free(addr)
}
pub fn handle_heap_load8(state: &mut VmState) -> VmResult<()> {
let addr = state.pop()? as usize;
let value = state.heap_read_u8(addr)? as u64;
state.push(value)
}
pub fn handle_heap_load16(state: &mut VmState) -> VmResult<()> {
let addr = state.pop()? as usize;
let value = state.heap_read_u16(addr)? as u64;
state.push(value)
}
pub fn handle_heap_load32(state: &mut VmState) -> VmResult<()> {
let addr = state.pop()? as usize;
let value = state.heap_read_u32(addr)? as u64;
state.push(value)
}
pub fn handle_heap_load64(state: &mut VmState) -> VmResult<()> {
let addr = state.pop()? as usize;
let value = state.heap_read_u64(addr)?;
state.push(value)
}
pub fn handle_heap_store8(state: &mut VmState) -> VmResult<()> {
let value = state.pop()? as u8;
let addr = state.pop()? as usize;
state.heap_write_u8(addr, value)
}
pub fn handle_heap_store16(state: &mut VmState) -> VmResult<()> {
let value = state.pop()? as u16;
let addr = state.pop()? as usize;
state.heap_write_u16(addr, value)
}
pub fn handle_heap_store32(state: &mut VmState) -> VmResult<()> {
let value = state.pop()? as u32;
let addr = state.pop()? as usize;
state.heap_write_u32(addr, value)
}
pub fn handle_heap_store64(state: &mut VmState) -> VmResult<()> {
let value = state.pop()?;
let addr = state.pop()? as usize;
state.heap_write_u64(addr, value)
}
pub fn handle_heap_size(state: &mut VmState) -> VmResult<()> {
let size = state.heap_size() as u64;
state.push(size)
}