COMPMID-1381: Cleaned up the AssemblyHelper interface

Introduced a new IFunction for when we'll fork the arm_gemm functions
Increased encapsulation and abstraction of which method is used

Change-Id: I5fd8b14b5c77e7f8ecb09029b5e2eccd10dbdcf4
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/139108
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Reviewed-by: Pablo Tello <pablo.tello@arm.com>
diff --git a/arm_compute/core/NEON/kernels/assembly/NEGEMMAssemblyWrapper.h b/arm_compute/core/NEON/kernels/assembly/NEGEMMAssemblyWrapperKernel.h
similarity index 75%
rename from arm_compute/core/NEON/kernels/assembly/NEGEMMAssemblyWrapper.h
rename to arm_compute/core/NEON/kernels/assembly/NEGEMMAssemblyWrapperKernel.h
index 646cc78..9eaf606 100644
--- a/arm_compute/core/NEON/kernels/assembly/NEGEMMAssemblyWrapper.h
+++ b/arm_compute/core/NEON/kernels/assembly/NEGEMMAssemblyWrapperKernel.h
@@ -21,13 +21,15 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef __ARM_COMPUTE_ASSEMBLY_GEMM_KERNEL_WRAPPER_H__
-#define __ARM_COMPUTE_ASSEMBLY_GEMM_KERNEL_WRAPPER_H__
+#ifndef __ARM_COMPUTE_ASSEMBLY_GEMM_KERNEL_WRAPPER_KERNEL_H__
+#define __ARM_COMPUTE_ASSEMBLY_GEMM_KERNEL_WRAPPER_KERNEL_H__
 
 #include "arm_compute/core/NEON/INEKernel.h"
 #include "arm_compute/core/Validate.h"
 #include "arm_compute/core/Utils.h"
 
+#include "gemm_common.hpp"
+
 namespace arm_compute
 {
 class ITensor;
@@ -36,7 +38,7 @@
   *
   * Some kernels were written in assembly and highly optimised for specific CPUs like A53 or A55.
   * This class works as a wrapper for these assembly kernels. The arm compute library creates an instance
-  * of NEGEMMAssemblyWrapper and other auxiliary data structures to execute a single assembly kernel
+  * of NEGEMMAssemblyWrapperKernel and other auxiliary data structures to execute a single assembly kernel
   * in the context of an NEFunctions.
   *
   * The type T is the type of the actual kernel implemented in assembly which is of type
@@ -44,21 +46,21 @@
   *
   *
   */
-template<typename T>
-class NEGEMMAssemblyWrapper final : public INEKernel
+template <typename TypeInput, typename TypeOutput>
+class NEGEMMAssemblyWrapperKernel final : public INEKernel
 {
 public:
     /** Constructor
      */
-    NEGEMMAssemblyWrapper() : _kernel(nullptr) {}
+    NEGEMMAssemblyWrapperKernel() : _kernel(nullptr) {}
 
-    NEGEMMAssemblyWrapper(NEGEMMAssemblyWrapper &) = delete;
-    NEGEMMAssemblyWrapper(NEGEMMAssemblyWrapper &&) = default;
-    NEGEMMAssemblyWrapper & operator=(NEGEMMAssemblyWrapper &) = delete;
+    NEGEMMAssemblyWrapperKernel(NEGEMMAssemblyWrapperKernel &) = delete;
+    NEGEMMAssemblyWrapperKernel(NEGEMMAssemblyWrapperKernel &&) = default;
+    NEGEMMAssemblyWrapperKernel & operator=(NEGEMMAssemblyWrapperKernel &) = delete;
 
     const char *name() const override
     {
-        return "NEGEMMAssemblyWrapper";
+        return "NEGEMMAssemblyWrapperKernel";
     }
     // Inherited methods overridden:
     void run(const Window &window, const ThreadInfo &info) override
@@ -74,7 +76,7 @@
      * @param[in] kernel      Pointer to an assembly kernel implementation.
      * @param[in] num_threads Number of concurrent threads which will execute the kernel.
      */
-    void configure(T *kernel)
+    void configure(arm_gemm::GemmCommon<TypeInput, TypeOutput> *kernel)
     {
         ARM_COMPUTE_ERROR_ON_NULLPTR((reinterpret_cast<void*>(kernel)));
         _kernel = kernel;
@@ -84,8 +86,8 @@
         INEKernel::configure(win);
     }
 private:
-    T* _kernel;
+    arm_gemm::GemmCommon<TypeInput, TypeOutput>* _kernel;
 };
 
 } // namespace arm_compute
-#endif /*__ARM_COMPUTE_NEGEMMAARCH64KERNEL_H__*/
+#endif /* __ARM_COMPUTE_ASSEMBLY_GEMM_KERNEL_WRAPPER_KERNEL_H__ */