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

# AArch64 assembly
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neon_ld128_acc2
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neon_ld128_acc2_prfm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld64_acc2
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld64_acc2_prfm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld64_acc4
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld64_acc4_prfm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld64_prfm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld128_acc2
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld128_acc2_prfm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld128_acc4
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld128_acc4_prfm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__asm_aarch64_neonfma_ld128_prfm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x1__asm_aarch64_neonfma_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x1__asm_aarch64_neonfma_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2__asm_aarch64_neonfma_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2__asm_aarch64_neonfma_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__asm_aarch64_neonfma_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__asm_aarch64_neonfma_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__asm_aarch64_neonfma_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__asm_aarch64_neonfma_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
# ARM NEON
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__aarch64_neonfma_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__aarch64_neonfma_lane_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__neon_dup_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__neon_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__neonfma_dup_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x16__aarch64_neonfma_lane_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2__aarch64_neonfma_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2__neon_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__aarch64_neonfma_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__aarch64_neonfma_lane_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__neon_dup_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__neon_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__neonfma_dup_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x16__aarch64_neonfma_lane_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__aarch64_neonfma_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__neon_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x2__aarch64_neonfma_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x2__neon_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__aarch64_neonfma_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__aarch64_neonfma_lane_ld128
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__neon_dup_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__neon_lane_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__neonfma_dup_ld64
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 2

# ARM NEON Shuffle
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8s4__neonfma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8s4__neonfma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8s4__neonfma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4

# x86 SSE4.1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__sse41_dup
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__sse41_load1
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8s4__sse41
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__sse41_dup
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__sse41_load1
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8s4__sse41
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2c4__sse41
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__sse41_dup
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__sse41_load1
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8s4__sse41
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__sse41_dup
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__sse41_load1
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8s4__sse41
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__sse41_dup
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__sse41_load1
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8s4__sse41
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
# x86 AVX
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x16__avx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_2x16__avx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x16__avx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x16__avx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x16__avx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x16__avx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_7x16__avx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_8x16__avx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1

- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x16__fma3_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_2x16__fma3_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x16__fma3_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x16__fma3_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x16__fma3_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x16__fma3_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_7x16__fma3_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_8x16__fma3_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1

# x86 AVX2
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x16s4__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_2x16s4__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x16s4__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x16s4__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x16s4__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x16s4__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_7x8__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_8x8__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1

- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x16__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_2x16__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x16__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x16__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x16__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x16__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_7x16__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_8x16__avx2_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1

# x86 AVX512
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x16__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x32__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_2x16__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_2x32__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x16__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x32__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x16__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x32__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x16__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x32__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x16__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x32__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_7x16__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_7x32__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_8x16__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_8x32__avx512skx_broadcast
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
# WAsm SIMD
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__wasmsimd_arm_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__wasmsimd_arm_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__wasmsimd_x86_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__wasmsimd_x86_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8s4__wasmsimd_arm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8s4__wasmsimd_x86
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__wasmsimd_arm_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__wasmsimd_arm_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__wasmsimd_x86_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__wasmsimd_x86_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8s4__wasmsimd_arm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8s4__wasmsimd_x86
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2c4__wasmsimd_arm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2c4__wasmsimd_x86
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__wasmsimd_arm_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__wasmsimd_arm_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__wasmsimd_x86_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__wasmsimd_x86_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8s4__wasmsimd_arm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8s4__wasmsimd_x86
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__wasmsimd_arm_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__wasmsimd_arm_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__wasmsimd_x86_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__wasmsimd_x86_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8s4__wasmsimd_arm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8s4__wasmsimd_x86
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__wasmsimd_arm_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__wasmsimd_arm_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__wasmsimd_x86_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__wasmsimd_x86_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8s4__wasmsimd_arm
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8s4__wasmsimd_x86
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
# WAsm Relaxed SIMD
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__wasmrelaxedsimd_fma_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__wasmrelaxedsimd_fma_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__wasmrelaxedsimd_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8__wasmrelaxedsimd_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8s4__wasmrelaxedsimd
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x8s4__wasmrelaxedsimd_fma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__wasmrelaxedsimd_fma_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__wasmrelaxedsimd_fma_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__wasmrelaxedsimd_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8__wasmrelaxedsimd_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8s4__wasmrelaxedsimd
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_3x8s4__wasmrelaxedsimd_fma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2c4__wasmrelaxedsimd
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2c4__wasmrelaxedsimd_fma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__wasmrelaxedsimd_fma_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__wasmrelaxedsimd_fma_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__wasmrelaxedsimd_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8__wasmrelaxedsimd_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8s4__wasmrelaxedsimd
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x8s4__wasmrelaxedsimd_fma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__wasmrelaxedsimd_fma_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__wasmrelaxedsimd_fma_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__wasmrelaxedsimd_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8__wasmrelaxedsimd_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8s4__wasmrelaxedsimd
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_5x8s4__wasmrelaxedsimd_fma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__wasmrelaxedsimd_fma_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__wasmrelaxedsimd_fma_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__wasmrelaxedsimd_loadsplat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8__wasmrelaxedsimd_splat
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8s4__wasmrelaxedsimd
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
- name: xnn_f32_qc8w_gemm_minmax_ukernel_6x8s4__wasmrelaxedsimd_fma
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 4
# Scalar
- name: xnn_f32_qc8w_gemm_minmax_ukernel_1x4__scalar
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_2x4__scalar
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x2__scalar
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
- name: xnn_f32_qc8w_gemm_minmax_ukernel_4x4__scalar
  init: xnn_init_f32_minmax_scalar_params
  pack: xnn_pack_f32_qs8w_gemm_goi_w
  k-block: 1
