cranelift-wasm: support multi-value Wasm (#1049)
This commit introduces initial support for multi-value Wasm. Wasm blocks and calls can now take and return an arbitrary number of values. The encoding for multi-value blocks means that we need to keep the contents of the "Types" section around when translating function bodies. To do this, we introduce a `WasmTypesMap` type that maps the type indices to their parameters and returns, construct it when parsing the "Types" section, and shepherd it through a bunch of functions and methods when translating function bodies.
This commit is contained in:
13
cranelift/wasmtests/multi-4.wat
Normal file
13
cranelift/wasmtests/multi-4.wat
Normal file
@@ -0,0 +1,13 @@
|
||||
(module
|
||||
(func (export "multiIf2") (param i32 i64 i64) (result i64 i64)
|
||||
(local.get 2)
|
||||
(local.get 1)
|
||||
(local.get 0)
|
||||
(if (param i64 i64) (result i64 i64)
|
||||
(then
|
||||
i64.add
|
||||
i64.const 1)
|
||||
;; Hits the code path for an `else` after a block that does not end unreachable.
|
||||
(else
|
||||
i64.sub
|
||||
i64.const 2))))
|
||||
Reference in New Issue
Block a user