mirror of
https://github.com/denoland/deno.git
synced 2025-10-02 23:24:37 +00:00
feat(ops): fast calls for Wasm (#16776)
This PR introduces Wasm ops. These calls are optimized for entry from Wasm land. The `#[op(wasm)]` attribute is opt-in. Last parameter `Option<&mut [u8]>` is the memory slice of the Wasm module *when entered from a Fast API call*. Otherwise, the user is expected to implement logic to obtain the memory if `None` ```rust #[op(wasm)] pub fn op_args_get( offset: i32, buffer_offset: i32, memory: Option<&mut [u8]>, ) { // ... } ```
This commit is contained in:
parent
9ffc6acdbb
commit
ca66978a5a
11 changed files with 291 additions and 8 deletions
28
core/examples/wasm.js
Normal file
28
core/examples/wasm.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
||||
|
||||
// asc wasm.ts --exportStart --initialMemory 6400 -O -o wasm.wasm
|
||||
// deno-fmt-ignore
|
||||
const bytes = new Uint8Array([
|
||||
0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 2,
|
||||
15, 1, 3, 111, 112, 115, 7, 111, 112, 95, 119, 97, 115, 109, 0,
|
||||
0, 3, 3, 2, 0, 0, 5, 4, 1, 0, 128, 50, 7, 36, 4,
|
||||
7, 111, 112, 95, 119, 97, 115, 109, 0, 0, 4, 99, 97, 108, 108,
|
||||
0, 1, 6, 109, 101, 109, 111, 114, 121, 2, 0, 6, 95, 115, 116,
|
||||
97, 114, 116, 0, 2, 10, 10, 2, 4, 0, 16, 0, 11, 3, 0,
|
||||
1, 11
|
||||
]);
|
||||
|
||||
const { ops } = Deno.core;
|
||||
|
||||
const module = new WebAssembly.Module(bytes);
|
||||
const instance = new WebAssembly.Instance(module, { ops });
|
||||
ops.op_set_wasm_mem(instance.exports.memory);
|
||||
|
||||
instance.exports.call();
|
||||
|
||||
const memory = instance.exports.memory;
|
||||
const view = new Uint8Array(memory.buffer);
|
||||
|
||||
if (view[0] !== 69) {
|
||||
throw new Error("Expected first byte to be 69");
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue