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

Latest commit

 

History

History
248 lines (243 loc) · 34.8 KB

ImplementationStatus.md

File metadata and controls

248 lines (243 loc) · 34.8 KB
Instruction LLVM[1] V8[2] WAVM[3] ChakraCore[4] SpiderMonkey[5]
v128.load -msimd128 ✔️ ✔️ ✔️
v128.load8x8_s -msimd128 ✔️ ✔️
v128.load8x8_u -msimd128 ✔️ ✔️
v128.load16x4_s -msimd128 ✔️ ✔️
v128.load16x4_u -msimd128 ✔️ ✔️
v128.load32x2_s -msimd128 ✔️ ✔️
v128.load32x2_u -msimd128 ✔️ ✔️
v128.load8_splat -msimd128 ✔️ ✔️
v128.load16_splat -msimd128 ✔️ ✔️
v128.load32_splat -msimd128 ✔️ ✔️
v128.load64_splat -msimd128 ✔️ ✔️
v128.store -msimd128 ✔️ ✔️ ✔️
v128.const -munimplemented-simd128 ✔️ ✔️ ✔️
i8x16.shuffle -msimd128 ✔️ ✔️ ✔️
i8x16.swizzle -msimd128 ✔️ ✔️
i8x16.splat -msimd128 ✔️ ✔️ ✔️
i16x8.splat -msimd128 ✔️ ✔️ ✔️
i32x4.splat -msimd128 ✔️ ✔️ ✔️
i64x2.splat -msimd128 ✔️ ✔️ ✔️
f32x4.splat -msimd128 ✔️ ✔️ ✔️
f64x2.splat -msimd128 ✔️ ✔️ ✔️
i8x16.extract_lane_s -msimd128 ✔️ ✔️ ✔️
i8x16.extract_lane_u -msimd128 ✔️ ✔️ ✔️
i8x16.replace_lane -msimd128 ✔️ ✔️ ✔️
i16x8.extract_lane_s -msimd128 ✔️ ✔️ ✔️
i16x8.extract_lane_u -msimd128 ✔️ ✔️ ✔️
i16x8.replace_lane -msimd128 ✔️ ✔️ ✔️
i32x4.extract_lane -msimd128 ✔️ ✔️ ✔️
i32x4.replace_lane -msimd128 ✔️ ✔️ ✔️
i64x2.extract_lane -msimd128 ✔️ ✔️ ✔️
i64x2.replace_lane -msimd128 ✔️ ✔️ ✔️
f32x4.extract_lane -msimd128 ✔️ ✔️ ✔️
f32x4.replace_lane -msimd128 ✔️ ✔️ ✔️
f64x2.extract_lane -msimd128 ✔️ ✔️ ✔️
f64x2.replace_lane -msimd128 ✔️ ✔️ ✔️
i8x16.eq -msimd128 ✔️ ✔️ ✔️
i8x16.ne -msimd128 ✔️ ✔️ ✔️
i8x16.lt_s -msimd128 ✔️ ✔️ ✔️
i8x16.lt_u -msimd128 ✔️ ✔️ ✔️
i8x16.gt_s -msimd128 ✔️ ✔️ ✔️
i8x16.gt_u -msimd128 ✔️ ✔️ ✔️
i8x16.le_s -msimd128 ✔️ ✔️ ✔️
i8x16.le_u -msimd128 ✔️ ✔️ ✔️
i8x16.ge_s -msimd128 ✔️ ✔️ ✔️
i8x16.ge_u -msimd128 ✔️ ✔️ ✔️
i16x8.eq -msimd128 ✔️ ✔️ ✔️
i16x8.ne -msimd128 ✔️ ✔️ ✔️
i16x8.lt_s -msimd128 ✔️ ✔️ ✔️
i16x8.lt_u -msimd128 ✔️ ✔️ ✔️
i16x8.gt_s -msimd128 ✔️ ✔️ ✔️
i16x8.gt_u -msimd128 ✔️ ✔️ ✔️
i16x8.le_s -msimd128 ✔️ ✔️ ✔️
i16x8.le_u -msimd128 ✔️ ✔️ ✔️
i16x8.ge_s -msimd128 ✔️ ✔️ ✔️
i16x8.ge_u -msimd128 ✔️ ✔️ ✔️
i32x4.eq -msimd128 ✔️ ✔️ ✔️
i32x4.ne -msimd128 ✔️ ✔️ ✔️
i32x4.lt_s -msimd128 ✔️ ✔️ ✔️
i32x4.lt_u -msimd128 ✔️ ✔️ ✔️
i32x4.gt_s -msimd128 ✔️ ✔️ ✔️
i32x4.gt_u -msimd128 ✔️ ✔️ ✔️
i32x4.le_s -msimd128 ✔️ ✔️ ✔️
i32x4.le_u -msimd128 ✔️ ✔️ ✔️
i32x4.ge_s -msimd128 ✔️ ✔️ ✔️
i32x4.ge_u -msimd128 ✔️ ✔️ ✔️
f32x4.eq -msimd128 ✔️ ✔️ ✔️
f32x4.ne -msimd128 ✔️ ✔️ ✔️
f32x4.lt -msimd128 ✔️ ✔️ ✔️
f32x4.gt -msimd128 ✔️ ✔️ ✔️
f32x4.le -msimd128 ✔️ ✔️ ✔️
f32x4.ge -msimd128 ✔️ ✔️ ✔️
f64x2.eq -msimd128 ✔️ ✔️ ✔️
f64x2.ne -msimd128 ✔️ ✔️ ✔️
f64x2.lt -msimd128 ✔️ ✔️ ✔️
f64x2.gt -msimd128 ✔️ ✔️ ✔️
f64x2.le -msimd128 ✔️ ✔️ ✔️
f64x2.ge -msimd128 ✔️ ✔️ ✔️
v128.not -msimd128 ✔️ ✔️ ✔️
v128.and -msimd128 ✔️ ✔️ ✔️
v128.andnot -msimd128 ✔️ ✔️
v128.or -msimd128 ✔️ ✔️ ✔️
v128.xor -msimd128 ✔️ ✔️ ✔️
v128.bitselect -msimd128 ✔️ ✔️ ✔️
i8x16.abs -msimd128 ✔️ ✔️
i8x16.neg -msimd128 ✔️ ✔️ ✔️
i8x16.all_true -msimd128 ✔️ ✔️ ✔️
i8x16.bitmask -munimplemented-simd128 ✔️ ✔️
i8x16.narrow_i16x8_s -msimd128 ✔️ ✔️
i8x16.narrow_i16x8_u -msimd128 ✔️ ✔️
i8x16.shl -msimd128 ✔️ ✔️ ✔️
i8x16.shr_s -msimd128 ✔️ ✔️ ✔️
i8x16.shr_u -msimd128 ✔️ ✔️ ✔️
i8x16.add -msimd128 ✔️ ✔️ ✔️
i8x16.add_sat_s -msimd128 ✔️ ✔️ ✔️
i8x16.add_sat_u -msimd128 ✔️ ✔️ ✔️
i8x16.sub -msimd128 ✔️ ✔️ ✔️
i8x16.sub_sat_s -msimd128 ✔️ ✔️ ✔️
i8x16.sub_sat_u -msimd128 ✔️ ✔️ ✔️
i8x16.min_s -msimd128 ✔️ ✔️
i8x16.min_u -msimd128 ✔️ ✔️
i8x16.max_s -msimd128 ✔️ ✔️
i8x16.max_u -msimd128 ✔️ ✔️
i8x16.avgr_u -msimd128 ✔️ ✔️
i16x8.abs -msimd128 ✔️ ✔️
i16x8.neg -msimd128 ✔️ ✔️ ✔️
i16x8.all_true -msimd128 ✔️ ✔️ ✔️
i16x8.bitmask -munimplemented-simd128 ✔️ ✔️
i16x8.narrow_i32x4_s -msimd128 ✔️ ✔️
i16x8.narrow_i32x4_u -msimd128 ✔️ ✔️
i16x8.extend_low_i8x16_s -msimd128 ✔️ ✔️
i16x8.extend_high_i8x16_s -msimd128 ✔️ ✔️
i16x8.extend_low_i8x16_u -msimd128 ✔️ ✔️
i16x8.extend_high_i8x16_u -msimd128 ✔️ ✔️
i16x8.shl -msimd128 ✔️ ✔️ ✔️
i16x8.shr_s -msimd128 ✔️ ✔️ ✔️
i16x8.shr_u -msimd128 ✔️ ✔️ ✔️
i16x8.add -msimd128 ✔️ ✔️ ✔️
i16x8.add_sat_s -msimd128 ✔️ ✔️ ✔️
i16x8.add_sat_u -msimd128 ✔️ ✔️ ✔️
i16x8.sub -msimd128 ✔️ ✔️ ✔️
i16x8.sub_sat_s -msimd128 ✔️ ✔️ ✔️
i16x8.sub_sat_u -msimd128 ✔️ ✔️ ✔️
i16x8.mul -msimd128 ✔️ ✔️ ✔️
i16x8.min_s -msimd128 ✔️ ✔️
i16x8.min_u -msimd128 ✔️ ✔️
i16x8.max_s -msimd128 ✔️ ✔️
i16x8.max_u -msimd128 ✔️ ✔️
i16x8.avgr_u -msimd128 ✔️ ✔️
i16x8.q15mulr_sat_s ✔️ ✔️
i32x4.abs -msimd128 ✔️ ✔️
i32x4.neg -msimd128 ✔️ ✔️ ✔️
i32x4.all_true -msimd128 ✔️ ✔️ ✔️
i32x4.bitmask -munimplemented-simd128 ✔️ ✔️
i32x4.extend_low_i16x8_s -msimd128 ✔️ ✔️
i32x4.extend_high_i16x8_s -msimd128 ✔️ ✔️
i32x4.extend_low_i16x8_u -msimd128 ✔️ ✔️
i32x4.extend_high_i16x8_u -msimd128 ✔️ ✔️
i32x4.shl -msimd128 ✔️ ✔️ ✔️
i32x4.shr_s -msimd128 ✔️ ✔️ ✔️
i32x4.shr_u -msimd128 ✔️ ✔️ ✔️
i32x4.add -msimd128 ✔️ ✔️ ✔️
i32x4.sub -msimd128 ✔️ ✔️ ✔️
i32x4.mul -msimd128 ✔️ ✔️ ✔️
i32x4.min_s -msimd128 ✔️ ✔️
i32x4.min_u -msimd128 ✔️ ✔️
i32x4.max_s -msimd128 ✔️ ✔️
i32x4.max_u -msimd128 ✔️ ✔️
i32x4.dot_i16x8_s ✔️ ✔️
i64x2.eq ✔️ ✔️
i64x2.abs ✔️ ✔️
i64x2.neg -msimd128 ✔️ ✔️ ✔️
i64x2.all_true ✔️ ✔️
i64x2.bitmask ✔️ ✔️
i64x2.shl -msimd128 ✔️ ✔️ ✔️
i64x2.shr_s -msimd128 ✔️ ✔️ ✔️
i64x2.shr_u -msimd128 ✔️ ✔️ ✔️
i64x2.add -msimd128 ✔️ ✔️ ✔️
i64x2.sub -msimd128 ✔️ ✔️ ✔️
i64x2.mul -msimd128 ✔️ ✔️
i64x2.extend_low_i32x4_s ✔️ ✔️
i64x2.extend_high_i32x4_s ✔️ ✔️
i64x2.extend_low_i32x4_u ✔️ ✔️
i64x2.extend_high_i32x4_u ✔️ ✔️
f32x4.abs -msimd128 ✔️ ✔️ ✔️
f32x4.neg -msimd128 ✔️ ✔️ ✔️
f32x4.sqrt -msimd128 ✔️ ✔️ ✔️
f32x4.add -msimd128 ✔️ ✔️ ✔️
f32x4.sub -msimd128 ✔️ ✔️ ✔️
f32x4.mul -msimd128 ✔️ ✔️ ✔️
f32x4.div -msimd128 ✔️ ✔️ ✔️
f32x4.min -msimd128 ✔️ ✔️ ✔️
f32x4.max -msimd128 ✔️ ✔️ ✔️
f32x4.pmin ✔️ ✔️
f32x4.pmax ✔️ ✔️
f32x4.ceil ✔️ ✔️
f32x4.floor ✔️ ✔️
f32x4.trunc ✔️ ✔️
f32x4.nearest ✔️ ✔️
f64x2.abs -msimd128 ✔️ ✔️ ✔️
f64x2.neg -msimd128 ✔️ ✔️ ✔️
f64x2.sqrt -msimd128 ✔️ ✔️ ✔️
f64x2.add -msimd128 ✔️ ✔️ ✔️
f64x2.sub -msimd128 ✔️ ✔️ ✔️
f64x2.mul -msimd128 ✔️ ✔️ ✔️
f64x2.div -msimd128 ✔️ ✔️ ✔️
f64x2.min -msimd128 ✔️ ✔️ ✔️
f64x2.max -msimd128 ✔️ ✔️ ✔️
f64x2.pmin ✔️ ✔️
f64x2.pmax ✔️ ✔️
f64x2.ceil ✔️ ✔️
f64x2.floor ✔️ ✔️
f64x2.trunc ✔️ ✔️
f64x2.nearest ✔️ ✔️
i32x4.trunc_sat_f32x4_s -msimd128 ✔️ ✔️ ✔️
i32x4.trunc_sat_f32x4_u -msimd128 ✔️ ✔️ ✔️
f32x4.convert_i32x4_s -msimd128 ✔️ ✔️ ✔️
f32x4.convert_i32x4_u -msimd128 ✔️ ✔️
v128.load32_zero ✔️ ✔️
v128.load64_zero ✔️ ✔️
i16x8.extmul_low_i8x16_s ✔️ ✔️
i16x8.extmul_high_i8x16_s ✔️ ✔️
i16x8.extmul_low_i8x16_u ✔️ ✔️
i16x8.extmul_high_i8x16_u ✔️ ✔️
i32x4.extmul_low_i16x8_s ✔️ ✔️
i32x4.extmul_high_i16x8_s ✔️ ✔️
i32x4.extmul_low_i16x8_u ✔️ ✔️
i32x4.extmul_high_i16x8_u ✔️ ✔️
i64x2.extmul_low_i32x4_s ✔️ ✔️
i64x2.extmul_high_i32x4_s ✔️ ✔️
i64x2.extmul_low_i32x4_u ✔️ ✔️
i64x2.extmul_high_i32x4_u ✔️ ✔️
v128.any_true ✔️ ✔️
v128.load8_lane ✔️ ✔️
v128.load16_lane ✔️ ✔️
v128.load32_lane ✔️ ✔️
v128.load64_lane ✔️ ✔️
v128.store8_lane ✔️ ✔️
v128.store16_lane ✔️ ✔️
v128.store32_lane ✔️ ✔️
v128.store64_lane ✔️ ✔️
i64x2.ne ✔️ ✔️
f64x2.convert_low_i32x4_s ✔️ ✔️
f64x2.convert_low_i32x4_u ✔️ ✔️
i32x4.trunc_sat_f64x2_s_zero ✔️ ✔️
i32x4.trunc_sat_f64x2_u_zero ✔️ ✔️
f32x4.demote_f64x2_zero ✔️ ✔️
f64x2.promote_low_f32x4 ✔️ ✔️
i8x16.popcnt ✔️ ✔️
i16x8.extadd_pairwise_i8x16_s ✔️ ✔️
i16x8.extadd_pairwise_i8x16_u ✔️ ✔️
i32x4.extadd_pairwise_i16x8_s ✔️ ✔️
i32x4.extadd_pairwise_i16x8_u ✔️ ✔️
i64x2.lt_s ✔️ ✔️
i64x2.gt_s ✔️ ✔️
i64x2.le_s ✔️ ✔️
i64x2.ge_s ✔️ ✔️

[1] Tip of tree LLVM as of May 20, 2020

[2] V8 9.1.0.

[3] Not known to be updated after latest renumbering. Requires flag --enable simd

[4] Only in 1.12.* (development branch). Requires (case-insensitive) flag -wasmsimd

[5] Firefox x64/x86 (SSE4.1+ only) from FF89, ARM64 from FF90. Earlier versions control in about:config under javascript.options.wasm_simd