Skip to content

Commit

Permalink
fix(simd): update wabt.js and remove/unskip simd tests (#95)
Browse files Browse the repository at this point in the history
Update wabt.js, which suppors new opcodes, so we can unskip some tests.

Remove 2 outdated tests simd_boolean.{0,1}.wasm, which used old opcodes
that are now undefined.
  • Loading branch information
ngzhian authored Mar 25, 2021
1 parent 79f52c3 commit ce582b7
Show file tree
Hide file tree
Showing 7 changed files with 233 additions and 16 deletions.
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
"semantic-release": "^17.0.8",
"ts-jest": "^26.1.0",
"typescript": "^3.9.5",
"wabt": "1.0.19-nightly.20201024"
"wabt": "1.0.23"
},
"dependencies": {
"@types/node": "^14.0.13"
Expand Down
Binary file removed test/__fixtures__/simd_boolean.0.wasm
Binary file not shown.
Binary file removed test/__fixtures__/simd_boolean.1.wasm
Binary file not shown.
229 changes: 229 additions & 0 deletions test/__snapshots__/parse-and-disassemble.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -36233,6 +36233,235 @@ exports[`Parsing and disassembling simd_const.491.wasm generates expected output
"
`;

exports[`Parsing and disassembling simd_conversions.0.wasm generates expected output 1`] = `
"(module
(export \\"i32x4.trunc_sat_f32x4_s\\" (func $func0))
(export \\"i32x4.trunc_sat_f32x4_u\\" (func $func1))
(export \\"f32x4.convert_i32x4_s\\" (func $func2))
(export \\"f32x4.convert_i32x4_u\\" (func $func3))
(export \\"i8x16.narrow_i16x8_s\\" (func $func4))
(export \\"i8x16.narrow_i16x8_u\\" (func $func5))
(export \\"i16x8.narrow_i32x4_s\\" (func $func6))
(export \\"i16x8.narrow_i32x4_u\\" (func $func7))
(export \\"i16x8.widen_high_i8x16_s\\" (func $func8))
(export \\"i16x8.widen_high_i8x16_u\\" (func $func9))
(export \\"i16x8.widen_low_i8x16_s\\" (func $func10))
(export \\"i16x8.widen_low_i8x16_u\\" (func $func11))
(export \\"i32x4.widen_high_i16x8_s\\" (func $func12))
(export \\"i32x4.widen_high_i16x8_u\\" (func $func13))
(export \\"i32x4.widen_low_i16x8_s\\" (func $func14))
(export \\"i32x4.widen_low_i16x8_u\\" (func $func15))
(func $func0 (param $var0 v128) (result v128)
local.get $var0
i32x4.trunc_sat_f32x4_s
)
(func $func1 (param $var0 v128) (result v128)
local.get $var0
i32x4.trunc_sat_f32x4_u
)
(func $func2 (param $var0 v128) (result v128)
local.get $var0
f32x4.convert_i32x4_s
)
(func $func3 (param $var0 v128) (result v128)
local.get $var0
f32x4.convert_i32x4_u
)
(func $func4 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_s
)
(func $func5 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_u
)
(func $func6 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_s
)
(func $func7 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_u
)
(func $func8 (param $var0 v128) (result v128)
local.get $var0
i16x8.extend_high_i8x16_s
)
(func $func9 (param $var0 v128) (result v128)
local.get $var0
i16x8.extend_high_i8x16_u
)
(func $func10 (param $var0 v128) (result v128)
local.get $var0
i16x8.extend_low_i8x16_s
)
(func $func11 (param $var0 v128) (result v128)
local.get $var0
i16x8.extend_low_i8x16_u
)
(func $func12 (param $var0 v128) (result v128)
local.get $var0
i32x4.extend_high_i16x8_s
)
(func $func13 (param $var0 v128) (result v128)
local.get $var0
i32x4.extend_high_i16x8_u
)
(func $func14 (param $var0 v128) (result v128)
local.get $var0
i32x4.extend_low_i16x8_s
)
(func $func15 (param $var0 v128) (result v128)
local.get $var0
i32x4.extend_low_i16x8_u
)
)
"
`;

exports[`Parsing and disassembling simd_conversions.51.wasm generates expected output 1`] = `
"(module
(export \\"f32x4_convert_i32x4_s_add\\" (func $func0))
(export \\"f32x4_convert_i32x4_s_sub\\" (func $func1))
(export \\"f32x4_convert_i32x4_u_mul\\" (func $func2))
(export \\"i16x8_low_widen_narrow_ss\\" (func $func3))
(export \\"i16x8_low_widen_narrow_su\\" (func $func4))
(export \\"i16x8_high_widen_narrow_ss\\" (func $func5))
(export \\"i16x8_high_widen_narrow_su\\" (func $func6))
(export \\"i16x8_low_widen_narrow_uu\\" (func $func7))
(export \\"i16x8_low_widen_narrow_us\\" (func $func8))
(export \\"i16x8_high_widen_narrow_uu\\" (func $func9))
(export \\"i16x8_high_widen_narrow_us\\" (func $func10))
(export \\"i32x4_low_widen_narrow_ss\\" (func $func11))
(export \\"i32x4_low_widen_narrow_su\\" (func $func12))
(export \\"i32x4_high_widen_narrow_ss\\" (func $func13))
(export \\"i32x4_high_widen_narrow_su\\" (func $func14))
(export \\"i32x4_low_widen_narrow_uu\\" (func $func15))
(export \\"i32x4_low_widen_narrow_us\\" (func $func16))
(export \\"i32x4_high_widen_narrow_uu\\" (func $func17))
(export \\"i32x4_high_widen_narrow_us\\" (func $func18))
(func $func0 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i32x4.add
f32x4.convert_i32x4_s
)
(func $func1 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i32x4.sub
f32x4.convert_i32x4_s
)
(func $func2 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i32x4.mul
f32x4.convert_i32x4_u
)
(func $func3 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_s
i16x8.extend_low_i8x16_s
)
(func $func4 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_u
i16x8.extend_low_i8x16_s
)
(func $func5 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_s
i16x8.extend_low_i8x16_s
)
(func $func6 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_u
i16x8.extend_low_i8x16_s
)
(func $func7 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_u
i16x8.extend_low_i8x16_u
)
(func $func8 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_s
i16x8.extend_low_i8x16_u
)
(func $func9 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_u
i16x8.extend_low_i8x16_u
)
(func $func10 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i8x16.narrow_i16x8_s
i16x8.extend_low_i8x16_u
)
(func $func11 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_s
i32x4.extend_low_i16x8_s
)
(func $func12 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_u
i32x4.extend_low_i16x8_s
)
(func $func13 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_s
i32x4.extend_low_i16x8_s
)
(func $func14 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_u
i32x4.extend_low_i16x8_s
)
(func $func15 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_u
i32x4.extend_low_i16x8_u
)
(func $func16 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_s
i32x4.extend_low_i16x8_u
)
(func $func17 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_u
i32x4.extend_low_i16x8_u
)
(func $func18 (param $var0 v128) (param $var1 v128) (result v128)
local.get $var0
local.get $var1
i16x8.narrow_i32x4_s
i32x4.extend_low_i16x8_u
)
)
"
`;

exports[`Parsing and disassembling simd_f32x4.0.wasm generates expected output 1`] = `
"(module
(export \\"f32x4.min\\" (func $func0))
Expand Down
10 changes: 0 additions & 10 deletions test/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,11 @@ import { extname, join } from "path";

const FIXTURES_DIR = join(__dirname, "__fixtures__");

const broken = [
// Wabt opcodes for v128.any_true needs to be updated.
"simd_boolean.0.wasm",
"simd_boolean.1.wasm",
// Wabt does not know the new names for integer extends yet.
"simd_conversions.0.wasm",
"simd_conversions.51.wasm",
];

/**
* @return list of pairs of Wasm fixture file name and path.
*/
export function getWasmFixtures(): string[][] {
return readdirSync(FIXTURES_DIR)
.filter((fileName) => extname(fileName) === ".wasm")
.filter((fileName) => !broken.includes(fileName))
.map((fileName) => [fileName, join(FIXTURES_DIR, fileName)]);
}
2 changes: 0 additions & 2 deletions test/wabt-compatibility.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ const WABT_FEATURES = {
describe("Disassembling", () => {
describe.each(getWasmFixtures())("%s", (fileName, filePath) => {
test("generates wabt compatible text", async () => {
// TODO(bmeurer): wabt still chokes on the i8x16.shuffle syntax
if (fileName === "simd.wasm") return;
const { parseWat } = await wabtPromise;
const data = new Uint8Array(readFileSync(filePath));
const dis = new WasmDisassembler();
Expand Down

0 comments on commit ce582b7

Please sign in to comment.