DWCONV microkernels in WAsm SIMD intrinsics
PiperOrigin-RevId: 316687431
diff --git a/test/f32-dwconv-minmax.cc b/test/f32-dwconv-minmax.cc
index 6ed58f4..54b48f5 100644
--- a/test/f32-dwconv-minmax.cc
+++ b/test/f32-dwconv-minmax.cc
@@ -16025,6 +16025,4110 @@
#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 25; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, zero) {
+ for (uint32_t mz = 0; mz < 25; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 25; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, zero) {
+ for (uint32_t mz = 0; mz < 25; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 25; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, zero) {
+ for (uint32_t mz = 0; mz < 25; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 25; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, zero) {
+ for (uint32_t mz = 0; mz < 25; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 25; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, zero) {
+ for (uint32_t mz = 0; mz < 25; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 25; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, zero) {
+ for (uint32_t mz = 0; mz < 25; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(25)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 25; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, zero) {
+ for (uint32_t mz = 0; mz < 25; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 25; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, zero) {
+ for (uint32_t mz = 0; mz < 25; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(25)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 9; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, zero) {
+ for (uint32_t mz = 0; mz < 9; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 9; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, zero) {
+ for (uint32_t mz = 0; mz < 9; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 9; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, zero) {
+ for (uint32_t mz = 0; mz < 9; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 9; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, zero) {
+ for (uint32_t mz = 0; mz < 9; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 9; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, zero) {
+ for (uint32_t mz = 0; mz < 9; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 9; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, zero) {
+ for (uint32_t mz = 0; mz < 9; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(9)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 9; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, zero) {
+ for (uint32_t mz = 0; mz < 9; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 9; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, zero) {
+ for (uint32_t mz = 0; mz < 9; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(9)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 4; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, zero) {
+ for (uint32_t mz = 0; mz < 4; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 4; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, zero) {
+ for (uint32_t mz = 0; mz < 4; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 4; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, zero) {
+ for (uint32_t mz = 0; mz < 4; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 4; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, zero) {
+ for (uint32_t mz = 0; mz < 4; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 4; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, zero) {
+ for (uint32_t mz = 0; mz < 4; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_eq_4) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(4)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_div_4) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_div_4_with_qmin) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_div_4_with_qmax) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_lt_4) {
+ for (uint32_t channels = 1; channels < 4; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_gt_4) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_gt_4_with_qmin) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_gt_4_with_qmax) {
+ for (uint32_t channels = 5; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ for (size_t step = 2; step <= 4; step++) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(4)
+ .width(5)
+ .output_stride(23)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 20; channels += 3) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, input_offset) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .input_offset(112)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, zero) {
+ for (uint32_t mz = 0; mz < 4; mz++) {
+ for (uint32_t channels = 8; channels < 64; channels += 12) {
+ DWConvMicrokernelTester()
+ .cr(4)
+ .kr(4)
+ .channels(channels)
+ .input_offset(112)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 4; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, zero) {
+ for (uint32_t mz = 0; mz < 4; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
+#if XNN_ARCH_WASMSIMD
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_eq_8) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(8)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_div_8) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_div_8_with_qmin) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_div_8_with_qmax) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_lt_8) {
+ for (uint32_t channels = 1; channels < 8; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_gt_8) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_gt_8_with_qmin) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_gt_8_with_qmax) {
+ for (uint32_t channels = 9; channels < 16; channels++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel_with_step) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ for (size_t step = 2; step <= 4; step++) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .step(step)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(8)
+ .width(5)
+ .output_stride(43)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmin(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
+ for (size_t channels = 1; channels <= 40; channels += 7) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .width(3)
+ .qmax(128)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, input_offset) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .input_offset(176)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+
+ TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, zero) {
+ for (uint32_t mz = 0; mz < 4; mz++) {
+ for (uint32_t channels = 16; channels < 128; channels += 24) {
+ DWConvMicrokernelTester()
+ .cr(8)
+ .kr(4)
+ .channels(channels)
+ .input_offset(176)
+ .zero_index(mz)
+ .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86, DWConvMicrokernelTester::Variant::Scalar);
+ }
+ }
+ }
+#endif // XNN_ARCH_WASMSIMD
+
+
#if XNN_ARCH_WASM
TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_eq_1) {
DWConvMicrokernelTester()
diff --git a/test/f32-dwconv-minmax.yaml b/test/f32-dwconv-minmax.yaml
index eff738c..2477ecc 100644
--- a/test/f32-dwconv-minmax.yaml
+++ b/test/f32-dwconv-minmax.yaml
@@ -91,6 +91,30 @@
- name: xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2
- name: xnn_f32_dwconv_minmax_ukernel_up8x4__psimd
- name: xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2
+- name: xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm
+- name: xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86
+- name: xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86
- name: xnn_f32_dwconv_minmax_ukernel_up1x4__wasm
- name: xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2
- name: xnn_f32_dwconv_minmax_ukernel_up2x4__wasm