From 5d580faec02bcef56164587accb5fd88a3e80d86 Mon Sep 17 00:00:00 2001 From: Tai Ly Date: Fri, 15 Dec 2023 20:34:51 +0000 Subject: [serialization_lib] Add tosa shape ops Added tosa shape ops to tosa.fbs also added convert I64 to and from U8 for storing const_shape data values Signed-off-by: Tai Ly Change-Id: I1e938dec7398fbcbe5be657dad65cdd61af5b597 --- src/tosa_serialization_handler.cpp | 50 +++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/tosa_serialization_handler.cpp b/src/tosa_serialization_handler.cpp index 015dda4..453670f 100644 --- a/src/tosa_serialization_handler.cpp +++ b/src/tosa_serialization_handler.cpp @@ -1,5 +1,5 @@ -// Copyright (c) 2020-2023, ARM Limited. +// Copyright (c) 2020-2024, ARM Limited. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -777,6 +777,25 @@ tosa_err_t TosaSerializationHandler::ConvertF32toU8(const std::vector& in return TOSA_OK; } +tosa_err_t TosaSerializationHandler::ConvertI64toU8(const std::vector& in, std::vector& out) +{ + out.clear(); + for (auto val : in) + { + uint64_t* val_u64 = reinterpret_cast(&val); + out.push_back(*val_u64 & 0xFF); + out.push_back((*val_u64 >> 8) & 0xFF); + out.push_back((*val_u64 >> 16) & 0xFF); + out.push_back((*val_u64 >> 24) & 0xFF); + out.push_back((*val_u64 >> 32) & 0xFF); + out.push_back((*val_u64 >> 40) & 0xFF); + out.push_back((*val_u64 >> 48) & 0xFF); + out.push_back((*val_u64 >> 56) & 0xFF); + } + ForceAlignTensorData(out); + return TOSA_OK; +} + tosa_err_t TosaSerializationHandler::ConvertI48toU8(const std::vector& in, std::vector& out) { out.clear(); @@ -926,6 +945,35 @@ tosa_err_t return TOSA_OK; } +tosa_err_t TosaSerializationHandler::ConvertU8toI64(const std::vector& in, + uint32_t out_size, + std::vector& out) +{ + out.clear(); + if (in.size() < out_size * sizeof(int64_t)) + { + printf("TosaSerializationHandler::ConvertU8toI64(): uint8 buffer size %ld must >= target size %ld\n", in.size(), + out_size * sizeof(int64_t)); + return TOSA_USER_ERROR; + } + for (uint32_t i = 0; i < out_size; i++) + { + uint64_t byte0 = in[i * sizeof(int64_t)]; + uint64_t byte1 = in[i * sizeof(int64_t) + 1]; + uint64_t byte2 = in[i * sizeof(int64_t) + 2]; + uint64_t byte3 = in[i * sizeof(int64_t) + 3]; + uint64_t byte4 = in[i * sizeof(int64_t) + 4]; + uint64_t byte5 = in[i * sizeof(int64_t) + 5]; + uint64_t byte6 = in[i * sizeof(int64_t) + 6]; + uint64_t byte7 = in[i * sizeof(int64_t) + 7]; + uint64_t val_u64 = byte0 + (byte1 << 8) + (byte2 << 16) + (byte3 << 24) + (byte4 << 32) + (byte5 << 40) + + (byte6 << 48) + (byte7 << 56); + int64_t* val_i64 = reinterpret_cast(&val_u64); + out.push_back(*val_i64); + } + return TOSA_OK; +} + tosa_err_t TosaSerializationHandler::ConvertU8toI48(const std::vector& in, uint32_t out_size, std::vector& out) -- cgit v1.2.1