// 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].
// For the bf16 variant, A and B are raw bf16 (uint16_t) bit patterns.
// For q8_0, A and B are ggml block_q8_0 rows: (K/32) 34-byte blocks per row,
// each block = {fp16 d; int8 qs[32]} (repacked by the Python adapter).
int armbench_llamacpp_gemm(const void* A, const void* B, float* C,
                           int64_t M, int64_t N, int64_t K, bool is_q8);