wasmFullPass(`(module
(func $test (param i32) (param i32) (result i32) (i32.add (local.get 0 ) (local.get 1 )))
(func $run (result i32) (call $test (i32.const 1 ) (i32.const ${Math.pow(2 , 31 ) - 1 })))
(export "run" (func $run))
)`, -Math.pow(2 , 31 ));
wasmFullPass(`(module
(func (result i32)
i32.const 1
i32.const 42
i32.add
return
unreachable
i32.const 0
call 3
i32.const 42
i32.add
)
(func) (func) (func)
(export "run" (func 0 )))`, 43 );
wasmFullPass(`
(module
(import "env" "a" (global $a i32))
(import "env" "b" (func $b (param i32) (result i32)))
(func (export "run" ) (param $0 i32) (result i32) local.get 0 call $b)
)`, 43 , { env: { a: 1337 , b: x => x+1 } }, 42 );
// Global section.
wasmFullPass(`(module
(import "globals" "x" (global $imported i32))
(global $mut_local (mut i32) (i32.const 0 ))
(global $imm_local i32 (i32.const 37 ))
(global $imm_local_2 i32 (global.get 0 ))
(func $get (result i32)
i32.const 13
global.set $mut_local
global.get $imported
global.get $mut_local
i32.add
global.get $imm_local
i32.add
global.get $imm_local_2
i32.add
)
(export "run" (func $get))
)`, 13 + 42 + 37 + 42 , { globals: {x: 42 } });
// Memory.
wasmFullPass(`(module
(memory (export "memory" ) 1 2 )
(data (i32.const 0 ) "\\00\\01\\02" "\\03\\04\\05" )
(data (i32.const 6 ) "\\06" )
(func (export "run" ) (result i32)
i32.const 1
i32.load offset=2
)
)`, 0 x06050403);
let memory = new WebAssembly.Memory({ initial: 1 , maximum: 2 });
wasmFullPass(`(module
(memory (import "" "memory" ) 1 2 )
(data (i32.const 0 ) "\\00\\01\\02\\03\\04\\05" )
(func (export "run" ) (result i32)
i32.const 1
i32.load offset=2
)
(export "mem" (memory 0 ))
)`, 0 x050403, {"" : {memory}});
// Tables.
wasmFullPass(`(module
(table (export "table" ) 3 funcref)
(type $t (func (result i32)))
(func $foo (result i32) (i32.const 1 ))
(func $bar (result i32) (i32.const 2 ))
(func $baz (result i32) (i32.const 3 ))
(elem (i32.const 0 ) $baz $bar)
(elem (i32.const 2 ) $foo)
(func (export "run" ) (param i32) (result i32)
local.get 0
call_indirect (type $t)
)
)`, 3 , {}, 0 );
let table = new WebAssembly.Table({ element: 'anyfunc' , initial: 3 , maximum: 3 });
wasmFullPass(`(module
(table (import "" "table" ) 3 4 funcref)
(type $t (func (result i32)))
(func $foo (result i32) (i32.const 1 ))
(func $bar (result i32) (i32.const 2 ))
(func $baz (result i32) (i32.const 3 ))
(elem (i32.const 0 ) $baz $bar)
(elem (i32.const 2 ) $foo)
(func (export "run" ) (param i32) (result i32)
local.get 0
call_indirect (type $t)
)
)`, 3 , {"" :{table}}, 0 );
// Start function.
wasmFullPass(`(module
(global $g (mut i32) (i32.const 0 ))
(func $start
global.get $g
i32.const 1
i32.add
global.set $g
)
(start $start)
(func (export "run" ) (result i32)
global.get $g
)
)`, 1 );
// Branch table.
for (let [p, result] of [
[0 , 7 ],
[1 , 6 ],
[2 , 4 ],
[42 , 4 ]
]) {
wasmFullPass(`(module
(func (export "run" ) (param $p i32) (result i32) (local $n i32)
i32.const 0
local.set $n
block $c block $b block $a
local.get $p
br_table $a $b $c
end $a
local.get $n
i32.const 1
i32.add
local.set $n
end $b
local.get $n
i32.const 2
i32.add
local.set $n
end $c
local.get $n
i32.const 4
i32.add
)
)`, result, {}, p);
}
Messung V0.5 in Prozent C=78 H=92 G=84
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland