diff --git a/src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp b/src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp
index de2e4f2..75524ff 100644
--- a/src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp
+++ b/src/core/NEON/kernels/arm_gemm/gemm_fp16.cpp
@@ -62,7 +62,7 @@
 #endif
 
 #if defined(__aarch64__) && (defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) || defined(FP16_KERNELS))
-{
+GemmImplementation<__fp16, __fp16>::with_estimate(
     GemmMethod::GEMM_HYBRID,
     "a64_hybrid_fp16_mla_6x32",
 #ifndef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
@@ -70,10 +70,10 @@
 #else
     nullptr,
 #endif
-    [](const GemmArgs &args) { return ((args._Ksize <= 256) && (args._Nsize <= 256)) || ((args._nmulti > 1) && ((args._Msize / args._maxthreads) < 8)); },
+    [](const GemmArgs &args) { return GemmHybridIndirect<cls_a64_hybrid_fp16_mla_6x32, __fp16, __fp16>::estimate_cycles(args, cls_a64_hybrid_fp16_mla_6x32::get_performance_parameters(args._ci)); },
     [](const GemmArgs &args) { return new GemmHybridIndirect<cls_a64_hybrid_fp16_mla_6x32, __fp16, __fp16>(args); }
-},
-{
+),
+GemmImplementation<__fp16, __fp16>::with_estimate(
     GemmMethod::GEMM_INTERLEAVED,
     "a64_hgemm_8x24",
 #ifndef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
@@ -81,16 +81,16 @@
 #else
     nullptr,
 #endif
-    nullptr,
+    [](const GemmArgs &args) { return GemmInterleaved<cls_a64_hgemm_8x24, __fp16, __fp16>::estimate_cycles(args, cls_a64_hgemm_8x24::get_performance_parameters(args._ci)); },
     [](const GemmArgs &args) { return new GemmInterleaved<cls_a64_hgemm_8x24, __fp16, __fp16>(args); }
-},
+),
 #endif // aarch64 && FP16
 #ifdef __aarch64__
 {
     GemmMethod::GEMM_INTERLEAVED,
     "a64_sgemm_8x12",
     nullptr,
-    nullptr,
+    [](const GemmArgs &args) { return !args._ci->has_fp16(); },
     [](const GemmArgs &args) { return new GemmInterleaved<cls_a64_sgemm_8x12, __fp16, __fp16>(args); }
 },
 #elif defined(__arm__)
diff --git a/src/core/NEON/kernels/arm_gemm/kernels/a64_hgemm_8x24.hpp b/src/core/NEON/kernels/arm_gemm/kernels/a64_hgemm_8x24.hpp
index 73fb5b7..24e258e 100644
--- a/src/core/NEON/kernels/arm_gemm/kernels/a64_hgemm_8x24.hpp
+++ b/src/core/NEON/kernels/arm_gemm/kernels/a64_hgemm_8x24.hpp
@@ -25,6 +25,7 @@
 
 #if defined(__aarch64__) && (defined(FP16_KERNELS) || defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC))
 
+#include "../performance_parameters.hpp"
 #include "../std_transforms_fixed.hpp"
 
 namespace arm_gemm {
@@ -61,6 +62,17 @@
     // Use the standard fixed size transforms.
     StdTransformsFixed<operand_type, result_type, 8, 24> transforms = {};
 
+    static PerformanceParameters get_performance_parameters(const CPUInfo *ci)
+    {
+        switch (ci->get_cpu_model()) {
+            case CPUModel::A55r1:
+                return { 7.16, 1.14, 0.67 };
+
+            default:
+                return { 12.67, 3.98, 1.16 };
+        }
+    }
+
     // Default to the generic kernel
     kern_type kernel = a64_hgemm_asimd_8x24;
 
diff --git a/src/core/NEON/kernels/arm_gemm/kernels/a64_hybrid_fp16_mla_6x32.hpp b/src/core/NEON/kernels/arm_gemm/kernels/a64_hybrid_fp16_mla_6x32.hpp
index 46de985..876b63c 100644
--- a/src/core/NEON/kernels/arm_gemm/kernels/a64_hybrid_fp16_mla_6x32.hpp
+++ b/src/core/NEON/kernels/arm_gemm/kernels/a64_hybrid_fp16_mla_6x32.hpp
@@ -71,6 +71,17 @@
 
     StdTransformsFixed<operand_type, result_type, 6, 32, 1> transforms = {};
 
+    static PerformanceParameters get_performance_parameters(const CPUInfo *ci)
+    {
+        switch (ci->get_cpu_model()) {
+            case CPUModel::A55r1:
+                return { 5.22 };
+
+            default:
+                return { 14.53 };
+        }
+    }
+
     // Default to the generic kernel
     kern_type kernel=a64_hybrid_fp16_mla_6x32;
 
diff --git a/src/core/NEON/kernels/arm_gemm/kernels/a64_hybrid_fp32_mla_6x16.hpp b/src/core/NEON/kernels/arm_gemm/kernels/a64_hybrid_fp32_mla_6x16.hpp
index e0c61e4..37d0b8f 100644
--- a/src/core/NEON/kernels/arm_gemm/kernels/a64_hybrid_fp32_mla_6x16.hpp
+++ b/src/core/NEON/kernels/arm_gemm/kernels/a64_hybrid_fp32_mla_6x16.hpp
@@ -73,7 +73,7 @@
     static PerformanceParameters get_performance_parameters(const CPUInfo *ci) {
         switch (ci->get_cpu_model()) {
             case CPUModel::A55r1:
-                return { 2.00 };
+                return { 2.287 };
 
             case CPUModel::A53:
                 return { 1.43 };
@@ -82,7 +82,7 @@
                 return { 2.56 };
 
             default:
-                return { 6.26 };
+                return { 6.667 };
         }
     }
 
diff --git a/src/core/NEON/kernels/arm_gemm/kernels/a64_sgemm_8x12.hpp b/src/core/NEON/kernels/arm_gemm/kernels/a64_sgemm_8x12.hpp
index d77e1b0..a3daf07 100644
--- a/src/core/NEON/kernels/arm_gemm/kernels/a64_sgemm_8x12.hpp
+++ b/src/core/NEON/kernels/arm_gemm/kernels/a64_sgemm_8x12.hpp
@@ -70,7 +70,7 @@
     static PerformanceParameters get_performance_parameters(const CPUInfo *ci) {
         switch (ci->get_cpu_model()) {
             case CPUModel::A55r1:
-                return { 3.724, 1.416, 1.113 };
+                return { 3.954, 1.252, 1.141 };
 
             case CPUModel::A53:
                 return { 2.777, 0.987, 0.898 };
@@ -79,7 +79,7 @@
                 return { 2.885, 1.429, 1.163 };
 
             default:
-                return { 6.949, 4.149, 2.826 };
+                return { 7.2307, 3.876, 2.932 };
         }
     }
 
