Update ConvertU8toF16 to save outputs in F16 containers

- If we save FP16 in FP32 containers, it will change byte representation
- which causes wrong values after deserialization
- Update the code to store F16 values in F16 containers

Signed-off-by: Jerry Ge <jerry.ge@arm.com>
Change-Id: I2ddea67471997c596980faea1419422d96bad60d
diff --git a/include/tosa_serialization_handler.h b/include/tosa_serialization_handler.h
index f50d7ad..5c53f57 100644
--- a/include/tosa_serialization_handler.h
+++ b/include/tosa_serialization_handler.h
@@ -421,7 +421,8 @@
     static tosa_err_t ConvertI4toU8(const std::vector<int8_t>& in, std::vector<uint8_t>& out);
     static tosa_err_t ConvertBooltoU8(const std::vector<bool>& in, std::vector<uint8_t>& out);
 
-    static tosa_err_t ConvertU8toF16(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<float>& out);
+    static tosa_err_t
+        ConvertU8toF16(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<half_float::half>& out);
     static tosa_err_t ConvertU8toF32(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<float>& out);
     static tosa_err_t ConvertU8toI64(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<int64_t>& out);
     static tosa_err_t ConvertU8toI48(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<int64_t>& out);
diff --git a/src/tosa_serialization_handler.cpp b/src/tosa_serialization_handler.cpp
index 453670f..749a3c8 100644
--- a/src/tosa_serialization_handler.cpp
+++ b/src/tosa_serialization_handler.cpp
@@ -896,8 +896,9 @@
     return TOSA_OK;
 }
 
-tosa_err_t
-    TosaSerializationHandler::ConvertU8toF16(const std::vector<uint8_t>& in, uint32_t out_size, std::vector<float>& out)
+tosa_err_t TosaSerializationHandler::ConvertU8toF16(const std::vector<uint8_t>& in,
+                                                    uint32_t out_size,
+                                                    std::vector<half_float::half>& out)
 {
     // Note: fp16 values returned in fp32 type
     out.clear();
@@ -916,8 +917,7 @@
 
         // Reinterpret u16 byte as fp16 then convert to fp32
         half_float::half val_f16 = *(half_float::half*)&val_u16;
-        float val_fp32           = half_float::half_cast<float, half_float::half>(val_f16);
-        out.push_back(val_fp32);
+        out.push_back(val_f16);
     }
     return TOSA_OK;
 }