(
&mut self,
mem_addr: tinywasm_types::MemAddr,
offset: u64,
cast: impl Fn(T) -> U,
)
| 1449 | } |
| 1450 | |
| 1451 | fn exec_mem_store<T: InternalValue, U: MemValue<N>, const N: usize>( |
| 1452 | &mut self, |
| 1453 | mem_addr: tinywasm_types::MemAddr, |
| 1454 | offset: u64, |
| 1455 | cast: impl Fn(T) -> U, |
| 1456 | ) -> Result<(), Trap> { |
| 1457 | let val = <T>::stack_pop(&mut self.store.value_stack); |
| 1458 | let val = cast(val).to_mem_bytes(); |
| 1459 | |
| 1460 | let mem_addr = self.module.resolve_mem_addr(mem_addr); |
| 1461 | let mem = self.store.state.get_mem_mut(mem_addr); |
| 1462 | let addr = match mem.is_64bit() { |
| 1463 | true => <i64>::stack_pop(&mut self.store.value_stack) as u64, |
| 1464 | false => <i32>::stack_pop(&mut self.store.value_stack) as u32 as u64, |
| 1465 | }; |
| 1466 | match mem.store(addr, offset, val) { |
| 1467 | Ok(()) => Ok(()), |
| 1468 | Err(e) => { |
| 1469 | cold_path(); |
| 1470 | Err(e) |
| 1471 | } |
| 1472 | } |
| 1473 | } |
| 1474 | |
| 1475 | fn exec_table_get(&mut self, table_index: u32) -> Result<(), Trap> { |
| 1476 | let idx: i32 = <i32>::stack_pop(&mut self.store.value_stack); |
nothing calls this directly
no test coverage detected