Skip to content
This repository was archived by the owner on Dec 22, 2021. It is now read-only.

Commit c9976b5

Browse files
authored
Update ImplementationStatus to reflect status quo (#223)
Updates based on latest LLVM & latest v8 (earlier v8 versions aren't useful because of renumbering anyway): - v8 implements load_splat and load with zero/sign extension - v8 implements i64x2_mul - v8 implements swizzle and andnot - LLVM supports integer abs instructions and intrinsics - Removing note about shuffle opcode - irrelevant post-renumbering Notable remaining omissions: - v8 doesn't implement v128.const - LLVM doesn't implement (or at least doesn't expose an intrinsic for) i64x2_mul - A lot of instructions are still part of unimplemented subset in LLVM
1 parent dad9d0d commit c9976b5

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

proposals/simd/ImplementationStatus.md

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
| `v128.store` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
55
| `v128.const` | `-munimplemented-simd128` | | :heavy_check_mark: | :heavy_check_mark: |
66
| `i8x16.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
7-
| `v8x16.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | |
7+
| `v8x16.load_splat` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
88
| `i8x16.extract_lane_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
99
| `i8x16.extract_lane_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
1010
| `i8x16.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
1111
| `i16x8.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
12-
| `v16x8.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | |
12+
| `v16x8.load_splat` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
1313
| `i16x8.extract_lane_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
1414
| `i16x8.extract_lane_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
1515
| `i16x8.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
1616
| `i32x4.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
17-
| `v32x4.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | |
17+
| `v32x4.load_splat` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
1818
| `i32x4.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
1919
| `i32x4.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
2020
| `i64x2.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
@@ -24,7 +24,7 @@
2424
| `f32x4.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
2525
| `f32x4.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
2626
| `f64x2.splat` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
27-
| `v64x2.load_splat` | `-munimplemented-simd128` | | :heavy_check_mark: | |
27+
| `v64x2.load_splat` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
2828
| `f64x2.extract_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
2929
| `f64x2.replace_lane` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
3030
| `i8x16.eq` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
@@ -71,7 +71,7 @@
7171
| `f64x2.ge` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
7272
| `v128.not` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
7373
| `v128.and` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
74-
| `v128.andnot` | `-munimplemented-simd128` | | :heavy_check_mark: | |
74+
| `v128.andnot` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
7575
| `v128.or` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
7676
| `v128.xor` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
7777
| `v128.bitselect` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
@@ -132,7 +132,7 @@
132132
| `i64x2.shr_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
133133
| `i64x2.add` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
134134
| `i64x2.sub` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
135-
| `i64x2.mul` | | | :heavy_check_mark: | |
135+
| `i64x2.mul` | | :heavy_check_mark: | :heavy_check_mark: | |
136136
| `f32x4.abs` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
137137
| `f32x4.neg` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
138138
| `f32x4.sqrt` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
@@ -155,14 +155,14 @@
155155
| `i32x4.trunc_sat_f32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
156156
| `f32x4.convert_i32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
157157
| `f32x4.convert_i32x4_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
158-
| `v8x16.swizzle` | `-munimplemented-simd128` | | :heavy_check_mark: | |
159-
| `v8x16.shuffle` | `-msimd128`[5] | :white_check_mark:[5] | :heavy_check_mark: | :heavy_check_mark: |
160-
| `i16x8.load8x8_s` | `-munimplemented-simd128` | | :heavy_check_mark: | |
161-
| `i16x8.load8x8_u` | `-munimplemented-simd128` | | :heavy_check_mark: | |
162-
| `i32x4.load16x4_s` | `-munimplemented-simd128` | | :heavy_check_mark: | |
163-
| `i32x4.load16x4_u` | `-munimplemented-simd128` | | :heavy_check_mark: | |
164-
| `i64x2.load32x2_s` | `-munimplemented-simd128` | | :heavy_check_mark: | |
165-
| `i64x2.load32x2_u` | `-munimplemented-simd128` | | :heavy_check_mark: | |
158+
| `v8x16.swizzle` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
159+
| `v8x16.shuffle` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
160+
| `i16x8.load8x8_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
161+
| `i16x8.load8x8_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
162+
| `i32x4.load16x4_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
163+
| `i32x4.load16x4_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
164+
| `i64x2.load32x2_s` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
165+
| `i64x2.load32x2_u` | `-munimplemented-simd128` | :heavy_check_mark: | :heavy_check_mark: | |
166166
| `i8x16.narrow_i16x8_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | |
167167
| `i8x16.narrow_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | |
168168
| `i16x8.narrow_i32x4_s` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | |
@@ -176,12 +176,10 @@
176176
| `i32x4.widen_low_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | |
177177
| `i32x4.widen_high_i16x8_u` | `-msimd128` | :heavy_check_mark: | :heavy_check_mark: | |
178178

179-
[1] Tip of tree LLVM as of March 23, 2020
179+
[1] Tip of tree LLVM as of May 6, 2020
180180

181-
[2] Tested on V8 8.1.0 (candidate). Requires flag `--experimental-wasm-simd`
181+
[2] Tested on V8 8.4.272. Requires flag `--experimental-wasm-simd`
182182

183183
[3] Tip of tree WAVM as of Feb 16, 2020. Requires flag `--enable simd`
184184

185185
[4] Requires (case-insensitive) flag `-wasmsimd`
186-
187-
[5] Uses older `v8x16.shuffle` opcode `0xfd 0x03`

0 commit comments

Comments
 (0)