Mir*_*pov 8 select if-statement webassembly
wasmif和selectwasm之间有什么区别,这些命令的最佳应用是什么?
wat2wasm中的示例:
瓦特代码:
(module
(func (export "Select") (param i32) (result i32)
(select (i32.const 3)
(i32.const 5)
(local.get 0) ))
(func (export "If") (param i32) (result i32)
(if (result i32) (local.get 0)
(then (i32.const 7))
(else (i32.const 11)) )) )
Run Code Online (Sandbox Code Playgroud)
JS代码:
const wasmInstance = new WebAssembly.Instance(wasmModule, {});
const { Select, If } = wasmInstance.exports;
console.log(Select(1)); // => 3
console.log(Select(0)); // => 5
console.log(If(1)); // => 7
console.log(If(0)); // => 11
Run Code Online (Sandbox Code Playgroud)
根据文档:
该select运算符根据第三个操作数是否为零来选择前两个操作数之一。
block、loop和指令if是结构化指令。它们将嵌套的指令序列括起来,称为块,以 end 或伪指令终止或分隔。正如语法所规定的,它们必须是良好嵌套的。结构化指令可以产生由注释的结果类型所描述的值。
然而,select操作符可以包含block并执行许多指令。
(select (i32.const 3)
(block (result i32)
(i32.const 5) )
(local.get 0) )
Run Code Online (Sandbox Code Playgroud)
该select指令是严格的,即它总是评估其所有操作数,而if只执行其中一个分支。如果操作数很简单(例如,只是值),那么select这是更有效的选择,因为它不需要执行任何分支。它直接编译为单个硬件指令。
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |