// File: gemm_w8a8ch_contract.h
#pragma once
#include "mat.h"
#include "option.h"

// Harness contract for gemm w8a8ch (int8) baseline (C = A @ B^T, no bias).
// Called by armbench_entry_gemm (binding.cpp); implemented by kernel.cpp.
// A is a genuine 2D int8 Mat (w=K, h=M); B is flat int8 (N*K). top is
// pre-allocated 2D int8 (w=N, h=M) by binding.cpp — InnerProduct_arm's int8
// path never produces int8 output itself (only dequantizes to float32), so
// kernel.cpp does the final round+clip+cast to int8 by hand.
namespace ncnn {
int gemm_w8a8ch_kernel(
    const Mat& A, Mat& top,
    const Mat& B, const Mat& weight_scales,
    const Option& opt);
}