From: Samuel Iglesias Gonsálvez Date: Wed, 4 Jul 2018 10:02:30 +0000 (+0200) Subject: util: add float to float16 conversions with RTZ and RTNE X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=733ede8ff6c107ff2acb2dc6ba647d3ad2b3b6dc;p=mesa.git util: add float to float16 conversions with RTZ and RTNE In order to be coherent with the pre-existent functions, this new API is the one meant to be used when doing half float to float conversions. It is no more than a wrapper for the softfloat.h API but we meant to keep that one private. v2: - Replace custom f32 -> f16 RTZ implementation with the softfloat one (Andres). v3: - Added API usage clarifying comments (Caio). Signed-off-by: Samuel Iglesias Gonsálvez Signed-off-by: Andres Gomez Reviewed-by: Caio Marcelo de Oliveira Filho --- diff --git a/src/util/half_float.c b/src/util/half_float.c index 5ccee81f78a..aae690a56a6 100644 --- a/src/util/half_float.c +++ b/src/util/half_float.c @@ -4,6 +4,7 @@ * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * Copyright 2015 Philip Taylor * Copyright 2018 Advanced Micro Devices, Inc. + * Copyright (C) 2018-2019 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -29,6 +30,7 @@ #include "half_float.h" #include "util/u_half.h" #include "rounding.h" +#include "softfloat.h" #include "macros.h" typedef union { float f; int32_t i; uint32_t u; } fi_type; @@ -126,6 +128,11 @@ _mesa_float_to_half(float val) return result; } +uint16_t +_mesa_float_to_float16_rtz(float val) +{ + return _mesa_float_to_half_rtz(val); +} /** * Convert a 2-byte half float to a 4-byte float. diff --git a/src/util/half_float.h b/src/util/half_float.h index 01557424735..84112e57bd4 100644 --- a/src/util/half_float.h +++ b/src/util/half_float.h @@ -2,6 +2,7 @@ * Mesa 3-D graphics library * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + * Copyright (C) 2018-2019 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -40,6 +41,20 @@ float _mesa_half_to_float(uint16_t val); uint8_t _mesa_half_to_unorm8(uint16_t v); uint16_t _mesa_uint16_div_64k_to_half(uint16_t v); +/* + * _mesa_float_to_float16_rtz is no more than a wrapper to the counterpart + * softfloat.h call. Still, softfloat.h conversion API is meant to be kept + * private. In other words, only use the API published here, instead of + * calling directly the softfloat.h one. + */ +uint16_t _mesa_float_to_float16_rtz(float val); + +static inline uint16_t +_mesa_float_to_float16_rtne(float val) +{ + return _mesa_float_to_half(val); +} + static inline bool _mesa_half_is_negative(uint16_t h) {