Skip to content

Commit

Permalink
Merge pull request #185 from alexcrichton/update-wasmparser
Browse files Browse the repository at this point in the history
Update wasmparser and pick up new SIMD instructions
  • Loading branch information
fitzgen committed Oct 28, 2020
2 parents 7c9671f + f651d1d commit 132bdd6
Show file tree
Hide file tree
Showing 11 changed files with 152 additions and 378 deletions.
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

0 comments on commit 132bdd6

Please sign in to comment.