# Copyright 2025 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_qs8_qc4w_gemm_minmax_fp32_ukernel_1x8c8__avx2_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x8c8__avx2_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x8c8__avx2_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x8c8__avx2_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x8c8__avx2_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_6x8c8__avx2_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_7x8c8__avx2_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_8x8c8__avx2_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2

- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x8c8__avx2_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x8c8__avx2_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x8c8__avx2_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x8c8__avx2_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x8c8__avx2_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_6x8c8__avx2_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_7x8c8__avx2_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_8x8c8__avx2_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2

# AVX MADD
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x4c8__avx_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x4c8__avx_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x4c8__avx_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x4c8__avx_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x4c8__avx_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_6x4c8__avx_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2

- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x4c8__avx_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x4c8__avx_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x4c8__avx_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x4c8__avx_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x4c8__avx_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_6x4c8__avx_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2

# SSSE3 MADD
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x4c8__ssse3_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x4c8__ssse3_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x4c8__ssse3_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x4c8__ssse3_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x4c8__ssse3_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_6x4c8__ssse3_madd
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2

- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x4c8__ssse3_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x4c8__ssse3_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x4c8__ssse3_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x4c8__ssse3_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x4c8__ssse3_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_6x4c8__ssse3_madd_prfm
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4uw_gemm_goi_w
  k-block: 16
  planes: 2

# AArch64 assembly
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x16c4__asm_aarch64_neondot_ld32_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64_non_planar_aarch64
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x16c4__asm_aarch64_neondot_ld32_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x16c4__asm_aarch64_neondot_ld32_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x16c4__asm_aarch64_neondot_ld32_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x16c4__asm_aarch64_neondot_ld32_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x16c4__asm_aarch64_neondot_ld64_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x16c4__asm_aarch64_neondot_ld64_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x16c4__asm_aarch64_neondot_ld64_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x16c4__asm_aarch64_neondot_ld64_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x16c4__asm_aarch64_neondot_ld64_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x16c4__asm_aarch64_neondot_ld128_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x16c4__asm_aarch64_neondot_ld128_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x16c4__asm_aarch64_neondot_ld128_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x16c4__asm_aarch64_neondot_ld128_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x16c4__asm_aarch64_neondot_ld128_2
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_neonv8_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_aarch64
  k-block: 4
  planes: 1

# x86 AVX512VNNI
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_2x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_3x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_4x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_5x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_6x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_7x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_8x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_9x16c8__asm_amd64_avx512vnni
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_to_qu8_qc4w_gemm_goi_w_non_planar_avx512
  k-block: 8
  planes: 1

# Scalar
- name: xnn_qs8_qc4w_gemm_minmax_fp32_ukernel_1x2__scalar_lrintf
  init: xnn_init_qs8_qc8w_conv_minmax_fp32_scalar_params
  pack: xnn_pack_qs8_qc4w_gemm_goi_w_non_planar_scalar
  k-block: 1
  planes: 1
