Leverage f32x4.pmin and f32x4.pmax WAsm SIMD instructions
Warning: this change makes XNNPACK binaries for WebAssembly SIMD incompatible with Chrome versions earlier than 87
PiperOrigin-RevId: 397776648
diff --git a/src/f32-spmm/gen/16x1-minmax-wasmsimd-x86-x2.c b/src/f32-spmm/gen/16x1-minmax-wasmsimd-x86-x2.c
index c137a59..824d48a 100644
--- a/src/f32-spmm/gen/16x1-minmax-wasmsimd-x86-x2.c
+++ b/src/f32-spmm/gen/16x1-minmax-wasmsimd-x86-x2.c
@@ -98,14 +98,14 @@
vaccCDEF = wasm_f32x4_add(vaccCDEF, wasm_f32x4_mul(viCDEF, vw));
} while (--nnz != 0);
}
- v128_t vout0123 = wasm_v128_bitselect(vacc0123, vmax, wasm_f32x4_le(vacc0123, vmax));
- v128_t vout4567 = wasm_v128_bitselect(vacc4567, vmax, wasm_f32x4_le(vacc4567, vmax));
- v128_t vout89AB = wasm_v128_bitselect(vacc89AB, vmax, wasm_f32x4_le(vacc89AB, vmax));
- v128_t voutCDEF = wasm_v128_bitselect(vaccCDEF, vmax, wasm_f32x4_le(vaccCDEF, vmax));
- vout0123 = wasm_v128_bitselect(vmin, vout0123, wasm_f32x4_lt(vout0123, vmin));
- vout4567 = wasm_v128_bitselect(vmin, vout4567, wasm_f32x4_lt(vout4567, vmin));
- vout89AB = wasm_v128_bitselect(vmin, vout89AB, wasm_f32x4_lt(vout89AB, vmin));
- voutCDEF = wasm_v128_bitselect(vmin, voutCDEF, wasm_f32x4_lt(voutCDEF, vmin));
+ v128_t vout0123 = wasm_f32x4_pmin(vmax, vacc0123);
+ v128_t vout4567 = wasm_f32x4_pmin(vmax, vacc4567);
+ v128_t vout89AB = wasm_f32x4_pmin(vmax, vacc89AB);
+ v128_t voutCDEF = wasm_f32x4_pmin(vmax, vaccCDEF);
+ vout0123 = wasm_f32x4_pmax(vmin, vout0123);
+ vout4567 = wasm_f32x4_pmax(vmin, vout4567);
+ vout89AB = wasm_f32x4_pmax(vmin, vout89AB);
+ voutCDEF = wasm_f32x4_pmax(vmin, voutCDEF);
wasm_v128_store(output, vout0123);
wasm_v128_store(output + 4, vout4567);
wasm_v128_store(output + 8, vout89AB);
@@ -138,10 +138,10 @@
vacc4567 = wasm_f32x4_add(vacc4567, wasm_f32x4_mul(vi4567, vw));
} while (--nnz != 0);
}
- v128_t vout0123 = wasm_v128_bitselect(vacc0123, vmax, wasm_f32x4_le(vacc0123, vmax));
- v128_t vout4567 = wasm_v128_bitselect(vacc4567, vmax, wasm_f32x4_le(vacc4567, vmax));
- vout0123 = wasm_v128_bitselect(vmin, vout0123, wasm_f32x4_lt(vout0123, vmin));
- vout4567 = wasm_v128_bitselect(vmin, vout4567, wasm_f32x4_lt(vout4567, vmin));
+ v128_t vout0123 = wasm_f32x4_pmin(vmax, vacc0123);
+ v128_t vout4567 = wasm_f32x4_pmin(vmax, vacc4567);
+ vout0123 = wasm_f32x4_pmax(vmin, vout0123);
+ vout4567 = wasm_f32x4_pmax(vmin, vout4567);
wasm_v128_store(output, vout0123);
wasm_v128_store(output + 4, vout4567);
@@ -168,8 +168,8 @@
vacc0123 = wasm_f32x4_add(vacc0123, wasm_f32x4_mul(vi0123, vw));
} while (--nnz != 0);
}
- v128_t vout0123 = wasm_v128_bitselect(vacc0123, vmax, wasm_f32x4_le(vacc0123, vmax));
- vout0123 = wasm_v128_bitselect(vmin, vout0123, wasm_f32x4_lt(vout0123, vmin));
+ v128_t vout0123 = wasm_f32x4_pmin(vmax, vacc0123);
+ vout0123 = wasm_f32x4_pmax(vmin, vout0123);
wasm_v128_store(output, vout0123);
output = (float*restrict) ((uintptr_t) output + output_stride);
@@ -195,8 +195,8 @@
vacc01 = wasm_f32x4_add(vacc01, wasm_f32x4_mul(vi01, vw));
} while (--nnz != 0);
}
- v128_t vout01 = wasm_v128_bitselect(vacc01, vmax, wasm_f32x4_le(vacc01, vmax));
- vout01 = wasm_v128_bitselect(vmin, vout01, wasm_f32x4_lt(vout01, vmin));
+ v128_t vout01 = wasm_f32x4_pmin(vmax, vacc01);
+ vout01 = wasm_f32x4_pmax(vmin, vout01);
*((double*) output) = wasm_f64x2_extract_lane(vout01, 0);
output = (float*restrict) ((uintptr_t) output + output_stride);
@@ -222,8 +222,8 @@
vacc0 = wasm_f32x4_add(vacc0, wasm_f32x4_mul(vi0, vw));
} while (--nnz != 0);
}
- v128_t vout0 = wasm_v128_bitselect(vacc0, vmax, wasm_f32x4_le(vacc0, vmax));
- vout0 = wasm_v128_bitselect(vmin, vout0, wasm_f32x4_lt(vout0, vmin));
+ v128_t vout0 = wasm_f32x4_pmin(vmax, vacc0);
+ vout0 = wasm_f32x4_pmax(vmin, vout0);
*output = wasm_f32x4_extract_lane(vout0, 0);
output = (float*restrict) ((uintptr_t) output + output_stride);