COMPMID-2269: Implement POW operator for NEON

Change-Id: I7135f665d89da3c24c9bbe00e991a64713a41d0e
Signed-off-by: Usama Arif <usama.arif@arm.com>
Reviewed-on: https://review.mlplatform.org/c/1128
Reviewed-by: Michalis Spyrou <michalis.spyrou@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
diff --git a/arm_compute/core/NEON/kernels/NEElementwiseOperationKernel.h b/arm_compute/core/NEON/kernels/NEElementwiseOperationKernel.h
index 351b346..195fd89 100644
--- a/arm_compute/core/NEON/kernels/NEElementwiseOperationKernel.h
+++ b/arm_compute/core/NEON/kernels/NEElementwiseOperationKernel.h
@@ -151,6 +151,35 @@
     static Status validate_arguments(const ITensorInfo &input1, const ITensorInfo &input2, const ITensorInfo &output);
 };
 
+class NEPowerOperationKernel : public NEArithmeticOperationKernel
+{
+public:
+    /** Default constructor */
+    NEPowerOperationKernel() = default;
+
+    /** Static function to check if given info will lead to a valid configuration of @ref NEArithmeticOperationKernel
+     *
+     * @param[in]  input1 First tensor input. Data types supported: F16/F32.
+     * @param[in]  input2 Second tensor input. Data types supported: Same as @p input1.
+     * @param[out] output Output tensor. Data types supported: Same as @p input1.
+     */
+    void configure(const ITensor *input1, const ITensor *input2, ITensor *output);
+
+    /** Static function to check if given info will lead to a valid configuration of @ref NEArithmeticOperationKernel
+     *
+     * @param[in]  input1 First tensor input info. Data types supported: F16/F32.
+     * @param[in]  input2 Second tensor input info. Data types supported: Same as @p input1.
+     * @param[out] output Output tensor info. Data types supported: Same as @p input1.
+     *
+     * @return a Status
+     */
+    static Status validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output);
+
+protected:
+    // Inherited methods overridden:
+    static Status validate_arguments(const ITensorInfo &input1, const ITensorInfo &input2, const ITensorInfo &output);
+};
+
 class NEComparisonOperationKernel : public NEElementwiseOperationKernel
 {
 public:
diff --git a/arm_compute/core/Types.h b/arm_compute/core/Types.h
index 9ecd7ff..99ec44d 100644
--- a/arm_compute/core/Types.h
+++ b/arm_compute/core/Types.h
@@ -571,6 +571,7 @@
     MIN,          /**< Min(x, y) */
     MAX,          /**< Max(x, y) */
     SQUARED_DIFF, /**< (x - y)^2 */
+    POWER,        /**< x ^ y */
 };
 
 /** Available element wise unary operations */