diff --git a/arm_compute/core/QuantizationInfo.h b/arm_compute/core/QuantizationInfo.h
index ddf1342..98ceec6 100644
--- a/arm_compute/core/QuantizationInfo.h
+++ b/arm_compute/core/QuantizationInfo.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019-2022 Arm Limited.
+ * Copyright (c) 2019-2023 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -430,6 +430,17 @@
     return tmp;
 }
 
+inline qasymm8_signed_t qasymm8_signed_leaky_relu(qasymm8_signed_t               in,
+                                                  const UniformQuantizationInfo &qi_in,
+                                                  const UniformQuantizationInfo &qi_out,
+                                                  float                          alpha)
+{
+    float tmp_f         = dequantize_qasymm8_signed(in, qi_in);
+    tmp_f               = tmp_f > 0 ? tmp_f : tmp_f * alpha;
+    const qasymm8_t tmp = quantize_qasymm8_signed(tmp_f, qi_out);
+    return tmp;
+}
+
 inline qasymm8_t qasymm8_logistic(qasymm8_t                      in,
                                   const UniformQuantizationInfo &qi_in,
                                   const UniformQuantizationInfo &qi_out)
diff --git a/arm_compute/core/Types.h b/arm_compute/core/Types.h
index fd45bba..09b77b5 100644
--- a/arm_compute/core/Types.h
+++ b/arm_compute/core/Types.h
@@ -1737,7 +1737,14 @@
         }
         else if(_act == ActivationFunction::LEAKY_RELU)
         {
-            qasymm8_leaky_relu_populate_table(_lut, qi_in, qi_out, _a);
+            if(data_type == DataType::QASYMM8)
+            {
+                qasymm8_leaky_relu_populate_table(_lut, qi_in, qi_out, _a);
+            }
+            else
+            {
+                qasymm8_signed_leaky_relu_populate_table(_lut, qi_in, qi_out, _a);
+            }
         }
         else if(_act == ActivationFunction::LOGISTIC)
         {
@@ -1761,7 +1768,7 @@
             case ActivationFunction::HARD_SWISH:
                 return data_type == DataType::QASYMM8 || data_type == DataType::QASYMM8_SIGNED;
             case ActivationFunction::LEAKY_RELU:
-                return data_type == DataType::QASYMM8;
+                return data_type == DataType::QASYMM8 || data_type == DataType::QASYMM8_SIGNED;
             case ActivationFunction::LOGISTIC:
                 return data_type == DataType::QASYMM8 || data_type == DataType::QASYMM8_SIGNED;
             default:
@@ -1807,6 +1814,14 @@
         }
     }
 
+    static inline void qasymm8_signed_leaky_relu_populate_table(LookupTable256 &lut, const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out, float alpha)
+    {
+        for(size_t i = 0; i < lut.size(); ++i)
+        {
+            lut[i] = qasymm8_signed_leaky_relu(i, qi_in, qi_out, alpha);
+        }
+    }
+
     static inline void qasymm8_logistic_populate_table(LookupTable256 &lut, const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out)
     {
         for(size_t i = 0; i < lut.size(); ++i)
