From 1840a7f32e1d6d1144c88bd7250a1b9f6637ff66 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Mon, 30 Sep 2019 14:30:39 -0700 Subject: [PATCH 1/4] Update LLVM implementation status --- proposals/simd/ImplementationStatus.md | 50 +++++++++++++------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/proposals/simd/ImplementationStatus.md b/proposals/simd/ImplementationStatus.md index eecc5292a..b1dccebbe 100644 --- a/proposals/simd/ImplementationStatus.md +++ b/proposals/simd/ImplementationStatus.md @@ -4,17 +4,17 @@ | `v128.store` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `v128.const` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | | `i8x16.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v8x16.load_splat` | | | :heavy_check_mark: | | +| `v8x16.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | | `i8x16.extract_lane_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `i8x16.extract_lane_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | | `i8x16.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `i16x8.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v16x8.load_splat` | | | :heavy_check_mark: | | +| `v16x8.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | | `i16x8.extract_lane_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `i16x8.extract_lane_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | | `i16x8.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `i32x4.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v32x4.load_splat` | | | :heavy_check_mark: | | +| `v32x4.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | | `i32x4.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `i32x4.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `i64x2.splat` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | @@ -24,7 +24,7 @@ | `f32x4.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `f32x4.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `f64x2.splat` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `v64x2.load_splat` | | | :heavy_check_mark: | | +| `v64x2.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | | `f64x2.extract_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | | `f64x2.replace_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | | `i8x16.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | @@ -71,7 +71,7 @@ | `f64x2.ge` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | | `v128.not` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `v128.and` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v128.andnot` | | | | | +| `v128.andnot` | `-munimplemented-simd128` | | | | | `v128.or` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `v128.xor` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | `v128.bitselect` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | @@ -144,25 +144,25 @@ | `f64x2.convert_i64x2_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | | `f64x2.convert_i64x2_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | | `v8x16.swizzle` | | | :heavy_check_mark: | | -| `v8x16.shuffle` | | | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.load8x8_s` | | | | | -| `i16x8.load8x8_u` | | | | | -| `i32x4.load16x4_s` | | | | | -| `i32x4.load16x4_u` | | | | | -| `i64x2.load32x2_s` | | | | | -| `i64x2.load32x2_u` | | | | | -| `i8x16.narrow_i16x8_s` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i8x16.narrow_i16x8_u` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.narrow_i32x4_s` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.narrow_i32x4_u` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_low_i8x16_s` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_high_i8x16_s` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_low_i8x16_u` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_high_i8x16_u` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_low_i16x8_s` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_high_i16x8_s` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_low_i16x8_u` | | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_high_i16x8_u` | | :heavy_check_mark: | :heavy_check_mark: | | +| `v8x16.shuffle` | `-msimd128`[5] | :white_check_mark:[5] | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.load8x8_s` | `-munimplemented-simd128` | | | | +| `i16x8.load8x8_u` | `-munimplemented-simd128` | | | | +| `i32x4.load16x4_s` | `-munimplemented-simd128` | | | | +| `i32x4.load16x4_u` | `-munimplemented-simd128` | | | | +| `i64x2.load32x2_s` | `-munimplemented-simd128` | | | | +| `i64x2.load32x2_u` | `-munimplemented-simd128` | | | | +| `i8x16.narrow_i16x8_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i8x16.narrow_i16x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.narrow_i32x4_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.narrow_i32x4_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_low_i8x16_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_high_i8x16_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_low_i8x16_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_high_i8x16_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_low_i16x8_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_high_i16x8_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_low_i16x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_high_i16x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | [1] Tip of tree LLVM as of April 24, 2019 @@ -171,3 +171,5 @@ [3] Tip of tree WAVM as of July 10, 2019. Requires flag `--enable prestd-simd` [4] Requires (case-insensitive) flag `-wasmsimd` + +[5] Uses older `v8x16.shuffle` opcode `0xfd 0x03` From 1b088e4c2baebad5ec7edd2f6f1911ed90f26d67 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Mon, 30 Sep 2019 14:46:36 -0700 Subject: [PATCH 2/4] Update date --- proposals/simd/ImplementationStatus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proposals/simd/ImplementationStatus.md b/proposals/simd/ImplementationStatus.md index b1dccebbe..27c83b391 100644 --- a/proposals/simd/ImplementationStatus.md +++ b/proposals/simd/ImplementationStatus.md @@ -164,7 +164,7 @@ | `i32x4.widen_low_i16x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | | `i32x4.widen_high_i16x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -[1] Tip of tree LLVM as of April 24, 2019 +[1] Tip of tree LLVM as of September 30, 2019 [2] Tested on V8 7.5.0 (candidate). Requires flag `--experimental-wasm-simd` From a849c799f0ddb6ca9f16715797b31e0f61c62fa2 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Mon, 30 Sep 2019 14:49:31 -0700 Subject: [PATCH 3/4] Update widen and narrow ops --- proposals/simd/ImplementationStatus.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/proposals/simd/ImplementationStatus.md b/proposals/simd/ImplementationStatus.md index 27c83b391..015b38b97 100644 --- a/proposals/simd/ImplementationStatus.md +++ b/proposals/simd/ImplementationStatus.md @@ -151,18 +151,18 @@ | `i32x4.load16x4_u` | `-munimplemented-simd128` | | | | | `i64x2.load32x2_s` | `-munimplemented-simd128` | | | | | `i64x2.load32x2_u` | `-munimplemented-simd128` | | | | -| `i8x16.narrow_i16x8_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i8x16.narrow_i16x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.narrow_i32x4_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.narrow_i32x4_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_low_i8x16_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_high_i8x16_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_low_i8x16_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_high_i8x16_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_low_i16x8_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_high_i16x8_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_low_i16x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_high_i16x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i8x16.narrow_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i8x16.narrow_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.narrow_i32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.narrow_i32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_low_i8x16_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_high_i8x16_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_low_i8x16_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_high_i8x16_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_low_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_high_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_low_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_high_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | [1] Tip of tree LLVM as of September 30, 2019 From f31c07b7e5bc4f03e53e2aa6b4bdc6360c524ece Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Tue, 1 Oct 2019 10:53:11 -0700 Subject: [PATCH 4/4] Realign table --- proposals/simd/ImplementationStatus.md | 328 ++++++++++++------------- 1 file changed, 164 insertions(+), 164 deletions(-) diff --git a/proposals/simd/ImplementationStatus.md b/proposals/simd/ImplementationStatus.md index 015b38b97..ed358e57b 100644 --- a/proposals/simd/ImplementationStatus.md +++ b/proposals/simd/ImplementationStatus.md @@ -1,168 +1,168 @@ -| Instruction | LLVM[1] | V8[2] | WAVM[3] | ChakraCore[4] | -| ---------------------------|---------------------------|--------------------|--------------------|--------------------| -| `v128.load` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v128.store` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v128.const` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v8x16.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | -| `i8x16.extract_lane_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.extract_lane_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v16x8.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | -| `i16x8.extract_lane_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.extract_lane_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v32x4.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | -| `i32x4.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.splat` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.extract_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.replace_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.splat` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `v64x2.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | -| `f64x2.extract_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.replace_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.ne` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.lt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.lt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.gt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.gt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.le_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.le_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.ge_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.ge_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.ne` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.lt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.lt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.gt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.gt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.le_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.le_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.ge_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.ge_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.ne` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.lt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.lt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.gt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.gt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.le_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.le_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.ge_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.ge_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.ne` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.lt` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.gt` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.le` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.ge` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.eq` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.ne` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.lt` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.gt` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.le` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.ge` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `v128.not` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v128.and` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v128.andnot` | `-munimplemented-simd128` | | | | -| `v128.or` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v128.xor` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `v128.bitselect` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.any_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.all_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.shl` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.shr_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.shr_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.add_saturate_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.add_saturate_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.sub_saturate_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i8x16.sub_saturate_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.any_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.all_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.shl` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.shr_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.shr_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.add_saturate_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.add_saturate_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.sub_saturate_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.sub_saturate_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.mul` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.any_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.all_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.shl` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.shr_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.shr_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.mul` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.neg` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.any_true` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.all_true` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.shl` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.shr_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.shr_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.add` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.sub` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.abs` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.sqrt` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.mul` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.div` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.min` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.max` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.abs` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.neg` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.sqrt` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.add` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.sub` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.mul` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.div` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.min` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.max` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.trunc_sat_f32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i32x4.trunc_sat_f32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.trunc_sat_f64x2_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `i64x2.trunc_sat_f64x2_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.convert_i32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f32x4.convert_i32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.convert_i64x2_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `f64x2.convert_i64x2_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | -| `v8x16.swizzle` | | | :heavy_check_mark: | | +| Instruction | LLVM[1] | V8[2] | WAVM[3] | ChakraCore[4] | +| ---------------------------|---------------------------|-----------------------|--------------------|--------------------| +| `v128.load` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v128.store` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v128.const` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v8x16.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | +| `i8x16.extract_lane_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.extract_lane_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v16x8.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | +| `i16x8.extract_lane_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.extract_lane_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v32x4.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | +| `i32x4.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.splat` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.extract_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.replace_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.splat` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `v64x2.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | | +| `f64x2.extract_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.replace_lane` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.ne` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.lt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.lt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.gt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.gt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.le_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.le_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.ge_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.ge_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.ne` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.lt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.lt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.gt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.gt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.le_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.le_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.ge_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.ge_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.ne` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.lt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.lt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.gt_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.gt_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.le_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.le_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.ge_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.ge_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.ne` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.lt` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.gt` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.le` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.ge` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.eq` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.ne` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.lt` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.gt` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.le` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.ge` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `v128.not` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v128.and` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v128.andnot` | `-munimplemented-simd128` | | | | +| `v128.or` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v128.xor` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `v128.bitselect` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.any_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.all_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.shl` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.shr_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.shr_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.add_saturate_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.add_saturate_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.sub_saturate_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i8x16.sub_saturate_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.any_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.all_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.shl` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.shr_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.shr_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.add_saturate_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.add_saturate_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.sub_saturate_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.sub_saturate_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i16x8.mul` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.any_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.all_true` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.shl` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.shr_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.shr_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.mul` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.neg` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.any_true` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.all_true` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.shl` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.shr_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.shr_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.add` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.sub` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.abs` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.sqrt` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.mul` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.div` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.min` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.max` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.abs` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.neg` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.sqrt` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.add` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.sub` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.mul` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.div` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.min` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.max` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.trunc_sat_f32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i32x4.trunc_sat_f32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.trunc_sat_f64x2_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `i64x2.trunc_sat_f64x2_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.convert_i32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f32x4.convert_i32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.convert_i64x2_s` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `f64x2.convert_i64x2_u` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: | +| `v8x16.swizzle` | | | :heavy_check_mark: | | | `v8x16.shuffle` | `-msimd128`[5] | :white_check_mark:[5] | :heavy_check_mark: | :heavy_check_mark: | -| `i16x8.load8x8_s` | `-munimplemented-simd128` | | | | -| `i16x8.load8x8_u` | `-munimplemented-simd128` | | | | -| `i32x4.load16x4_s` | `-munimplemented-simd128` | | | | -| `i32x4.load16x4_u` | `-munimplemented-simd128` | | | | -| `i64x2.load32x2_s` | `-munimplemented-simd128` | | | | -| `i64x2.load32x2_u` | `-munimplemented-simd128` | | | | -| `i8x16.narrow_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i8x16.narrow_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.narrow_i32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.narrow_i32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_low_i8x16_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_high_i8x16_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_low_i8x16_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i16x8.widen_high_i8x16_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_low_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_high_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_low_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | -| `i32x4.widen_high_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.load8x8_s` | `-munimplemented-simd128` | | | | +| `i16x8.load8x8_u` | `-munimplemented-simd128` | | | | +| `i32x4.load16x4_s` | `-munimplemented-simd128` | | | | +| `i32x4.load16x4_u` | `-munimplemented-simd128` | | | | +| `i64x2.load32x2_s` | `-munimplemented-simd128` | | | | +| `i64x2.load32x2_u` | `-munimplemented-simd128` | | | | +| `i8x16.narrow_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i8x16.narrow_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.narrow_i32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.narrow_i32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_low_i8x16_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_high_i8x16_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_low_i8x16_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i16x8.widen_high_i8x16_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_low_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_high_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_low_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | +| `i32x4.widen_high_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | | [1] Tip of tree LLVM as of September 30, 2019