Skip to content

Commit

Permalink
Merge pull request bytecodealliance#75 from dhil/wasmfx-merge
Browse files Browse the repository at this point in the history
Merge with upstream
  • Loading branch information
dhil committed Jan 9, 2024
2 parents b0cb999 + 5fbf0d9 commit 3d6fef1
Show file tree
Hide file tree
Showing 20 changed files with 1,395 additions and 551 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ jobs:
if: matrix.target == 'x86_64-pc-windows-gnu'

# Update binutils if MinGW due to https://github.com/rust-lang/rust/issues/112368
- run: C:/msys64/usr/bin/pacman.exe -Syu --needed mingw-w64-x86_64-gcc --noconfirm
- run: C:/msys64/usr/bin/pacman.exe -S --needed mingw-w64-x86_64-gcc --noconfirm
if: matrix.target == 'x86_64-pc-windows-gnu'
- shell: pwsh
run: echo "C:\msys64\mingw64\bin" >> $Env:GITHUB_PATH
Expand Down
1 change: 1 addition & 0 deletions ADOPTERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ Wasmtime is used in many different production use-cases. This list has grown sig
| [Fermyon](https://fermyon.com) | [@tschneidereit](https://github.com/tschneidereit) | ![production](https://img.shields.io/badge/-production-blue?style=flat) | Fermyon Cloud is a cloud application platform for WebAssembly-based serverless functions and microservices. |
| [InfinyOn](https://infinyon.com/) | [@sehz](https://github.com/sehz) | ![production](https://img.shields.io/badge/-production-blue?style=flat) | InfinyOn leverages the power of WebAssembly SmartModules to execute real-time data transformations. |
| [Microsoft](https://microsoft.com/) | [@devigned](https://gist.github.com/devigned) | ![production](https://img.shields.io/badge/-production-blue?style=flat) | Microsoft has had Wasmtime in preview for its WebAssembly System Interface (WASI) node pools in Azure Kubernetes Service since October 2021. |
| [Redpanda](https://redpanda.com/) | [@rockwotj](https://github.com/rockwotj) | ![beta](https://img.shields.io/badge/-beta-orange?style=flat) | Redpanda Data Transforms allow developers to transform data directly in the message broker. |
| [Shopify](https://www.shopify.com/) | [@saulecabrera](https://github.com/saulecabrera) | ![production](https://img.shields.io/badge/-production-blue?style=flat) | Shopify Functions allow developers to customize the backend logic of Shopify. |
| [SingleStore](https://www.singlestore.com/) | [@Kylebrown9](https://github.com/Kylebrown9) | ![production](https://img.shields.io/badge/-production-blue?style=flat) | SingleStoreDB Cloud embeds Wasmtime to bring developers' code to the data, safely and with speed and scale. |
2 changes: 0 additions & 2 deletions fuzz/fuzz_targets/differential.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,8 @@ fn execute_one(data: &[u8]) -> Result<()> {
// When fuzzing Winch, explicitly override the compiler strategy, which by
// default its arbitrary implementation unconditionally returns
// `Cranelift`.
// We also explicitly disable multi-value support.
if fuzz_winch {
config.wasmtime.compiler_strategy = CompilerStrategy::Winch;
config.module_config.config.multi_value_enabled = false;
}

// Choose an engine that Wasmtime will be differentially executed against.
Expand Down
89 changes: 89 additions & 0 deletions tests/misc_testsuite/winch/block.wast
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,21 @@
(block (result i32) (i32.const 7))
)

(func (export "multi") (result i32)
(block (call $dummy) (call $dummy) (call $dummy) (call $dummy))
(block (result i32)
(call $dummy) (call $dummy) (call $dummy) (i32.const 7) (call $dummy)
)
(drop)

(block (result i32 i64 i32)
(call $dummy) (call $dummy) (call $dummy) (i32.const 8) (call $dummy)
(call $dummy) (call $dummy) (call $dummy) (i64.const 7) (call $dummy)
(call $dummy) (call $dummy) (call $dummy) (i32.const 9) (call $dummy)
)
(drop) (drop)
)

(func (export "nested") (result i32)
(block (result i32)
(block (call $dummy) (block) (nop))
Expand Down Expand Up @@ -158,6 +173,70 @@
(local.get 0)
)

(func (export "param") (result i32)
(i32.const 1)
(block (param i32) (result i32)
(i32.const 2)
(i32.add)
)
)
(func (export "params") (result i32)
(i32.const 1)
(i32.const 2)
(block (param i32 i32) (result i32)
(i32.add)
)
)
(func (export "params-id") (result i32)
(i32.const 1)
(i32.const 2)
(block (param i32 i32) (result i32 i32))
(i32.add)
)
(func (export "param-break") (result i32)
(i32.const 1)
(block (param i32) (result i32)
(i32.const 2)
(i32.add)
(br 0)
)
)
(func (export "params-break") (result i32)
(i32.const 1)
(i32.const 2)
(block (param i32 i32) (result i32)
(i32.add)
(br 0)
)
)
(func (export "params-id-break") (result i32)
(i32.const 1)
(i32.const 2)
(block (param i32 i32) (result i32 i32) (br 0))
(i32.add)
)

(type $block-sig-1 (func))
(type $block-sig-2 (func (result i32)))
(type $block-sig-3 (func (param $x i32)))
(type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32)))

(func (export "type-use")
(block (type $block-sig-1))
(block (type $block-sig-2) (i32.const 0))
(block (type $block-sig-3) (drop))
(i32.const 0) (f64.const 0) (i32.const 0)
(block (type $block-sig-4))
(drop) (drop) (drop)
(block (type $block-sig-2) (result i32) (i32.const 0))
(block (type $block-sig-3) (param i32) (drop))
(i32.const 0) (f64.const 0) (i32.const 0)
(block (type $block-sig-4)
(param i32) (param f64 i32) (result i32 f64) (result i32)
)
(drop) (drop) (drop)
)

(func (export "effects") (result i32)
(local i32)
(block
Expand All @@ -174,6 +253,7 @@

(assert_return (invoke "empty"))
(assert_return (invoke "singular") (i32.const 7))
(assert_return (invoke "multi") (i32.const 8))
(assert_return (invoke "nested") (i32.const 9))
(assert_return (invoke "deep") (i32.const 150))
(assert_return (invoke "as-if-condition"))
Expand All @@ -196,3 +276,12 @@
(assert_return (invoke "as-br_table-last") (i32.const 2))
(assert_return (invoke "break-bare") (i32.const 19))
(assert_return (invoke "break-repeated") (i32.const 18))

(assert_return (invoke "param") (i32.const 3))
(assert_return (invoke "params") (i32.const 3))
(assert_return (invoke "params-id") (i32.const 3))
(assert_return (invoke "param-break") (i32.const 3))
(assert_return (invoke "params-break") (i32.const 3))
(assert_return (invoke "params-id-break") (i32.const 3))

(assert_return (invoke "type-use"))
41 changes: 41 additions & 0 deletions tests/misc_testsuite/winch/br.wast
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,35 @@
;; Auxiliary definition
(func $dummy)

(func (export "type-i32") (block (drop (i32.ctz (br 0)))))
(func (export "type-i64") (block (drop (i64.ctz (br 0)))))
(func (export "type-f32") (block (drop (f32.neg (br 0)))))
(func (export "type-f64") (block (drop (f64.neg (br 0)))))
(func (export "type-i32-i32") (block (drop (i32.add (br 0)))))
(func (export "type-i64-i64") (block (drop (i64.add (br 0)))))
(func (export "type-f32-f32") (block (drop (f32.add (br 0)))))
(func (export "type-f64-f64") (block (drop (f64.add (br 0)))))


(func (export "type-i32-value") (result i32)
(block (result i32) (i32.ctz (br 0 (i32.const 1))))
)
(func (export "type-i64-value") (result i64)
(block (result i64) (i64.ctz (br 0 (i64.const 2))))
)

(func (export "type-f32-value") (result f32)
(block (result f32) (f32.neg (br 0 (f32.const 3))))
)
(func (export "type-f64-value") (result f64)
(block (result f64) (f64.neg (br 0 (f64.const 4))))
)
(func (export "type-f64-f64-value") (result f64 f64)
(block (result f64 f64)
(f64.add (br 0 (f64.const 4) (f64.const 5))) (f64.const 6)
)
)

(func (export "as-block-first")
(block (br 0) (call $dummy))
)
Expand Down Expand Up @@ -61,6 +83,11 @@
(block (result i64) (return (br 0 (i64.const 7))))
)

(func (export "as-return-values") (result i32 i64)
(i32.const 2)
(block (result i64) (return (br 0 (i32.const 1) (i64.const 7))))
)

(func (export "as-if-cond") (result i32)
(block (result i32)
(if (result i32) (br 0 (i32.const 2))
Expand Down Expand Up @@ -217,8 +244,21 @@
)
)

(assert_return (invoke "type-i32"))
(assert_return (invoke "type-i64"))
(assert_return (invoke "type-f32"))
(assert_return (invoke "type-f64"))
(assert_return (invoke "type-i32-i32"))
(assert_return (invoke "type-i64-i64"))
(assert_return (invoke "type-f32-f32"))
(assert_return (invoke "type-f64-f64"))

(assert_return (invoke "type-i32-value") (i32.const 1))
(assert_return (invoke "type-i64-value") (i64.const 2))
(assert_return (invoke "type-f32-value") (f32.const 3))
(assert_return (invoke "type-f64-value") (f64.const 4))
(assert_return (invoke "type-f64-f64-value") (f64.const 4) (f64.const 5))

(assert_return (invoke "as-block-first"))
(assert_return (invoke "as-block-mid"))
(assert_return (invoke "as-block-last"))
Expand All @@ -231,6 +271,7 @@
(assert_return (invoke "as-br_if-value") (i32.const 8))
(assert_return (invoke "as-br_if-value-cond") (i32.const 9))
(assert_return (invoke "as-return-value") (i64.const 7))
(assert_return (invoke "as-return-values") (i32.const 2) (i64.const 7))

(assert_return (invoke "as-if-cond") (i32.const 2))
(assert_return (invoke "as-if-then" (i32.const 1) (i32.const 6)) (i32.const 3))
Expand Down
135 changes: 135 additions & 0 deletions tests/misc_testsuite/winch/if.wast
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,86 @@
(if (result i32) (local.get 0) (then (i32.const 7)) (else (i32.const 8)))
)

(func (export "multi") (param i32) (result i32 i32)
(if (local.get 0) (then (call $dummy) (call $dummy) (call $dummy)))
(if (local.get 0) (then) (else (call $dummy) (call $dummy) (call $dummy)))
(if (result i32) (local.get 0)
(then (call $dummy) (call $dummy) (i32.const 8) (call $dummy))
(else (call $dummy) (call $dummy) (i32.const 9) (call $dummy))
)

(if (result i32 i64 i32) (local.get 0)
(then
(call $dummy) (call $dummy) (i32.const 1) (call $dummy)
(call $dummy) (call $dummy) (i64.const 2) (call $dummy)
(call $dummy) (call $dummy) (i32.const 3) (call $dummy)
)
(else
(call $dummy) (call $dummy) (i32.const -1) (call $dummy)
(call $dummy) (call $dummy) (i64.const -2) (call $dummy)
(call $dummy) (call $dummy) (i32.const -3) (call $dummy)
)
)
(drop) (drop)
)

(func (export "break-multi-value") (param i32) (result i32 i32 i64)
(if (result i32 i32 i64) (local.get 0)
(then
(br 0 (i32.const 18) (i32.const -18) (i64.const 18))
(i32.const 19) (i32.const -19) (i64.const 19)
)
(else
(br 0 (i32.const -18) (i32.const 18) (i64.const -18))
(i32.const -19) (i32.const 19) (i64.const -19)
)
)
)

(func (export "param") (param i32) (result i32)
(i32.const 1)
(if (param i32) (result i32) (local.get 0)
(then (i32.const 2) (i32.add))
(else (i32.const -2) (i32.add))
)
)
(func (export "params") (param i32) (result i32)
(i32.const 1)
(i32.const 2)
(if (param i32 i32) (result i32) (local.get 0)
(then (i32.add))
(else (i32.sub))
)
)

(func (export "param-break") (param i32) (result i32)
(i32.const 1)
(if (param i32) (result i32) (local.get 0)
(then (i32.const 2) (i32.add) (br 0))
(else (i32.const -2) (i32.add) (br 0))
)
)
(func (export "params-break") (param i32) (result i32)
(i32.const 1)
(i32.const 2)
(if (param i32 i32) (result i32) (local.get 0)
(then (i32.add) (br 0))
(else (i32.sub) (br 0))
)
)
(func (export "params-id-break") (param i32) (result i32)
(i32.const 1)
(i32.const 2)
(if (param i32 i32) (result i32 i32) (local.get 0) (then (br 0)))
(i32.add)
)
(func (export "params-id") (param i32) (result i32)
(i32.const 1)
(i32.const 2)
(if (param i32 i32) (result i32 i32) (local.get 0) (then))
(i32.add)
)

(func (export "nested") (param i32 i32) (result i32)
(if (result i32) (local.get 0)
(then
Expand Down Expand Up @@ -239,6 +319,34 @@
(if (i32.const 0) (then (unreachable)) (else (br_table 0 (i32.const 0)) (unreachable)))
(i32.const 19)
)

(type $block-sig-1 (func))
(type $block-sig-2 (func (result i32)))
(type $block-sig-3 (func (param $x i32)))
(type $block-sig-4 (func (param i32 f64 i32) (result i32 f64 i32)))

(func (export "type-use")
(if (type $block-sig-1) (i32.const 1) (then))
(if (type $block-sig-2) (i32.const 1)
(then (i32.const 0)) (else (i32.const 2))
)
(if (type $block-sig-3) (i32.const 1) (then (drop)) (else (drop)))
(i32.const 0) (f64.const 0) (i32.const 0)
(if (type $block-sig-4) (i32.const 1) (then))
(drop) (drop) (drop)
(if (type $block-sig-2) (result i32) (i32.const 1)
(then (i32.const 0)) (else (i32.const 2))
)
(if (type $block-sig-3) (param i32) (i32.const 1)
(then (drop)) (else (drop))
)
(i32.const 0) (f64.const 0) (i32.const 0)
(if (type $block-sig-4)
(param i32) (param f64 i32) (result i32 f64) (result i32)
(i32.const 1) (then)
)
(drop) (drop) (drop)
)
)

(assert_return (invoke "empty" (i32.const 0)))
Expand All @@ -251,6 +359,11 @@
(assert_return (invoke "singular" (i32.const 10)) (i32.const 7))
(assert_return (invoke "singular" (i32.const -10)) (i32.const 7))

(assert_return (invoke "multi" (i32.const 0)) (i32.const 9) (i32.const -1))
(assert_return (invoke "multi" (i32.const 1)) (i32.const 8) (i32.const 1))
(assert_return (invoke "multi" (i32.const 13)) (i32.const 8) (i32.const 1))
(assert_return (invoke "multi" (i32.const -5)) (i32.const 8) (i32.const 1))

(assert_return (invoke "nested" (i32.const 0) (i32.const 0)) (i32.const 11))
(assert_return (invoke "nested" (i32.const 1) (i32.const 0)) (i32.const 10))
(assert_return (invoke "nested" (i32.const 0) (i32.const 1)) (i32.const 10))
Expand Down Expand Up @@ -302,6 +415,27 @@
(assert_return (invoke "break-value" (i32.const 1)) (i32.const 18))
(assert_return (invoke "break-value" (i32.const 0)) (i32.const 21))

(assert_return (invoke "break-multi-value" (i32.const 0))
(i32.const -18) (i32.const 18) (i64.const -18)
)
(assert_return (invoke "break-multi-value" (i32.const 1))
(i32.const 18) (i32.const -18) (i64.const 18)
)

(assert_return (invoke "param" (i32.const 0)) (i32.const -1))
(assert_return (invoke "param" (i32.const 1)) (i32.const 3))
(assert_return (invoke "params" (i32.const 0)) (i32.const -1))
(assert_return (invoke "params" (i32.const 1)) (i32.const 3))
(assert_return (invoke "params-id" (i32.const 0)) (i32.const 3))
(assert_return (invoke "params-id" (i32.const 1)) (i32.const 3))
(assert_return (invoke "param-break" (i32.const 0)) (i32.const -1))
(assert_return (invoke "param-break" (i32.const 1)) (i32.const 3))
(assert_return (invoke "params-break" (i32.const 0)) (i32.const -1))
(assert_return (invoke "params-break" (i32.const 1)) (i32.const 3))
(assert_return (invoke "params-id-break" (i32.const 0)) (i32.const 3))
(assert_return (invoke "params-id-break" (i32.const 1)) (i32.const 3))


(assert_return (invoke "effects" (i32.const 1)) (i32.const -14))
(assert_return (invoke "effects" (i32.const 0)) (i32.const -6))

Expand All @@ -314,3 +448,4 @@
(assert_return (invoke "as-br_table-last" (i32.const 1)) (i32.const 2))

(assert_return (invoke "break-bare") (i32.const 19))
(assert_return (invoke "type-use"))
Loading

0 comments on commit 3d6fef1

Please sign in to comment.