Support int4 weights read. Added conv2d int8xint4 in test generation.

Signed-off-by: Kevin Cheng <kevin.cheng@arm.com>
Change-Id: I61620f160c7dad6aac5fcc3da0a6e97f3bae5b40
diff --git a/reference_model/src/subgraph_traverser.cc b/reference_model/src/subgraph_traverser.cc
index d64cb38..bdf6fbc 100644
--- a/reference_model/src/subgraph_traverser.cc
+++ b/reference_model/src/subgraph_traverser.cc
@@ -225,7 +225,6 @@
         DEBUG_INFO(GT, "Creating tensor %s", ts->GetName().c_str());
         TosaReference::Tensor* tensor =
             TensorFactory::newTensor(ts->GetName(), ts->GetDtype(), ts->GetShape(), ts->GetShape().size());
-
         if (!ts->GetData().empty())
         {
             if (tensor->allocate())
@@ -236,6 +235,14 @@
 
             switch (ts->GetDtype())
             {
+                case DType_INT4:
+                {
+                    std::vector<int8_t> i4_data;
+                    TosaSerializationHandler::ConvertU8toI4(ts->GetData(), tensor->getElementCount(), i4_data);
+                    std::vector<int32_t> i32_data(i4_data.begin(), i4_data.end());
+                    tensor->setTensorValueInt32(i32_data.size(), i32_data.data());
+                }
+                break;
                 case DType_INT8:
                 {
                     std::vector<int8_t> i8_data;