// File: moe.cpp
// Binding harness: forwards straight to inner_moe (no derived dims needed).
// ABI: armbench_entry_moe(hidden_states*, output*, router_weight*,
//   gate_proj_q4*, gate_proj_scales*, gate_proj_mins*,
//   up_proj_q4*, up_proj_scales*, up_proj_mins*,
//   down_proj_q4*, down_proj_scales*, down_proj_mins*, n_tokens)
#include "moe.h"
using namespace moe_def;

extern "C" int armbench_entry_moe(
    const uint16_t* hidden_states, float* output, const float* router_weight,
    const uint8_t* gate_proj_q4, const uint16_t* gate_proj_scales, const uint16_t* gate_proj_mins,
    const uint8_t* up_proj_q4, const uint16_t* up_proj_scales, const uint16_t* up_proj_mins,
    const uint8_t* down_proj_q4, const uint16_t* down_proj_scales, const uint16_t* down_proj_mins,
    int n_tokens)
{
    inner_moe(hidden_states, output, router_weight,
              gate_proj_q4, gate_proj_scales, gate_proj_mins,
              up_proj_q4, up_proj_scales, up_proj_mins,
              down_proj_q4, down_proj_scales, down_proj_mins,
              n_tokens);
    return 0;
}