3939
4040#include " kernels.h"
4141
42- #define NELEMS (x ) sizeof (x) / sizeof (*x)
42+ #define NELEMS (x ) ( sizeof (x) / sizeof (*x) )
4343
4444template <size_t (*Fn)(size_t ,size_t ,size_t )>
4545static inline size_t kernel_offs_fn3 (size_t a, size_t b, size_t c) {
@@ -635,6 +635,7 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = {
635635 },
636636#endif
637637#endif
638+ { /* Sentinel */ 0 }
638639};
639640
640641static ggml_kleidiai_kernels gemm_gemv_kernels_q8[] = {
@@ -803,14 +804,15 @@ static ggml_kleidiai_kernels gemm_gemv_kernels_q8[] = {
803804 /* .op_type = */ GGML_TYPE_F32,
804805 },
805806#endif
807+ { /* Sentinel */ 0 }
806808};
807809
808810ggml_kleidiai_kernels * ggml_kleidiai_select_kernels (cpu_feature cpu_features, const ggml_tensor * tensor) {
809811 ggml_kleidiai_kernels * kernel = nullptr ;
810812
811813 if (tensor->op == GGML_OP_MUL_MAT && tensor->src [0 ] != nullptr && tensor->src [1 ] != nullptr ) {
812814#if defined(__ARM_FEATURE_SME) || defined(__ARM_FEATURE_DOTPROD) || defined(__ARM_FEATURE_MATMUL_INT8)
813- for (size_t i = 0 ; i < NELEMS (gemm_gemv_kernels); ++i) {
815+ for (size_t i = 0 ; i < NELEMS (gemm_gemv_kernels) - 1 ; ++i) {
814816 if ((cpu_features & gemm_gemv_kernels[i].required_cpu ) == gemm_gemv_kernels[i].required_cpu &&
815817 gemm_gemv_kernels[i].lhs_type == tensor->src [1 ]->type &&
816818 gemm_gemv_kernels[i].rhs_type == tensor->src [0 ]->type &&
@@ -820,7 +822,7 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels(cpu_feature cpu_features, c
820822 }
821823 }
822824 if (!kernel) {
823- for (size_t i = 0 ; i < NELEMS (gemm_gemv_kernels_q8); ++i) {
825+ for (size_t i = 0 ; i < NELEMS (gemm_gemv_kernels_q8) - 1 ; ++i) {
824826 if ((cpu_features & gemm_gemv_kernels_q8[i].required_cpu ) == gemm_gemv_kernels_q8[i].required_cpu &&
825827 gemm_gemv_kernels_q8[i].lhs_type == tensor->src [1 ]->type &&
826828 gemm_gemv_kernels_q8[i].rhs_type == tensor->src [0 ]->type &&
@@ -830,6 +832,10 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels(cpu_feature cpu_features, c
830832 }
831833 }
832834 }
835+ #else
836+ GGML_UNUSED (gemm_gemv_kernels);
837+ GGML_UNUSED (gemm_gemv_kernels_q8);
838+ GGML_UNUSED (cpu_features);
833839#endif
834840 }
835841
@@ -840,12 +846,14 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q4_0(cpu_feature features)
840846 ggml_kleidiai_kernels * kernels = nullptr ;
841847
842848#if defined(__ARM_FEATURE_SME) || defined(__ARM_FEATURE_DOTPROD) || defined(__ARM_FEATURE_MATMUL_INT8)
843- for (size_t i = 0 ; i < NELEMS (gemm_gemv_kernels); ++i) {
849+ for (size_t i = 0 ; i < NELEMS (gemm_gemv_kernels) - 1 ; ++i) {
844850 if ((features & gemm_gemv_kernels[i].required_cpu ) == gemm_gemv_kernels[i].required_cpu ) {
845851 kernels = &gemm_gemv_kernels[i];
846852 break ;
847853 }
848854 }
855+ #else
856+ GGML_UNUSED (features);
849857#endif
850858
851859 return kernels;
@@ -855,12 +863,14 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q8_0(cpu_feature features)
855863 ggml_kleidiai_kernels * kernels = nullptr ;
856864
857865#if defined(__ARM_FEATURE_SME) || defined(__ARM_FEATURE_DOTPROD) || defined(__ARM_FEATURE_MATMUL_INT8)
858- for (size_t i = 0 ; i < NELEMS (gemm_gemv_kernels_q8); ++i) {
866+ for (size_t i = 0 ; i < NELEMS (gemm_gemv_kernels_q8) - 1 ; ++i) {
859867 if ((features & gemm_gemv_kernels_q8[i].required_cpu ) == gemm_gemv_kernels_q8[i].required_cpu ) {
860868 kernels = &gemm_gemv_kernels_q8[i];
861869 break ;
862870 }
863871 }
872+ #else
873+ GGML_UNUSED (features);
864874#endif
865875
866876 return kernels;
0 commit comments