1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #include <armnnUtils/FloatingPointConverter.hpp> 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include "BFloat16.hpp" 9*89c4ff92SAndroid Build Coastguard Worker #include "Half.hpp" 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/Assert.hpp> 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker namespace armnnUtils 14*89c4ff92SAndroid Build Coastguard Worker { 15*89c4ff92SAndroid Build Coastguard Worker ConvertFloat32To16(const float * srcFloat32Buffer,size_t numElements,void * dstFloat16Buffer)16*89c4ff92SAndroid Build Coastguard Workervoid FloatingPointConverter::ConvertFloat32To16(const float* srcFloat32Buffer, 17*89c4ff92SAndroid Build Coastguard Worker size_t numElements, 18*89c4ff92SAndroid Build Coastguard Worker void* dstFloat16Buffer) 19*89c4ff92SAndroid Build Coastguard Worker { 20*89c4ff92SAndroid Build Coastguard Worker ARMNN_ASSERT(srcFloat32Buffer != nullptr); 21*89c4ff92SAndroid Build Coastguard Worker ARMNN_ASSERT(dstFloat16Buffer != nullptr); 22*89c4ff92SAndroid Build Coastguard Worker 23*89c4ff92SAndroid Build Coastguard Worker armnn::Half* pHalf = static_cast<armnn::Half*>(dstFloat16Buffer); 24*89c4ff92SAndroid Build Coastguard Worker 25*89c4ff92SAndroid Build Coastguard Worker for (size_t i = 0; i < numElements; i++) 26*89c4ff92SAndroid Build Coastguard Worker { 27*89c4ff92SAndroid Build Coastguard Worker pHalf[i] = armnn::Half(srcFloat32Buffer[i]); 28*89c4ff92SAndroid Build Coastguard Worker } 29*89c4ff92SAndroid Build Coastguard Worker } 30*89c4ff92SAndroid Build Coastguard Worker ConvertFloat16To32(const void * srcFloat16Buffer,size_t numElements,float * dstFloat32Buffer)31*89c4ff92SAndroid Build Coastguard Workervoid FloatingPointConverter::ConvertFloat16To32(const void* srcFloat16Buffer, 32*89c4ff92SAndroid Build Coastguard Worker size_t numElements, 33*89c4ff92SAndroid Build Coastguard Worker float* dstFloat32Buffer) 34*89c4ff92SAndroid Build Coastguard Worker { 35*89c4ff92SAndroid Build Coastguard Worker ARMNN_ASSERT(srcFloat16Buffer != nullptr); 36*89c4ff92SAndroid Build Coastguard Worker ARMNN_ASSERT(dstFloat32Buffer != nullptr); 37*89c4ff92SAndroid Build Coastguard Worker 38*89c4ff92SAndroid Build Coastguard Worker const armnn::Half* pHalf = static_cast<const armnn::Half*>(srcFloat16Buffer); 39*89c4ff92SAndroid Build Coastguard Worker 40*89c4ff92SAndroid Build Coastguard Worker for (size_t i = 0; i < numElements; i++) 41*89c4ff92SAndroid Build Coastguard Worker { 42*89c4ff92SAndroid Build Coastguard Worker dstFloat32Buffer[i] = pHalf[i]; 43*89c4ff92SAndroid Build Coastguard Worker } 44*89c4ff92SAndroid Build Coastguard Worker } 45*89c4ff92SAndroid Build Coastguard Worker 46*89c4ff92SAndroid Build Coastguard Worker } //namespace armnnUtils 47