channels)
         .input_offset(464)
         .zero_index(mz)
         .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up24x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
      }
    }
  }
#endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64


#if XNN_ARCH_ARM || XNN_ARCH_ARM64
  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, c_eq_32) {
    TEST_REQUIRES_ARM_NEON;
    DWConvMicrokernelTester()
     .cr(32)
     .kr(9)
     .channels(32)
     .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, c_div_32) {
    TEST_REQUIRES_ARM_NEON;
    for (uint32_t channels = 64; channels < 512; channels += 96) {
      DWConvMicrokernelTester()
       .cr(32)
       .kr(9)
       .channels(channels)
       .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
    }
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, c_div_32_with_qmin) {
    TEST_REQUIRES_ARM_NEON;
    for (uint32_t channels = 64; channels < 512; channels += 96) {
      DWConvMicrokernelTester()
       .cr(32)
       .kr(9)
       .channels(channels)
       .qmin(128)
       .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
    }
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, c_div_32_with_qmax) {
    TEST_REQUIRES_ARM_NEON;
    for (uint32_t channels = 64; channels < 512; channels += 96) {
      DWConvMicrokernelTester()
       .cr(32)
       .kr(9)
       .channels(channels)
       .qmax(128)
       .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
    }
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, c_lt_32) {
    TEST_REQUIRES_ARM_NEON;
    for (uint32_t channels = 1; channels < 32; channels++) {
      DWConvMicrokernelTester()
       .cr(32)
       .kr(9)
       .channels(channels)
       .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
    }
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, c_gt_32) {
    TEST_REQUIRES_ARM_NEON;
    for (uint32_t channels = 33; channels < 64; channels++) {
      DWConvMicrokernelTester()
       .cr(32)
       .kr(9)
       .channels(channels)
       .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
    }
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, c_gt_32_with_qmin) {
    TEST_REQUIRES_ARM_NEON;
    for (uint32_t channels = 33; channels < 64; channels++) {
      DWConvMicrokernelTester()
       .cr(32)
       .kr(9)
       .channels(channels)
       .qmin(128)
       .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
    }
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, c_gt_32_with_qmax) {
    TEST_REQUIRES_ARM_NEON;
    for (uint32_t channels = 33; channels < 64; channels++) {
      DWConvMicrokernelTester()
       .cr(32)
       .kr(9)
       .channels(channels)
       .qmax(128)
       .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
    }
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, multipixel) {
    TEST_REQUIRES_ARM_NEON;
    for (size_t channels = 1; channels <= 160; channels += 31) {
      DWConvMicrokernelTester()
       .cr(32)
       .kr(9)
       .channels(channels)
       .width(3)
       .Test(xnn_qs8_dwconv_minmax_gemmlowp_ukernel_up32x9__neon_mul16, xnn_init_qs8_conv_minmax_gemmlowp_neon_params, xnn_init_qs8_requantization_gemmlowp_params, xnn_qs8_requantize_gemmlowp);
    }
  }

  TEST(QS8_DWCONV_MINMAX_GEMMLOWP_UP32X9__NEON_MUL16, multipixel_with_step)