diff --git a/build.rs b/build.rs index 1c55f0ef58..8784dfa4be 100644 --- a/build.rs +++ b/build.rs @@ -226,7 +226,7 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool { // Waiting for an update to the spec testsuite to not use old // instruction names. - ("simd", "simd_boolean") | ("simd", "simd_lane") => return true, + ("simd", "simd_lane") => return true, // These are new instructions that are not really implemented in any backend. ("simd", "simd_i8x16_arith2") @@ -249,7 +249,9 @@ fn ignore(testsuite: &str, testname: &str, strategy: &str) -> bool { | ("simd", "simd_store8_lane") => return true, // These are only implemented on x64. - ("simd", "simd_i64x2_arith2") => return !cfg!(feature = "experimental_x64"), + ("simd", "simd_i64x2_arith2") | ("simd", "simd_boolean") => { + return !cfg!(feature = "experimental_x64") + } // These are only implemented on aarch64 and x64. ("simd", "simd_i64x2_cmp") diff --git a/cranelift/wasm/src/code_translator.rs b/cranelift/wasm/src/code_translator.rs index ba933d7b53..348387c592 100644 --- a/cranelift/wasm/src/code_translator.rs +++ b/cranelift/wasm/src/code_translator.rs @@ -1633,12 +1633,18 @@ pub fn translate_operator( let bool_result = builder.ins().vany_true(a); state.push1(builder.ins().bint(I32, bool_result)) } - Operator::I8x16AllTrue | Operator::I16x8AllTrue | Operator::I32x4AllTrue => { + Operator::I8x16AllTrue + | Operator::I16x8AllTrue + | Operator::I32x4AllTrue + | Operator::I64x2AllTrue => { let a = pop1_with_bitcast(state, type_of(op), builder); let bool_result = builder.ins().vall_true(a); state.push1(builder.ins().bint(I32, bool_result)) } - Operator::I8x16Bitmask | Operator::I16x8Bitmask | Operator::I32x4Bitmask => { + Operator::I8x16Bitmask + | Operator::I16x8Bitmask + | Operator::I32x4Bitmask + | Operator::I64x2Bitmask => { let a = pop1_with_bitcast(state, type_of(op), builder); state.push1(builder.ins().vhigh_bits(I32, a)); } @@ -1826,8 +1832,8 @@ pub fn translate_operator( let (a, b) = pop2_with_bitcast(state, I16X8, builder); state.push1(builder.ins().widening_pairwise_dot_product_s(a, b)); } - Operator::I64x2Bitmask - | Operator::I64x2ExtendLowI32x4S + + Operator::I64x2ExtendLowI32x4S | Operator::I64x2ExtendHighI32x4S | Operator::I64x2ExtendLowI32x4U | Operator::I64x2ExtendHighI32x4U @@ -1852,7 +1858,6 @@ pub fn translate_operator( | Operator::I64x2ExtMulHighI32x4S | Operator::I64x2ExtMulLowI32x4U | Operator::I64x2ExtMulHighI32x4U - | Operator::I64x2AllTrue | Operator::I16x8ExtAddPairwiseI8x16S | Operator::I16x8ExtAddPairwiseI8x16U | Operator::I32x4ExtAddPairwiseI16x8S @@ -2647,12 +2652,14 @@ fn type_of(operator: &Operator) -> Type { | Operator::I64x2GeS | Operator::I64x2Neg | Operator::I64x2Abs + | Operator::I64x2AllTrue | Operator::I64x2Shl | Operator::I64x2ShrS | Operator::I64x2ShrU | Operator::I64x2Add | Operator::I64x2Sub | Operator::I64x2Mul + | Operator::I64x2Bitmask | Operator::V128Load64Zero { .. } => I64X2, Operator::F32x4Splat