MCPcopy Create free account
hub / github.com/explodingcamera/tinywasm / exec_mem_store_lane

Method exec_mem_store_lane

crates/tinywasm/src/interpreter/executor.rs:1426–1449  ·  view source on GitHub ↗
(
        &mut self,
        mem_addr: tinywasm_types::MemAddr,
        offset: u64,
        lane: u8,
    )

Source from the content-addressed store, hash-verified

1424 }
1425
1426 fn exec_mem_store_lane<U: MemValue<N> + Copy, const N: usize>(
1427 &mut self,
1428 mem_addr: tinywasm_types::MemAddr,
1429 offset: u64,
1430 lane: u8,
1431 ) -> Result<(), Trap> {
1432 let bytes = <Value128>::stack_pop(&mut self.store.value_stack).to_mem_bytes();
1433 let lane_offset = lane as usize * N;
1434 let mut val = [0u8; N];
1435 val.copy_from_slice(&bytes[lane_offset..lane_offset + N]);
1436 let mem_addr = self.module.resolve_mem_addr(mem_addr);
1437 let mem = self.store.state.get_mem_mut(mem_addr);
1438 let addr = match mem.is_64bit() {
1439 true => <i64>::stack_pop(&mut self.store.value_stack) as u64,
1440 false => <i32>::stack_pop(&mut self.store.value_stack) as u32 as u64,
1441 };
1442 match mem.store(addr, offset, val) {
1443 Ok(()) => Ok(()),
1444 Err(e) => {
1445 cold_path();
1446 Err(e)
1447 }
1448 }
1449 }
1450
1451 fn exec_mem_store<T: InternalValue, U: MemValue<N>, const N: usize>(
1452 &mut self,

Callers

nothing calls this directly

Calls 6

to_mem_bytesMethod · 0.80
resolve_mem_addrMethod · 0.80
get_mem_mutMethod · 0.80
is_64bitMethod · 0.80
copy_from_sliceMethod · 0.45
storeMethod · 0.45

Tested by

no test coverage detected