diff --git a/src/backends/reference/workloads/BaseIterator.hpp b/src/backends/reference/workloads/BaseIterator.hpp
index 5583fe7..c9fd773 100644
--- a/src/backends/reference/workloads/BaseIterator.hpp
+++ b/src/backends/reference/workloads/BaseIterator.hpp
@@ -175,6 +175,21 @@
     const float m_Scale;
 };
 
+class Int32Decoder : public TypedIterator<const int32_t, Decoder<float>>
+{
+public:
+    Int32Decoder(const int32_t* data)
+        : TypedIterator(data) {}
+
+    Int32Decoder()
+        : Int32Decoder(nullptr) {}
+
+    float Get() const override
+    {
+        return static_cast<float>(*m_Iterator);
+    }
+};
+
 class QASymm8Encoder : public TypedIterator<uint8_t, Encoder<float>>
 {
 public:
@@ -243,6 +258,26 @@
     }
 };
 
+class Int32Encoder : public TypedIterator<int32_t, Encoder<float>>
+{
+public:
+    Int32Encoder(int32_t* data)
+        : TypedIterator(data) {}
+
+    Int32Encoder()
+        : Int32Encoder(nullptr) {}
+
+    void Set(float right) override
+    {
+        *m_Iterator = static_cast<int32_t>(right);
+    }
+
+    float Get() const override
+    {
+        return static_cast<float>(*m_Iterator);
+    }
+};
+
 class BooleanEncoder : public TypedIterator<uint8_t, Encoder<bool>>
 {
 public:
diff --git a/src/backends/reference/workloads/Decoders.hpp b/src/backends/reference/workloads/Decoders.hpp
index 793e550..0101789 100644
--- a/src/backends/reference/workloads/Decoders.hpp
+++ b/src/backends/reference/workloads/Decoders.hpp
@@ -40,9 +40,13 @@
         }
         case armnn::DataType::Signed32:
         {
-            return std::make_unique<ScaledInt32Decoder>(
-                    static_cast<const int32_t*>(data),
-                    info.GetQuantizationScale());
+            const float scale = info.GetQuantizationScale();
+            if (scale == 0.f)
+            {
+                return std::make_unique<Int32Decoder>(static_cast<const int32_t*>(data));
+            }
+            // NOTE: ScaledInt32Decoder is used for quantized convolution biases
+            return std::make_unique<ScaledInt32Decoder>(static_cast<const int32_t*>(data), scale);
         }
         default:
         {
diff --git a/src/backends/reference/workloads/Encoders.hpp b/src/backends/reference/workloads/Encoders.hpp
index ed92393..f0e40d2 100644
--- a/src/backends/reference/workloads/Encoders.hpp
+++ b/src/backends/reference/workloads/Encoders.hpp
@@ -34,6 +34,10 @@
                 info.GetQuantizationScale(),
                 info.GetQuantizationOffset());
         }
+        case armnn::DataType::Signed32:
+        {
+            return std::make_unique<Int32Encoder>(static_cast<int32_t*>(data));
+        }
         case armnn::DataType::Float32:
         {
             return std::make_unique<FloatEncoder>(static_cast<float*>(data));
