From 3361f928658652bd7178f37851c9dd9fadb077c8 Mon Sep 17 00:00:00 2001 From: Henry Gressmann Date: Mon, 1 Jul 2024 23:17:57 +0200 Subject: chore: refactor executor, add LocalCopy instructions Signed-off-by: Henry Gressmann --- crates/parser/src/module.rs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'crates/parser/src/module.rs') diff --git a/crates/parser/src/module.rs b/crates/parser/src/module.rs index 3ee619f..74da1d9 100644 --- a/crates/parser/src/module.rs +++ b/crates/parser/src/module.rs @@ -3,12 +3,12 @@ use crate::{conversion, ParseError, Result}; use alloc::string::ToString; use alloc::{boxed::Box, format, vec::Vec}; use tinywasm_types::{ - Data, Element, Export, FuncType, Global, Import, Instruction, LocalCounts, MemoryType, TableType, TinyWasmModule, - WasmFunction, + Data, Element, Export, FuncType, Global, Import, Instruction, MemoryType, TableType, TinyWasmModule, ValType, + ValueCounts, ValueCountsSmall, WasmFunction, }; use wasmparser::{FuncValidatorAllocations, Payload, Validator}; -pub(crate) type Code = (Box<[Instruction]>, LocalCounts); +pub(crate) type Code = (Box<[Instruction]>, ValueCounts); #[derive(Default)] pub(crate) struct ModuleReader { @@ -193,10 +193,18 @@ impl ModuleReader { .code .into_iter() .zip(self.code_type_addrs) - .map(|((instructions, locals), ty_idx)| WasmFunction { - instructions, - locals, - ty: self.func_types.get(ty_idx as usize).expect("No func type for func, this is a bug").clone(), + .map(|((instructions, locals), ty_idx)| { + let mut params = ValueCountsSmall::default(); + let ty = self.func_types.get(ty_idx as usize).expect("No func type for func, this is a bug").clone(); + for param in ty.params.iter() { + match param { + ValType::I32 | ValType::F32 => params.c32 += 1, + ValType::I64 | ValType::F64 => params.c64 += 1, + ValType::V128 => params.c128 += 1, + ValType::RefExtern | ValType::RefFunc => params.cref += 1, + } + } + WasmFunction { instructions, params, locals, ty } }) .collect::>() .into_boxed_slice(); -- cgit v1.3.1