IVGCVSW-6469 Add MirrorPad FrontEnd and Ref Support

 * Added PaddingMode enum to PaddingDescriptor to enable Symmetric and
   Reflect padding.
 * Added Symmetric and Reflect Ref implementation.
 * Added Serializer & Deserializer support.
 * Added unit tests.

Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: I4bed907b31742b32ccefe5e8ca39a6f1e5bd9dee
diff --git a/src/backends/reference/workloads/RefPadWorkload.cpp b/src/backends/reference/workloads/RefPadWorkload.cpp
index f15306d..fd0728c 100644
--- a/src/backends/reference/workloads/RefPadWorkload.cpp
+++ b/src/backends/reference/workloads/RefPadWorkload.cpp
@@ -5,6 +5,7 @@
 
 #include "RefPadWorkload.hpp"
 
+#include "MirrorPad.hpp"
 #include "Pad.hpp"
 #include "Profiling.hpp"
 #include "RefWorkloadUtils.hpp"
@@ -29,11 +30,19 @@
     const TensorInfo& inputInfo  = GetTensorInfo(inputs[0]);
     const TensorInfo& outputInfo = GetTensorInfo(outputs[0]);
 
-    armnn::Pad(inputInfo,
-               outputInfo,
-               inputs[0],
-               outputs[0],
-               m_Data);
+    PaddingMode paddingMode = m_Data.m_Parameters.m_PaddingMode;
+    if (paddingMode == PaddingMode::Constant)
+    {
+        armnn::Pad(inputInfo, outputInfo, inputs[0], outputs[0], m_Data);
+    }
+    else if(paddingMode == PaddingMode::Reflect || paddingMode == PaddingMode::Symmetric)
+    {
+        armnn::MirrorPad(inputInfo, outputInfo, inputs[0], outputs[0], m_Data);
+    }
+    else
+    {
+        throw InvalidArgumentException("Padding mode not supported.");
+    }
 }
 
 } //namespace armnn
\ No newline at end of file