[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 06/30] fpu/softfloat: implement float16_squash_i
From: |
Alex Bennée |
Subject: |
[Qemu-devel] [RFC PATCH 06/30] fpu/softfloat: implement float16_squash_input_denormal |
Date: |
Fri, 13 Oct 2017 17:24:14 +0100 |
This will be required when expanding the MINMAX() macro for 16
bit/half-precision operations.
Signed-off-by: Alex Bennée <address@hidden>
---
fpu/softfloat.c | 15 +++++++++++++++
include/fpu/softfloat.h | 1 +
2 files changed, 16 insertions(+)
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 433c5dad2d..3a4ab1355f 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -3488,6 +3488,21 @@ static float16 roundAndPackFloat16(flag zSign, int zExp,
return packFloat16(zSign, zExp, zSig >> 13);
}
+/*----------------------------------------------------------------------------
+| If `a' is denormal and we are in flush-to-zero mode then set the
+| input-denormal exception and return zero. Otherwise just return the value.
+*----------------------------------------------------------------------------*/
+float16 float16_squash_input_denormal(float16 a, float_status *status)
+{
+ if (status->flush_inputs_to_zero) {
+ if (extractFloat16Exp(a) == 0 && extractFloat16Frac(a) != 0) {
+ float_raise(float_flag_input_denormal, status);
+ return make_float16(float16_val(a) & 0x8000);
+ }
+ }
+ return a;
+}
+
static void normalizeFloat16Subnormal(uint32_t aSig, int *zExpPtr,
uint32_t *zSigPtr)
{
diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h
index 0f96a0edd1..d5e99667b6 100644
--- a/include/fpu/softfloat.h
+++ b/include/fpu/softfloat.h
@@ -277,6 +277,7 @@ void float_raise(uint8_t flags, float_status *status);
| If `a' is denormal and we are in flush-to-zero mode then set the
| input-denormal exception and return zero. Otherwise just return the value.
*----------------------------------------------------------------------------*/
+float16 float16_squash_input_denormal(float16 a, float_status *status);
float32 float32_squash_input_denormal(float32 a, float_status *status);
float64 float64_squash_input_denormal(float64 a, float_status *status);
--
2.14.1
- [Qemu-devel] [RFC PATCH 00/30] v8.2 half-precision support (work-in-progress), Alex Bennée, 2017/10/13
- [Qemu-devel] [RFC PATCH 03/30] include/exec/helper-head.h: support f16 in helper calls, Alex Bennée, 2017/10/13
- [Qemu-devel] [RFC PATCH 01/30] linux-user/main: support dfilter, Alex Bennée, 2017/10/13
- [Qemu-devel] [RFC PATCH 04/30] target/arm/cpu.h: update comment for half-precision values, Alex Bennée, 2017/10/13
- [Qemu-devel] [RFC PATCH 06/30] fpu/softfloat: implement float16_squash_input_denormal,
Alex Bennée <=
- [Qemu-devel] [RFC PATCH 02/30] arm: introduce ARM_V8_FP16 feature bit, Alex Bennée, 2017/10/13
- [Qemu-devel] [RFC PATCH 07/30] fpu/softfloat: implement float16_abs helper, Alex Bennée, 2017/10/13
- [Qemu-devel] [RFC PATCH 05/30] softfloat: implement propagateFloat16NaN, Alex Bennée, 2017/10/13
- [Qemu-devel] [RFC PATCH 08/30] softfloat: add half-precision expansions for MINMAX fns, Alex Bennée, 2017/10/13
- [Qemu-devel] [RFC PATCH 10/30] softfloat: improve comments on ARM NaN propagation, Alex Bennée, 2017/10/13