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