Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update wasmparser and pick up new SIMD instructions #185

Merged
merged 3 commits into from Oct 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Expand Up @@ -20,7 +20,7 @@ jobs:
- uses: actions/checkout@v2
with:
repository: WebAssembly/wabt
ref: 7c88424c98f157d375458fe6b2cd392959d7d217
ref: 8e42376ccd5f05dc1036f91b4262e67b0fc66c2d
path: wabt
- name: Build wabt
run: |
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Expand Up @@ -29,7 +29,7 @@ leb128 = "0.2.4"
log = "0.4.8"
rayon = { version = "1.1.0", optional = true }
walrus-macro = { path = './crates/macro', version = '=0.18.0' }
wasmparser = "0.62.0"
wasmparser = "0.65.0"

[features]
parallel = ['rayon', 'id-arena/rayon']
Expand Down
80 changes: 40 additions & 40 deletions crates/tests/tests/round_trip/simd.wat
Expand Up @@ -289,26 +289,26 @@
local.get 0
local.get 1
i8x16.add)
(func $i8x16.add_saturate_u (export "i8x16.add_saturate_u") (param v128 v128) (result v128)
(func $i8x16.add_sat_u (export "i8x16.add_sat_u") (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.add_saturate_u)
(func $i8x16.add_saturate_s (export "i8x16.add_saturate_s") (param v128 v128) (result v128)
i8x16.add_sat_u)
(func $i8x16.add_sat_s (export "i8x16.add_sat_s") (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.add_saturate_s)
i8x16.add_sat_s)
(func $i8x16.sub (export "i8x16.sub") (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.sub)
(func $i8x16.sub_saturate_u (export "i8x16.sub_saturate_u") (param v128 v128) (result v128)
(func $i8x16.sub_sat_u (export "i8x16.sub_sat_u") (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.sub_saturate_u)
(func $i8x16.sub_saturate_s (export "i8x16.sub_saturate_s") (param v128 v128) (result v128)
i8x16.sub_sat_u)
(func $i8x16.sub_sat_s (export "i8x16.sub_sat_s") (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.sub_saturate_s)
i8x16.sub_sat_s)

(func $i16x8.neg (export "i16x8.neg") (param v128) (result v128)
local.get 0
Expand All @@ -335,26 +335,26 @@
local.get 0
local.get 1
i16x8.add)
(func $i16x8.add_saturate_u (export "i16x8.add_saturate_u") (param v128 v128) (result v128)
(func $i16x8.add_sat_u (export "i16x8.add_sat_u") (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.add_saturate_u)
(func $i16x8.add_saturate_s (export "i16x8.add_saturate_s") (param v128 v128) (result v128)
i16x8.add_sat_u)
(func $i16x8.add_sat_s (export "i16x8.add_sat_s") (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.add_saturate_s)
i16x8.add_sat_s)
(func $i16x8.sub (export "i16x8.sub") (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.sub)
(func $i16x8.sub_saturate_u (export "i16x8.sub_saturate_u") (param v128 v128) (result v128)
(func $i16x8.sub_sat_u (export "i16x8.sub_sat_u") (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.sub_saturate_u)
(func $i16x8.sub_saturate_s (export "i16x8.sub_saturate_s") (param v128 v128) (result v128)
i16x8.sub_sat_u)
(func $i16x8.sub_sat_s (export "i16x8.sub_sat_s") (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.sub_saturate_s)
i16x8.sub_sat_s)
(func $i16x8.mul (export "i16x8.mul") (param v128 v128) (result v128)
local.get 0
local.get 1
Expand Down Expand Up @@ -729,26 +729,26 @@
local.get 0
local.get 1
i8x16.add)
(func $i8x16.add_saturate_u (type 15) (param v128 v128) (result v128)
(func $i8x16.add_sat_u (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.add_saturate_u)
(func $i8x16.add_saturate_s (type 15) (param v128 v128) (result v128)
i8x16.add_sat_u)
(func $i8x16.add_sat_s (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.add_saturate_s)
i8x16.add_sat_s)
(func $i8x16.sub (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.sub)
(func $i8x16.sub_saturate_u (type 15) (param v128 v128) (result v128)
(func $i8x16.sub_sat_u (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.sub_saturate_u)
(func $i8x16.sub_saturate_s (type 15) (param v128 v128) (result v128)
i8x16.sub_sat_u)
(func $i8x16.sub_sat_s (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i8x16.sub_saturate_s)
i8x16.sub_sat_s)
(func $i16x8.shl (type 11) (param v128 i32) (result v128)
local.get 0
local.get 1
Expand All @@ -765,26 +765,26 @@
local.get 0
local.get 1
i16x8.add)
(func $i16x8.add_saturate_u (type 15) (param v128 v128) (result v128)
(func $i16x8.add_sat_u (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.add_saturate_u)
(func $i16x8.add_saturate_s (type 15) (param v128 v128) (result v128)
i16x8.add_sat_u)
(func $i16x8.add_sat_s (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.add_saturate_s)
i16x8.add_sat_s)
(func $i16x8.sub (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.sub)
(func $i16x8.sub_saturate_u (type 15) (param v128 v128) (result v128)
(func $i16x8.sub_sat_u (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.sub_saturate_u)
(func $i16x8.sub_saturate_s (type 15) (param v128 v128) (result v128)
i16x8.sub_sat_u)
(func $i16x8.sub_sat_s (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
i16x8.sub_saturate_s)
i16x8.sub_sat_s)
(func $i16x8.mul (type 15) (param v128 v128) (result v128)
local.get 0
local.get 1
Expand Down Expand Up @@ -1064,23 +1064,23 @@
(export "i8x16.shr_s" (func $i8x16.shr_s))
(export "i8x16.shr_u" (func $i8x16.shr_u))
(export "i8x16.add" (func $i8x16.add))
(export "i8x16.add_saturate_u" (func $i8x16.add_saturate_u))
(export "i8x16.add_saturate_s" (func $i8x16.add_saturate_s))
(export "i8x16.add_sat_u" (func $i8x16.add_sat_u))
(export "i8x16.add_sat_s" (func $i8x16.add_sat_s))
(export "i8x16.sub" (func $i8x16.sub))
(export "i8x16.sub_saturate_u" (func $i8x16.sub_saturate_u))
(export "i8x16.sub_saturate_s" (func $i8x16.sub_saturate_s))
(export "i8x16.sub_sat_u" (func $i8x16.sub_sat_u))
(export "i8x16.sub_sat_s" (func $i8x16.sub_sat_s))
(export "i16x8.neg" (func $i16x8.neg))
(export "i16x8.any_true" (func $i16x8.any_true))
(export "i16x8.all_true" (func $i16x8.all_true))
(export "i16x8.shl" (func $i16x8.shl))
(export "i16x8.shr_s" (func $i16x8.shr_s))
(export "i16x8.shr_u" (func $i16x8.shr_u))
(export "i16x8.add" (func $i16x8.add))
(export "i16x8.add_saturate_u" (func $i16x8.add_saturate_u))
(export "i16x8.add_saturate_s" (func $i16x8.add_saturate_s))
(export "i16x8.add_sat_u" (func $i16x8.add_sat_u))
(export "i16x8.add_sat_s" (func $i16x8.add_sat_s))
(export "i16x8.sub" (func $i16x8.sub))
(export "i16x8.sub_saturate_u" (func $i16x8.sub_saturate_u))
(export "i16x8.sub_saturate_s" (func $i16x8.sub_saturate_s))
(export "i16x8.sub_sat_u" (func $i16x8.sub_sat_u))
(export "i16x8.sub_sat_s" (func $i16x8.sub_sat_s))
(export "i16x8.mul" (func $i16x8.mul))
(export "i32x4.neg" (func $i32x4.neg))
(export "i32x4.any_true" (func $i32x4.any_true))
Expand Down
2 changes: 1 addition & 1 deletion crates/tests/tests/spec-tests
Submodule spec-tests updated 55 files
+38 −0 binary-leb128.wast
+140 −0 binary.wast
+4 −0 conversions.wast
+40 −0 func.wast
+139 −245 proposals/bulk-memory-operations/binary.wast
+4 −4 proposals/function-references/br_on_null.wast
+1 −1 proposals/function-references/br_table.wast
+1 −1 proposals/function-references/call_ref.wast
+9 −9 proposals/function-references/func_bind.wast
+2 −2 proposals/function-references/linking.wast
+3 −5 proposals/function-references/ref.wast
+2 −2 proposals/function-references/ref_as_non_null.wast
+2 −2 proposals/function-references/ref_is_null.wast
+2 −2 proposals/function-references/ref_null.wast
+1 −1 proposals/function-references/return_call_ref.wast
+589 −0 proposals/memory64/address64.wast
+866 −0 proposals/memory64/align64.wast
+179 −0 proposals/memory64/bulk64.wast
+217 −0 proposals/memory64/endianness64.wast
+157 −0 proposals/memory64/float_memory64.wast
+567 −0 proposals/memory64/load64.wast
+188 −0 proposals/memory64/memory64.wast
+95 −0 proposals/memory64/memory_grow64.wast
+65 −0 proposals/memory64/memory_redundancy64.wast
+269 −0 proposals/memory64/memory_trap64.wast
+0 −811 proposals/multi-value/binary.wast
+0 −1,491 proposals/multi-value/block.wast
+0 −657 proposals/multi-value/br.wast
+0 −518 proposals/multi-value/call.wast
+0 −971 proposals/multi-value/call_indirect.wast
+0 −109 proposals/multi-value/fac.wast
+0 −899 proposals/multi-value/func.wast
+0 −1,550 proposals/multi-value/if.wast
+0 −785 proposals/multi-value/loop.wast
+0 −50 proposals/multi-value/type.wast
+0 −164 proposals/mutable-global/globals.wast
+0 −354 proposals/mutable-global/linking.wast
+0 −698 proposals/nontrapping-float-to-int-conversions/conversions.wast
+6 −0 proposals/reference-types/global.wast
+0 −976 proposals/sign-extension-ops/i32.wast
+0 −485 proposals/sign-extension-ops/i64.wast
+85 −85 proposals/simd/simd_align.wast
+16 −0 proposals/simd/simd_boolean.wast
+11,676 −0 proposals/simd/simd_f32x4_pmin_pmax.wast
+424 −0 proposals/simd/simd_f32x4_rounding.wast
+11,676 −0 proposals/simd/simd_f64x2_pmin_pmax.wast
+424 −0 proposals/simd/simd_f64x2_rounding.wast
+628 −628 proposals/simd/simd_i16x8_sat_arith.wast
+588 −588 proposals/simd/simd_i8x16_sat_arith.wast
+131 −141 proposals/simd/simd_lane.wast
+3 −3 proposals/simd/simd_load.wast
+234 −234 proposals/simd/simd_load_extend.wast
+104 −104 proposals/simd/simd_load_splat.wast
+13 −13 proposals/simd/simd_splat.wast
+1 −3 update-testsuite.sh
6 changes: 2 additions & 4 deletions crates/tests/tests/spec-tests.rs
Expand Up @@ -33,10 +33,7 @@ fn run(wast: &Path) -> Result<(), anyhow::Error> {
Some("simd") => &["--enable-simd"],
Some("bulk-memory-operations") => &["--enable-bulk-memory"],

// Some("reference-types") => &["--enable-reference-types", "--enable-bulk-memory"],
// TODO: waiting for wabt to update its implementation of reference
// types.
Some("reference-types") => return Ok(()),
Some("reference-types") => &["--enable-reference-types", "--enable-bulk-memory"],

// TODO: should get threads working
Some("threads") => return Ok(()),
Expand All @@ -49,6 +46,7 @@ fn run(wast: &Path) -> Result<(), anyhow::Error> {
// not implemented in walrus yet
Some("function-references") => return Ok(()),
Some("exception-handling") => return Ok(()),
Some("memory64") => return Ok(()),

// Some("threads") => &["--enable-threads"],
Some(other) => panic!("unknown wasm proposal: {}", other),
Expand Down
57 changes: 37 additions & 20 deletions src/ir/mod.rs
Expand Up @@ -539,11 +539,11 @@ pub enum Instr {
/// `v128.bitselect`
V128Bitselect {},

/// `v128.swizzle`
V128Swizzle {},
/// `i8x16.swizzle`
I8x16Swizzle {},

/// `v128.shuffle`
V128Shuffle {
/// `i8x16.shuffle`
I8x16Shuffle {
/// The indices that are used to create the final vector of this
/// instruction
#[walrus(skip_visit)]
Expand Down Expand Up @@ -795,20 +795,20 @@ pub enum BinaryOp {
I8x16ShrS,
I8x16ShrU,
I8x16Add,
I8x16AddSaturateS,
I8x16AddSaturateU,
I8x16AddSatS,
I8x16AddSatU,
I8x16Sub,
I8x16SubSaturateS,
I8x16SubSaturateU,
I8x16SubSatS,
I8x16SubSatU,
I16x8Shl,
I16x8ShrS,
I16x8ShrU,
I16x8Add,
I16x8AddSaturateS,
I16x8AddSaturateU,
I16x8AddSatS,
I16x8AddSatU,
I16x8Sub,
I16x8SubSaturateS,
I16x8SubSaturateU,
I16x8SubSatS,
I16x8SubSatU,
I16x8Mul,
I32x4Shl,
I32x4ShrS,
Expand All @@ -829,12 +829,16 @@ pub enum BinaryOp {
F32x4Div,
F32x4Min,
F32x4Max,
F32x4PMin,
F32x4PMax,
F64x2Add,
F64x2Sub,
F64x2Mul,
F64x2Div,
F64x2Min,
F64x2Max,
F64x2PMin,
F64x2PMax,

I8x16NarrowI16x8S,
I8x16NarrowI16x8U,
Expand All @@ -855,6 +859,8 @@ pub enum BinaryOp {
I32x4MinU,
I32x4MaxS,
I32x4MaxU,

I32x4DotI16x8S,
}

/// Possible unary operations in wasm
Expand Down Expand Up @@ -958,9 +964,17 @@ pub enum UnaryOp {
F32x4Abs,
F32x4Neg,
F32x4Sqrt,
F32x4Ceil,
F32x4Floor,
F32x4Trunc,
F32x4Nearest,
F64x2Abs,
F64x2Neg,
F64x2Sqrt,
F64x2Ceil,
F64x2Floor,
F64x2Trunc,
F64x2Nearest,

I32x4TruncSatF32x4S,
I32x4TruncSatF32x4U,
Expand Down Expand Up @@ -1014,12 +1028,15 @@ pub enum LoadSimdKind {
Splat16,
Splat32,
Splat64,
I16x8Load8x8S,
I16x8Load8x8U,
I32x4Load16x4S,
I32x4Load16x4U,
I64x2Load32x2S,
I64x2Load32x2U,

V128Load8x8S,
V128Load8x8U,
V128Load16x4S,
V128Load16x4U,
V128Load32x2S,
V128Load32x2U,
V128Load32Zero,
V128Load64Zero,
}

/// The kinds of extended loads which can happen
Expand Down Expand Up @@ -1212,8 +1229,8 @@ impl Instr {
| Instr::RefIsNull(..)
| Instr::RefFunc(..)
| Instr::V128Bitselect(..)
| Instr::V128Swizzle(..)
| Instr::V128Shuffle(..)
| Instr::I8x16Swizzle(..)
| Instr::I8x16Shuffle(..)
| Instr::LoadSimd(..)
| Instr::AtomicFence(..)
| Instr::TableInit(..)
Expand Down