FP32 IMAGIC variants of scalar QC8/QS8/QU8 GEMM/IGEMM/DWCONV microkernels

PiperOrigin-RevId: 419687973
diff --git a/test/qc8-igemm-minmax-fp32.cc b/test/qc8-igemm-minmax-fp32.cc
index de7517e..f26b2b8 100644
--- a/test/qc8-igemm-minmax-fp32.cc
+++ b/test/qc8-igemm-minmax-fp32.cc
@@ -75029,2990 +75029,6 @@
 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
 
 
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_eq_1) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(2)
-    .k(1)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, strided_cn) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(2)
-    .k(1)
-    .cn_stride(5)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_eq_1_subtile) {
-  for (uint32_t m = 1; m <= 1; m++) {
-    for (uint32_t n = 1; n <= 2; n++) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(m)
-        .n(n)
-        .k(1)
-        .iterations(1)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_eq_1_subtile_m) {
-  for (uint32_t m = 1; m <= 1; m++) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(m)
-      .n(2)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_eq_1_subtile_n) {
-  for (uint32_t n = 1; n <= 2; n++) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(1)
-      .n(n)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_gt_1) {
-  for (size_t k = 2; k < 10; k++) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(1)
-      .n(2)
-      .k(k)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_gt_1_subtile) {
-  for (size_t k = 2; k < 10; k++) {
-    for (uint32_t m = 1; m <= 1; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_gt_2) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(2)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_gt_2_strided_cn) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(2)
-        .k(k)
-        .cn_stride(5)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_gt_2_subtile) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 1; m++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_div_2) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(2)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_div_2_strided_cn) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(n)
-        .k(k)
-        .cn_stride(5)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_div_2_subtile) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 1; m++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, small_kernel) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(1)
-      .n(2)
-      .k(k)
-      .ks(3)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, small_kernel_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 1; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .ks(3)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_gt_2_small_kernel) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_div_2_small_kernel) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, strided_cm_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 1; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .cm_stride(5)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, a_offset) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(1)
-      .n(2)
-      .k(k)
-      .ks(3)
-      .a_offset(7)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, zero) {
-  for (uint32_t mz = 0; mz < 1; mz++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .a_offset(7)
-        .zero_index(mz)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, qmin) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(2)
-    .k(1)
-    .qmin(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, qmax) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(2)
-    .k(1)
-    .qmax(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, strided_cm) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(2)
-    .k(1)
-    .cm_stride(5)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_eq_1) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(2)
-    .k(1)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, strided_cn) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(2)
-    .k(1)
-    .cn_stride(5)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_eq_1_subtile) {
-  for (uint32_t m = 1; m <= 2; m++) {
-    for (uint32_t n = 1; n <= 2; n++) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(m)
-        .n(n)
-        .k(1)
-        .iterations(1)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_eq_1_subtile_m) {
-  for (uint32_t m = 1; m <= 2; m++) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(m)
-      .n(2)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_eq_1_subtile_n) {
-  for (uint32_t n = 1; n <= 2; n++) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(2)
-      .n(n)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_gt_1) {
-  for (size_t k = 2; k < 10; k++) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(2)
-      .n(2)
-      .k(k)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_gt_1_subtile) {
-  for (size_t k = 2; k < 10; k++) {
-    for (uint32_t m = 1; m <= 2; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_gt_2) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(2)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_gt_2_strided_cn) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(2)
-        .k(k)
-        .cn_stride(5)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_gt_2_subtile) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 2; m++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_div_2) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(2)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_div_2_strided_cn) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(n)
-        .k(k)
-        .cn_stride(5)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_div_2_subtile) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 2; m++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, small_kernel) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(2)
-      .n(2)
-      .k(k)
-      .ks(3)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, small_kernel_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 2; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .ks(3)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_gt_2_small_kernel) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_div_2_small_kernel) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, strided_cm_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 2; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .cm_stride(5)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, a_offset) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(2)
-      .n(2)
-      .k(k)
-      .ks(3)
-      .a_offset(13)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, zero) {
-  for (uint32_t mz = 0; mz < 2; mz++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .a_offset(13)
-        .zero_index(mz)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, qmin) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(2)
-    .k(1)
-    .qmin(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, qmax) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(2)
-    .k(1)
-    .qmax(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, strided_cm) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(2)
-    .k(1)
-    .cm_stride(5)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_eq_1) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(2)
-    .k(1)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, strided_cn) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(2)
-    .k(1)
-    .cn_stride(5)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_eq_1_subtile) {
-  for (uint32_t m = 1; m <= 3; m++) {
-    for (uint32_t n = 1; n <= 2; n++) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(m)
-        .n(n)
-        .k(1)
-        .iterations(1)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_eq_1_subtile_m) {
-  for (uint32_t m = 1; m <= 3; m++) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(m)
-      .n(2)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_eq_1_subtile_n) {
-  for (uint32_t n = 1; n <= 2; n++) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(3)
-      .n(n)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_gt_1) {
-  for (size_t k = 2; k < 10; k++) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(3)
-      .n(2)
-      .k(k)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_gt_1_subtile) {
-  for (size_t k = 2; k < 10; k++) {
-    for (uint32_t m = 1; m <= 3; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_gt_2) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(2)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_gt_2_strided_cn) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(2)
-        .k(k)
-        .cn_stride(5)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_gt_2_subtile) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 3; m++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_div_2) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(2)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_div_2_strided_cn) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(n)
-        .k(k)
-        .cn_stride(5)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_div_2_subtile) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 3; m++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, small_kernel) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(3)
-      .n(2)
-      .k(k)
-      .ks(3)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, small_kernel_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 3; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .ks(3)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_gt_2_small_kernel) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_div_2_small_kernel) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, strided_cm_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 3; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .cm_stride(5)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, a_offset) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(3)
-      .n(2)
-      .k(k)
-      .ks(3)
-      .a_offset(17)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, zero) {
-  for (uint32_t mz = 0; mz < 3; mz++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .a_offset(17)
-        .zero_index(mz)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, qmin) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(2)
-    .k(1)
-    .qmin(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, qmax) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(2)
-    .k(1)
-    .qmax(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, strided_cm) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(2)
-    .k(1)
-    .cm_stride(5)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_eq_1) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(2)
-    .k(1)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, strided_cn) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(2)
-    .k(1)
-    .cn_stride(5)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_eq_1_subtile) {
-  for (uint32_t m = 1; m <= 4; m++) {
-    for (uint32_t n = 1; n <= 2; n++) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(m)
-        .n(n)
-        .k(1)
-        .iterations(1)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_eq_1_subtile_m) {
-  for (uint32_t m = 1; m <= 4; m++) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(m)
-      .n(2)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_eq_1_subtile_n) {
-  for (uint32_t n = 1; n <= 2; n++) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(4)
-      .n(n)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_gt_1) {
-  for (size_t k = 2; k < 10; k++) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(4)
-      .n(2)
-      .k(k)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_gt_1_subtile) {
-  for (size_t k = 2; k < 10; k++) {
-    for (uint32_t m = 1; m <= 4; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_gt_2) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(2)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_gt_2_strided_cn) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(2)
-        .k(k)
-        .cn_stride(5)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_gt_2_subtile) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 4; m++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_div_2) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(2)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_div_2_strided_cn) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(n)
-        .k(k)
-        .cn_stride(5)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_div_2_subtile) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 4; m++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, small_kernel) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(4)
-      .n(2)
-      .k(k)
-      .ks(3)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, small_kernel_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 4; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .ks(3)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_gt_2_small_kernel) {
-  for (uint32_t n = 3; n < 4; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_div_2_small_kernel) {
-  for (uint32_t n = 4; n <= 6; n += 2) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, strided_cm_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 4; m++) {
-      for (uint32_t n = 1; n <= 2; n++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(2)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .cm_stride(5)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, a_offset) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(2)
-      .kr(1)
-      .sr(1)
-      .m(4)
-      .n(2)
-      .k(k)
-      .ks(3)
-      .a_offset(23)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, zero) {
-  for (uint32_t mz = 0; mz < 4; mz++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(2)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(2)
-        .k(k)
-        .ks(3)
-        .a_offset(23)
-        .zero_index(mz)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, qmin) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(2)
-    .k(1)
-    .qmin(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, qmax) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(2)
-    .k(1)
-    .qmax(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, strided_cm) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(2)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(2)
-    .k(1)
-    .cm_stride(5)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_eq_1) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(4)
-    .k(1)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, strided_cn) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(4)
-    .k(1)
-    .cn_stride(7)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_eq_1_subtile) {
-  for (uint32_t m = 1; m <= 1; m++) {
-    for (uint32_t n = 1; n <= 4; n++) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(m)
-        .n(n)
-        .k(1)
-        .iterations(1)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_eq_1_subtile_m) {
-  for (uint32_t m = 1; m <= 1; m++) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(m)
-      .n(4)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_eq_1_subtile_n) {
-  for (uint32_t n = 1; n <= 4; n++) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(1)
-      .n(n)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_gt_1) {
-  for (size_t k = 2; k < 10; k++) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(1)
-      .n(4)
-      .k(k)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_gt_1_subtile) {
-  for (size_t k = 2; k < 10; k++) {
-    for (uint32_t m = 1; m <= 1; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_gt_4) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(4)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_gt_4_strided_cn) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(4)
-        .k(k)
-        .cn_stride(7)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_gt_4_subtile) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 1; m++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_div_4) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(4)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_div_4_strided_cn) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(n)
-        .k(k)
-        .cn_stride(7)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_div_4_subtile) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 1; m++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, small_kernel) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(1)
-      .n(4)
-      .k(k)
-      .ks(3)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, small_kernel_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 1; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .ks(3)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_gt_4_small_kernel) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_div_4_small_kernel) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, strided_cm_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 1; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(1)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .cm_stride(7)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, a_offset) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(1)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(1)
-      .n(4)
-      .k(k)
-      .ks(3)
-      .a_offset(7)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, zero) {
-  for (uint32_t mz = 0; mz < 1; mz++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(1)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(1)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .a_offset(7)
-        .zero_index(mz)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, qmin) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(4)
-    .k(1)
-    .qmin(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, qmax) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(4)
-    .k(1)
-    .qmax(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, strided_cm) {
-  GemmMicrokernelTester()
-    .mr(1)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(1)
-    .n(4)
-    .k(1)
-    .cm_stride(7)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_eq_1) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(4)
-    .k(1)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, strided_cn) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(4)
-    .k(1)
-    .cn_stride(7)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_eq_1_subtile) {
-  for (uint32_t m = 1; m <= 2; m++) {
-    for (uint32_t n = 1; n <= 4; n++) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(m)
-        .n(n)
-        .k(1)
-        .iterations(1)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_eq_1_subtile_m) {
-  for (uint32_t m = 1; m <= 2; m++) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(m)
-      .n(4)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_eq_1_subtile_n) {
-  for (uint32_t n = 1; n <= 4; n++) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(2)
-      .n(n)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_gt_1) {
-  for (size_t k = 2; k < 10; k++) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(2)
-      .n(4)
-      .k(k)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_gt_1_subtile) {
-  for (size_t k = 2; k < 10; k++) {
-    for (uint32_t m = 1; m <= 2; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_gt_4) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(4)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_gt_4_strided_cn) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(4)
-        .k(k)
-        .cn_stride(7)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_gt_4_subtile) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 2; m++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_div_4) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(4)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_div_4_strided_cn) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(n)
-        .k(k)
-        .cn_stride(7)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_div_4_subtile) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 2; m++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, small_kernel) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(2)
-      .n(4)
-      .k(k)
-      .ks(3)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, small_kernel_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 2; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .ks(3)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_gt_4_small_kernel) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_div_4_small_kernel) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, strided_cm_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 2; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(2)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .cm_stride(7)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, a_offset) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(2)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(2)
-      .n(4)
-      .k(k)
-      .ks(3)
-      .a_offset(13)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, zero) {
-  for (uint32_t mz = 0; mz < 2; mz++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(2)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(2)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .a_offset(13)
-        .zero_index(mz)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, qmin) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(4)
-    .k(1)
-    .qmin(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, qmax) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(4)
-    .k(1)
-    .qmax(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, strided_cm) {
-  GemmMicrokernelTester()
-    .mr(2)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(2)
-    .n(4)
-    .k(1)
-    .cm_stride(7)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_eq_1) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(4)
-    .k(1)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, strided_cn) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(4)
-    .k(1)
-    .cn_stride(7)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_eq_1_subtile) {
-  for (uint32_t m = 1; m <= 3; m++) {
-    for (uint32_t n = 1; n <= 4; n++) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(m)
-        .n(n)
-        .k(1)
-        .iterations(1)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_eq_1_subtile_m) {
-  for (uint32_t m = 1; m <= 3; m++) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(m)
-      .n(4)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_eq_1_subtile_n) {
-  for (uint32_t n = 1; n <= 4; n++) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(3)
-      .n(n)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_gt_1) {
-  for (size_t k = 2; k < 10; k++) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(3)
-      .n(4)
-      .k(k)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_gt_1_subtile) {
-  for (size_t k = 2; k < 10; k++) {
-    for (uint32_t m = 1; m <= 3; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_gt_4) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(4)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_gt_4_strided_cn) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(4)
-        .k(k)
-        .cn_stride(7)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_gt_4_subtile) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 3; m++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_div_4) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(4)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_div_4_strided_cn) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(n)
-        .k(k)
-        .cn_stride(7)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_div_4_subtile) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 3; m++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, small_kernel) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(3)
-      .n(4)
-      .k(k)
-      .ks(3)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, small_kernel_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 3; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .ks(3)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_gt_4_small_kernel) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_div_4_small_kernel) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, strided_cm_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 3; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(3)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .cm_stride(7)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, a_offset) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(3)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(3)
-      .n(4)
-      .k(k)
-      .ks(3)
-      .a_offset(17)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, zero) {
-  for (uint32_t mz = 0; mz < 3; mz++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(3)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(3)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .a_offset(17)
-        .zero_index(mz)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, qmin) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(4)
-    .k(1)
-    .qmin(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, qmax) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(4)
-    .k(1)
-    .qmax(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, strided_cm) {
-  GemmMicrokernelTester()
-    .mr(3)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(3)
-    .n(4)
-    .k(1)
-    .cm_stride(7)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_eq_1) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(4)
-    .k(1)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, strided_cn) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(4)
-    .k(1)
-    .cn_stride(7)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_eq_1_subtile) {
-  for (uint32_t m = 1; m <= 4; m++) {
-    for (uint32_t n = 1; n <= 4; n++) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(m)
-        .n(n)
-        .k(1)
-        .iterations(1)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_eq_1_subtile_m) {
-  for (uint32_t m = 1; m <= 4; m++) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(m)
-      .n(4)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_eq_1_subtile_n) {
-  for (uint32_t n = 1; n <= 4; n++) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(4)
-      .n(n)
-      .k(1)
-      .iterations(1)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_gt_1) {
-  for (size_t k = 2; k < 10; k++) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(4)
-      .n(4)
-      .k(k)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_gt_1_subtile) {
-  for (size_t k = 2; k < 10; k++) {
-    for (uint32_t m = 1; m <= 4; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_gt_4) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(4)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_gt_4_strided_cn) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(4)
-        .k(k)
-        .cn_stride(7)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_gt_4_subtile) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 4; m++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_div_4) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(4)
-        .k(k)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_div_4_strided_cn) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(n)
-        .k(k)
-        .cn_stride(7)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_div_4_subtile) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      for (uint32_t m = 1; m <= 4; m++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, small_kernel) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(4)
-      .n(4)
-      .k(k)
-      .ks(3)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, small_kernel_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 4; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .ks(3)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_gt_4_small_kernel) {
-  for (uint32_t n = 5; n < 8; n++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_div_4_small_kernel) {
-  for (uint32_t n = 8; n <= 12; n += 4) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, strided_cm_subtile) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    for (uint32_t m = 1; m <= 4; m++) {
-      for (uint32_t n = 1; n <= 4; n++) {
-        GemmMicrokernelTester()
-          .mr(4)
-          .nr(4)
-          .kr(1)
-          .sr(1)
-          .m(m)
-          .n(n)
-          .k(k)
-          .cm_stride(7)
-          .iterations(1)
-          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-      }
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, a_offset) {
-  for (size_t k = 1; k <= 5; k += 2) {
-    GemmMicrokernelTester()
-      .mr(4)
-      .nr(4)
-      .kr(1)
-      .sr(1)
-      .m(4)
-      .n(4)
-      .k(k)
-      .ks(3)
-      .a_offset(23)
-      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, zero) {
-  for (uint32_t mz = 0; mz < 4; mz++) {
-    for (size_t k = 1; k <= 5; k += 2) {
-      GemmMicrokernelTester()
-        .mr(4)
-        .nr(4)
-        .kr(1)
-        .sr(1)
-        .m(4)
-        .n(4)
-        .k(k)
-        .ks(3)
-        .a_offset(23)
-        .zero_index(mz)
-        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-    }
-  }
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, qmin) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(4)
-    .k(1)
-    .qmin(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, qmax) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(4)
-    .k(1)
-    .qmax(128)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, strided_cm) {
-  GemmMicrokernelTester()
-    .mr(4)
-    .nr(4)
-    .kr(1)
-    .sr(1)
-    .m(4)
-    .n(4)
-    .k(1)
-    .cm_stride(7)
-    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
-}
-
-
 TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_FMAGIC, k_eq_1) {
   GemmMicrokernelTester()
     .mr(1)
@@ -80995,3 +78011,5971 @@
     .cm_stride(7)
     .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_fmagic, xnn_init_qs8_minmax_scalar_fmagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
 }
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .cn_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 1; m++) {
+    for (uint32_t n = 1; n <= 2; n++) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 1; m++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(2)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 2; n++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(2)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, n_gt_2) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, n_gt_2_strided_cn) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, n_gt_2_subtile) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 1; m++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, n_div_2) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, n_div_2_strided_cn) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(n)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, n_div_2_subtile) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 1; m++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, n_gt_2_small_kernel) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, n_div_2_small_kernel) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(5)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .a_offset(7)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, zero) {
+  for (uint32_t mz = 0; mz < 1; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .a_offset(7)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, qmin) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, qmax) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_IMAGIC, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .cm_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .cn_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 2; m++) {
+    for (uint32_t n = 1; n <= 2; n++) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 2; m++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(2)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 2; n++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(2)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, n_gt_2) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, n_gt_2_strided_cn) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, n_gt_2_subtile) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 2; m++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, n_div_2) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, n_div_2_strided_cn) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(n)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, n_div_2_subtile) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 2; m++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, n_gt_2_small_kernel) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, n_div_2_small_kernel) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(5)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .a_offset(13)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, zero) {
+  for (uint32_t mz = 0; mz < 2; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .a_offset(13)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, qmin) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, qmax) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_IMAGIC, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .cm_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .cn_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 3; m++) {
+    for (uint32_t n = 1; n <= 2; n++) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 3; m++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(2)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 2; n++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(2)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, n_gt_2) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, n_gt_2_strided_cn) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, n_gt_2_subtile) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 3; m++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, n_div_2) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, n_div_2_strided_cn) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(n)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, n_div_2_subtile) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 3; m++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, n_gt_2_small_kernel) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, n_div_2_small_kernel) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(5)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .a_offset(17)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, zero) {
+  for (uint32_t mz = 0; mz < 3; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .a_offset(17)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, qmin) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, qmax) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_IMAGIC, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .cm_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .cn_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 4; m++) {
+    for (uint32_t n = 1; n <= 2; n++) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 4; m++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(2)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 2; n++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(2)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, n_gt_2) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, n_gt_2_strided_cn) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, n_gt_2_subtile) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 4; m++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, n_div_2) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, n_div_2_strided_cn) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(n)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, n_div_2_subtile) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 4; m++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, n_gt_2_small_kernel) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, n_div_2_small_kernel) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(5)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .a_offset(23)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, zero) {
+  for (uint32_t mz = 0; mz < 4; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .a_offset(23)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, qmin) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, qmax) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_IMAGIC, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .cm_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .cn_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 1; m++) {
+    for (uint32_t n = 1; n <= 4; n++) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 1; m++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(4)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 4; n++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(4)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, n_gt_4) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, n_gt_4_strided_cn) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, n_gt_4_subtile) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 1; m++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, n_div_4) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, n_div_4_strided_cn) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(n)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, n_div_4_subtile) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 1; m++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, n_gt_4_small_kernel) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, n_div_4_small_kernel) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(7)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .a_offset(7)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, zero) {
+  for (uint32_t mz = 0; mz < 1; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .a_offset(7)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, qmin) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, qmax) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_IMAGIC, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .cm_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .cn_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 2; m++) {
+    for (uint32_t n = 1; n <= 4; n++) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 2; m++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(4)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 4; n++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(4)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, n_gt_4) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, n_gt_4_strided_cn) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, n_gt_4_subtile) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 2; m++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, n_div_4) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, n_div_4_strided_cn) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(n)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, n_div_4_subtile) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 2; m++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, n_gt_4_small_kernel) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, n_div_4_small_kernel) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(7)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .a_offset(13)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, zero) {
+  for (uint32_t mz = 0; mz < 2; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .a_offset(13)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, qmin) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, qmax) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_IMAGIC, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .cm_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .cn_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 3; m++) {
+    for (uint32_t n = 1; n <= 4; n++) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 3; m++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(4)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 4; n++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(4)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, n_gt_4) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, n_gt_4_strided_cn) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, n_gt_4_subtile) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 3; m++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, n_div_4) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, n_div_4_strided_cn) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(n)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, n_div_4_subtile) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 3; m++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, n_gt_4_small_kernel) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, n_div_4_small_kernel) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(7)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .a_offset(17)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, zero) {
+  for (uint32_t mz = 0; mz < 3; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .a_offset(17)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, qmin) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, qmax) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_IMAGIC, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .cm_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .cn_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 4; m++) {
+    for (uint32_t n = 1; n <= 4; n++) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 4; m++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(4)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 4; n++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(4)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, n_gt_4) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, n_gt_4_strided_cn) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, n_gt_4_subtile) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 4; m++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, n_div_4) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, n_div_4_strided_cn) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(n)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, n_div_4_subtile) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 4; m++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, n_gt_4_small_kernel) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, n_div_4_small_kernel) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(7)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .a_offset(23)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, zero) {
+  for (uint32_t mz = 0; mz < 4; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .a_offset(23)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, qmin) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, qmax) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_IMAGIC, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .cm_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_imagic, xnn_init_qs8_minmax_scalar_imagic_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .cn_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 1; m++) {
+    for (uint32_t n = 1; n <= 2; n++) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 1; m++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(2)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 2; n++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(2)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_gt_2) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_gt_2_strided_cn) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_gt_2_subtile) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 1; m++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_div_2) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_div_2_strided_cn) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(n)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_div_2_subtile) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 1; m++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_gt_2_small_kernel) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, n_div_2_small_kernel) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(5)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .a_offset(7)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, zero) {
+  for (uint32_t mz = 0; mz < 1; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .a_offset(7)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, qmin) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, qmax) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X2__SCALAR_LRINTF, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(2)
+    .k(1)
+    .cm_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .cn_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 2; m++) {
+    for (uint32_t n = 1; n <= 2; n++) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 2; m++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(2)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 2; n++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(2)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_gt_2) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_gt_2_strided_cn) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_gt_2_subtile) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 2; m++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_div_2) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_div_2_strided_cn) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(n)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_div_2_subtile) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 2; m++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_gt_2_small_kernel) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, n_div_2_small_kernel) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(5)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .a_offset(13)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, zero) {
+  for (uint32_t mz = 0; mz < 2; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .a_offset(13)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, qmin) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, qmax) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X2__SCALAR_LRINTF, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(2)
+    .k(1)
+    .cm_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .cn_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 3; m++) {
+    for (uint32_t n = 1; n <= 2; n++) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 3; m++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(2)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 2; n++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(2)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_gt_2) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_gt_2_strided_cn) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_gt_2_subtile) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 3; m++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_div_2) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_div_2_strided_cn) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(n)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_div_2_subtile) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 3; m++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_gt_2_small_kernel) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, n_div_2_small_kernel) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(5)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .a_offset(17)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, zero) {
+  for (uint32_t mz = 0; mz < 3; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .a_offset(17)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, qmin) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, qmax) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X2__SCALAR_LRINTF, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(2)
+    .k(1)
+    .cm_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .cn_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 4; m++) {
+    for (uint32_t n = 1; n <= 2; n++) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 4; m++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(2)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 2; n++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(2)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_gt_2) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_gt_2_strided_cn) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_gt_2_subtile) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 4; m++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_div_2) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_div_2_strided_cn) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(n)
+        .k(k)
+        .cn_stride(5)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_div_2_subtile) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 4; m++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_gt_2_small_kernel) {
+  for (uint32_t n = 3; n < 4; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, n_div_2_small_kernel) {
+  for (uint32_t n = 4; n <= 6; n += 2) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 2; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(2)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(5)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(2)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(2)
+      .k(k)
+      .ks(3)
+      .a_offset(23)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, zero) {
+  for (uint32_t mz = 0; mz < 4; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(2)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(2)
+        .k(k)
+        .ks(3)
+        .a_offset(23)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, qmin) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, qmax) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X2__SCALAR_LRINTF, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(2)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(2)
+    .k(1)
+    .cm_stride(5)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x2__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .cn_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 1; m++) {
+    for (uint32_t n = 1; n <= 4; n++) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 1; m++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(4)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 4; n++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(4)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_gt_4) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_gt_4_strided_cn) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_gt_4_subtile) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 1; m++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_div_4) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_div_4_strided_cn) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(n)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_div_4_subtile) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 1; m++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_gt_4_small_kernel) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, n_div_4_small_kernel) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 1; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(1)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(7)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(1)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(1)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .a_offset(7)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, zero) {
+  for (uint32_t mz = 0; mz < 1; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(1)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(1)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .a_offset(7)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, qmin) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, qmax) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_1X4__SCALAR_LRINTF, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(1)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(1)
+    .n(4)
+    .k(1)
+    .cm_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_1x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .cn_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 2; m++) {
+    for (uint32_t n = 1; n <= 4; n++) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 2; m++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(4)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 4; n++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(4)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_gt_4) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_gt_4_strided_cn) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_gt_4_subtile) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 2; m++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_div_4) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_div_4_strided_cn) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(n)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_div_4_subtile) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 2; m++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_gt_4_small_kernel) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, n_div_4_small_kernel) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 2; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(2)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(7)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(2)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(2)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .a_offset(13)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, zero) {
+  for (uint32_t mz = 0; mz < 2; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(2)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(2)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .a_offset(13)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, qmin) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, qmax) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_2X4__SCALAR_LRINTF, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(2)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(2)
+    .n(4)
+    .k(1)
+    .cm_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_2x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .cn_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 3; m++) {
+    for (uint32_t n = 1; n <= 4; n++) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 3; m++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(4)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 4; n++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(4)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_gt_4) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_gt_4_strided_cn) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_gt_4_subtile) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 3; m++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_div_4) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_div_4_strided_cn) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(n)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_div_4_subtile) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 3; m++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_gt_4_small_kernel) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, n_div_4_small_kernel) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 3; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(3)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(7)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(3)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(3)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .a_offset(17)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, zero) {
+  for (uint32_t mz = 0; mz < 3; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(3)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(3)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .a_offset(17)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, qmin) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, qmax) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_3X4__SCALAR_LRINTF, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(3)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(3)
+    .n(4)
+    .k(1)
+    .cm_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_3x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_eq_1) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, strided_cn) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .cn_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_eq_1_subtile) {
+  for (uint32_t m = 1; m <= 4; m++) {
+    for (uint32_t n = 1; n <= 4; n++) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(m)
+        .n(n)
+        .k(1)
+        .iterations(1)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_eq_1_subtile_m) {
+  for (uint32_t m = 1; m <= 4; m++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(m)
+      .n(4)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_eq_1_subtile_n) {
+  for (uint32_t n = 1; n <= 4; n++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(n)
+      .k(1)
+      .iterations(1)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_gt_1) {
+  for (size_t k = 2; k < 10; k++) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(4)
+      .k(k)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, k_gt_1_subtile) {
+  for (size_t k = 2; k < 10; k++) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_gt_4) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_gt_4_strided_cn) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_gt_4_subtile) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 4; m++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_div_4) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_div_4_strided_cn) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(n)
+        .k(k)
+        .cn_stride(7)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_div_4_subtile) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      for (uint32_t m = 1; m <= 4; m++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, small_kernel) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, small_kernel_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .ks(3)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_gt_4_small_kernel) {
+  for (uint32_t n = 5; n < 8; n++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, n_div_4_small_kernel) {
+  for (uint32_t n = 8; n <= 12; n += 4) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, strided_cm_subtile) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    for (uint32_t m = 1; m <= 4; m++) {
+      for (uint32_t n = 1; n <= 4; n++) {
+        GemmMicrokernelTester()
+          .mr(4)
+          .nr(4)
+          .kr(1)
+          .sr(1)
+          .m(m)
+          .n(n)
+          .k(k)
+          .cm_stride(7)
+          .iterations(1)
+          .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+      }
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, a_offset) {
+  for (size_t k = 1; k <= 5; k += 2) {
+    GemmMicrokernelTester()
+      .mr(4)
+      .nr(4)
+      .kr(1)
+      .sr(1)
+      .m(4)
+      .n(4)
+      .k(k)
+      .ks(3)
+      .a_offset(23)
+      .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, zero) {
+  for (uint32_t mz = 0; mz < 4; mz++) {
+    for (size_t k = 1; k <= 5; k += 2) {
+      GemmMicrokernelTester()
+        .mr(4)
+        .nr(4)
+        .kr(1)
+        .sr(1)
+        .m(4)
+        .n(4)
+        .k(k)
+        .ks(3)
+        .a_offset(23)
+        .zero_index(mz)
+        .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+    }
+  }
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, qmin) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .qmin(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, qmax) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .qmax(128)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}
+
+TEST(QC8_IGEMM_MINMAX_FP32_4X4__SCALAR_LRINTF, strided_cm) {
+  GemmMicrokernelTester()
+    .mr(4)
+    .nr(4)
+    .kr(1)
+    .sr(1)
+    .m(4)
+    .n(4)
+    .k(1)
+    .cm_stride(7)
+    .Test(xnn_qc8_igemm_minmax_fp32_ukernel_4x4__scalar_lrintf, xnn_init_qs8_minmax_scalar_lrintf_params, xnn_init_qs8_requantization_fp32_params, xnn_qs8_requantize_fp32);
+}