// File: gemm.h
#pragma once
#include <cstdint>

// Harness contract for the llama.cpp (ggml) gemm baseline.
// Called by armbench_entry_gemm (binding.cpp); implemented by kernel.cpp.
// A is row-major [M, K], B is row-major [N, K], C = A . B^T row-major [M, N].
// A is bf16 (raw uint16 bit pattern, one value per K element -- NOT
// block-quantized; weight-only Q4_K design keeps activations at the bf16
// baseline tier). B is a ggml block_q4_K row: (K/256) 144-byte blocks per
// row, {fp16 d; fp16 dmin; uint8 scales[12]; uint8 qs[128]} (repacked by the
// Python adapter from the flat nibble/scale/min Definition tensors).
int armbench_llamacpp_gemm(const void* A, const void* B, float* C,
                           int64_t M, int64_t N, int64_t K);