MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / emit_wasm_store

Method emit_wasm_store

winch/codegen/src/codegen/mod.rs:1393–1416  ·  view source on GitHub ↗

Emit a WebAssembly store.

(&mut self, arg: &MemArg, kind: StoreKind)

Source from the content-addressed store, hash-verified

1391
1392 /// Emit a WebAssembly store.
1393 pub fn emit_wasm_store(&mut self, arg: &MemArg, kind: StoreKind) -> Result<()> {
1394 let memory_index = MemoryIndex::from_u32(arg.memory);
1395 let heap = self.env.resolve_heap(memory_index);
1396 let src = self.context.pop_to_reg(self.masm, None)?;
1397
1398 let maybe_addr = match kind {
1399 StoreKind::Atomic(size) => {
1400 self.emit_compute_heap_address_align_checked(&heap, &arg, size)?
1401 }
1402 StoreKind::Operand(size) | StoreKind::VectorLane(LaneSelector { size, .. }) => {
1403 self.emit_compute_heap_address(&heap, &arg, size)?
1404 }
1405 };
1406
1407 if let Some(addr) = maybe_addr {
1408 self.masm
1409 .wasm_store(src.reg, self.masm.address_at_reg(addr, 0)?, kind)?;
1410
1411 self.context.free_reg(addr);
1412 }
1413 self.context.free_reg(src);
1414
1415 Ok(())
1416 }
1417
1418 /// Loads the address of the table element at a given index. Returns the
1419 /// address of the table element using the provided register as base.

Callers 15

visit_i32_storeMethod · 0.80
visit_i32_store8Method · 0.80
visit_i32_store16Method · 0.80
visit_i64_storeMethod · 0.80
visit_i64_store8Method · 0.80
visit_i64_store16Method · 0.80
visit_i64_store32Method · 0.80
visit_f32_storeMethod · 0.80
visit_f64_storeMethod · 0.80

Calls 8

OkFunction · 0.85
resolve_heapMethod · 0.80
pop_to_regMethod · 0.80
free_regMethod · 0.80
wasm_storeMethod · 0.45
address_at_regMethod · 0.45

Tested by

no test coverage detected