# Copyright 2023 Google LLC
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

# AVX2 MADD
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx2_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x8c8__avx2_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x8c8__avx2_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x8c8__avx2_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx2_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x8c8__avx2_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx2_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx2_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx2_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x8c8__avx2_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x8c8__avx2_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x8c8__avx2_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx2_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x8c8__avx2_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx2_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx2_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

# AVX256SDK MADD
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx256skx_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx256skx_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx256skx_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx256skx_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_9x8c8__avx256skx_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_10x8c8__avx256skx_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_12x8c8__avx256skx_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_14x8c8__avx256skx_madd
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx256skx_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx256skx_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx256skx_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx256skx_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_9x8c8__avx256skx_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_10x8c8__avx256skx_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_12x8c8__avx256skx_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_14x8c8__avx256skx_madd_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4uw_gemm_goi_w
  k-block: 16
  unsigned-inputs: True


# ARM NEONI8MM
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x16c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x32c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x8c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x16c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x32c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x8c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x16c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x32c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x8c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x16c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x32c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x16c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x32c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x8c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x16c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x32c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x16c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x32c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x16c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x32c8__neoni8mm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16

# ARM NEONDOT
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x16c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x8c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x16c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x8c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x16c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x8c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x16c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x16c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x8c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x16c4__neondotfp16arith
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8

# ARM NEON
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x16__neonfp16arith_mlal_lane
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x16__neonfp16arith_mlal_lane_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x16__neonfp16arith_mlal_lane
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x16__neonfp16arith_mlal_lane_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x16__neonfp16arith_mlal_lane
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x16__neonfp16arith_mlal_lane_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x16__neonfp16arith_mlal_lane
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x16__neonfp16arith_mlal_lane_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x16__neonfp16arith_mlal_lane
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x16__neonfp16arith_mlal_lane_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8

# AVX256 VNNI
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx256vnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx256vnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx256vnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx256vnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_9x8c8__avx256vnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_10x8c8__avx256vnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_12x8c8__avx256vnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_14x8c8__avx256vnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx256vnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx256vnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx256vnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx256vnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_9x8c8__avx256vnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_10x8c8__avx256vnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_12x8c8__avx256vnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_14x8c8__avx256vnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

# AVX256 VNNI GFNI
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx256vnnigfni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx256vnnigfni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx256vnnigfni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx256vnnigfni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_9x8c8__avx256vnnigfni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_10x8c8__avx256vnnigfni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_12x8c8__avx256vnnigfni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_14x8c8__avx256vnnigfni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx256vnnigfni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx256vnnigfni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx256vnnigfni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx256vnnigfni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_9x8c8__avx256vnnigfni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_10x8c8__avx256vnnigfni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_12x8c8__avx256vnnigfni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_14x8c8__avx256vnnigfni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

# AVXVNNI
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avxvnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x8c8__avxvnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x8c8__avxvnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x8c8__avxvnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avxvnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x8c8__avxvnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avxvnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avxvnni
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avxvnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x8c8__avxvnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x8c8__avxvnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x8c8__avxvnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avxvnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x8c8__avxvnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avxvnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avxvnni_prfm
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

# x86 AVX2
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx2
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x8c8__avx2
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x8c8__avx2
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x8c8__avx2
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx2
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x8c8__avx2
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx2
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx2
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8

# x86 AVX256SKX
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_1x8c8__avx256skx
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_2x8c8__avx256skx
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_3x8c8__avx256skx
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_4x8c8__avx256skx
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_5x8c8__avx256skx
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_6x8c8__avx256skx
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_7x8c8__avx256skx
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc4w_gemm_minmax_ukernel_8x8c8__avx256skx
  init: xnn_init_f16_qc4w_minmax_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w
  k-block: 8
