FP32 requantization in QS8 GEMM/IGEMM microkernels for SSE/AVX/XOP

PiperOrigin-RevId: 376966195
diff --git a/test/qs8-igemm-minmax-fp32.yaml b/test/qs8-igemm-minmax-fp32.yaml
index 280ad4f..2c64ba6 100644
--- a/test/qs8-igemm-minmax-fp32.yaml
+++ b/test/qs8-igemm-minmax-fp32.yaml
@@ -3,6 +3,216 @@
 # This source code is licensed under the BSD-style license found in the
 # LICENSE file in the root directory of this source tree.
 
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__sse2_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__sse2_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__sse2_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__sse2_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__ssse3_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__ssse3_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__ssse3_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__ssse3_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__sse41_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__sse41_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__sse41_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__sse41_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__avx_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__avx_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__avx_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__avx_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__xop_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__xop_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__xop_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__xop_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__sse2_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__sse2_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__sse2_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__sse2_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__ssse3_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__ssse3_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__ssse3_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__ssse3_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__sse41_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__sse41_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__sse41_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__sse41_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__avx_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__avx_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__avx_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__avx_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c2__xop_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c2__xop_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c2__xop_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_4x4c2__xop_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__sse2_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__sse2_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__sse2_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__ssse3_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__ssse3_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__ssse3_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__sse41_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__sse41_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__sse41_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__avx_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__avx_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__avx_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__xop_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__xop_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__xop_ld64
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__sse2_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__sse2_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__sse2_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__ssse3_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__ssse3_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__ssse3_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse2_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__sse41_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__sse41_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__sse41_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__avx_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__avx_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__avx_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_1x4c8__xop_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_2x4c8__xop_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
+- name: xnn_qs8_gemm_minmax_fp32_ukernel_3x4c8__xop_ld128
+  init: xnn_init_qs8_conv_minmax_fp32_sse4_params
+  k-block: 8
 - name: xnn_qs8_igemm_minmax_fp32_ukernel_1x8c8__avx2
   init: xnn_init_qs8_conv_minmax_fp32_avx2_params
   k-block: 8