IVGCVSW-3824 Implement Float 16 Encoder and Decoder

* Implement Float 16 Encoder and Decoder
* Add Stack Float 16 layer and create workload tests

Signed-off-by: Matthew Jackson <matthew.jackson@arm.com>
Change-Id: Ice4678226f4d22c06ebcc6db3052d42ce0c1bd67
diff --git a/src/backends/reference/workloads/Decoders.hpp b/src/backends/reference/workloads/Decoders.hpp
index 0101789..328a5eb 100644
--- a/src/backends/reference/workloads/Decoders.hpp
+++ b/src/backends/reference/workloads/Decoders.hpp
@@ -6,6 +6,7 @@
 #pragma once
 
 #include "BaseIterator.hpp"
+#include "FloatingPointConverter.hpp"
 
 #include <boost/assert.hpp>
 
@@ -20,25 +21,29 @@
 {
     switch(info.GetDataType())
     {
-        case armnn::DataType::QuantisedAsymm8:
+        case DataType::QuantisedAsymm8:
         {
             return std::make_unique<QASymm8Decoder>(
                 static_cast<const uint8_t*>(data),
                 info.GetQuantizationScale(),
                 info.GetQuantizationOffset());
         }
-        case armnn::DataType::QuantisedSymm16:
+        case DataType::QuantisedSymm16:
         {
             return std::make_unique<QSymm16Decoder>(
                 static_cast<const int16_t*>(data),
                 info.GetQuantizationScale(),
                 info.GetQuantizationOffset());
         }
-        case armnn::DataType::Float32:
+        case DataType::Float16:
         {
-            return std::make_unique<FloatDecoder>(static_cast<const float*>(data));
+            return std::make_unique<Float16Decoder>(static_cast<const Half*>(data));
         }
-        case armnn::DataType::Signed32:
+        case DataType::Float32:
+        {
+            return std::make_unique<Float32Decoder>(static_cast<const float*>(data));
+        }
+        case DataType::Signed32:
         {
             const float scale = info.GetQuantizationScale();
             if (scale == 0.f)