# 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.

# AVX512AMX
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x64c4__avx512amx
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 64
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x64c4__avx512amx
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 64
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_16x64c4__avx512amx
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 64
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_16x64c4__avx512amx_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 64

# ARM NEONI8MM
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x16c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x32c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x8c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x16c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x32c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x8c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x16c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x32c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x8c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x16c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x32c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x8c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x16c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x32c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_6x8c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_6x16c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_6x32c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x8c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x16c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x32c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_8x8c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_8x16c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_8x32c8__neoni8mm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16

# ARM NEONDOT
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x16c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x8c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x16c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x8c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x16c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x8c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x16c4__asm_aarch64_neondotfp16arith_cortex_a55
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x16c4__asm_aarch64_neondotfp16arith_ld128
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x16c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x8c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x16c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_6x8c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_6x16c4__neondotfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 4

# ARM NEON
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c2s4__neonfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x8c2s4__neonfp16arith
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16

# AArch32 assembly
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x8c4__asm_aarch32_neondotfp16arith_cortex_a55
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8__asm_aarch32_neonfp16arith_ld64_2
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x8__asm_aarch32_neonfp16arith_ld64_2
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x8__asm_aarch32_neonfp16arith_ld64_2
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x8__asm_aarch32_neonfp16arith_ld64_2
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8

# x86 AVX256 VNNI
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c8__avx256vnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x8c8__avx256vnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x8c8__avx256vnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_8x8c8__avx256vnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_9x8c8__avx256vnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_10x8c8__avx256vnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_12x8c8__avx256vnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_14x8c8__avx256vnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c8__avx256vnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x8c8__avx256vnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x8c8__avx256vnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_8x8c8__avx256vnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_9x8c8__avx256vnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_10x8c8__avx256vnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_12x8c8__avx256vnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_14x8c8__avx256vnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

# AVXVNNI
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c8__avxvnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x8c8__avxvnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x8c8__avxvnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x8c8__avxvnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x8c8__avxvnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_6x8c8__avxvnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x8c8__avxvnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_8x8c8__avxvnni
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c8__avxvnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x8c8__avxvnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x8c8__avxvnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x8c8__avxvnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x8c8__avxvnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_6x8c8__avxvnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x8c8__avxvnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_8x8c8__avxvnni_prfm
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 16
  unsigned-inputs: True

# x86 AVX2
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c8__avx2
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_2x8c8__avx2
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_3x8c8__avx2
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_4x8c8__avx2
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8

# x86 AVX256SKX
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_1x8c8__avx256skx
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_5x8c8__avx256skx
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_7x8c8__avx256skx
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
- name: xnn_qd8_f16_qc8w_gemm_minmax_ukernel_8x8c8__avx256skx
  init: xnn_init_f16_minmax_scalar_params
  pack: xnn_pack_qs8_gemm_goi_w
  k-block: 8
