[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/11] softfloat: Introduce float_flag_result_denormal
From: |
Richard Henderson |
Subject: |
[PATCH 04/11] softfloat: Introduce float_flag_result_denormal |
Date: |
Wed, 26 May 2021 21:13:58 -0700 |
Create a new exception flag for reporting output denormals
that are not flushed to zero.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/fpu/softfloat-types.h | 3 ++-
fpu/softfloat-parts.c.inc | 8 ++++++--
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h
index 174100e50e..83632aa09f 100644
--- a/include/fpu/softfloat-types.h
+++ b/include/fpu/softfloat-types.h
@@ -151,6 +151,7 @@ enum {
float_flag_inorm_denormal = 0x0020, /* denormal input, normalized */
float_flag_iflush_denormal = 0x0040, /* denormal input, flushed to zero */
float_flag_oflush_denormal = 0x0080, /* denormal result, flushed to zero
*/
+ float_flag_result_denormal = 0x0100, /* denormal result, not flushed */
};
/*
@@ -170,8 +171,8 @@ typedef enum __attribute__((__packed__)) {
*/
typedef struct float_status {
+ uint16_t float_exception_flags;
FloatRoundMode float_rounding_mode;
- uint8_t float_exception_flags;
FloatX80RoundPrec floatx80_rounding_precision;
bool tininess_before_rounding;
/* should denormalised results go to zero and set the inexact flag? */
diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc
index 16d4425419..a21fcec3e5 100644
--- a/fpu/softfloat-parts.c.inc
+++ b/fpu/softfloat-parts.c.inc
@@ -276,8 +276,12 @@ static void partsN(uncanon_normal)(FloatPartsN *p,
float_status *s,
if (is_tiny && (flags & float_flag_inexact)) {
flags |= float_flag_underflow;
}
- if (exp == 0 && frac_eqz(p)) {
- p->cls = float_class_zero;
+ if (exp == 0) {
+ if (frac_eqz(p)) {
+ p->cls = float_class_zero;
+ } else {
+ flags |= float_flag_result_denormal;
+ }
}
}
p->exp = exp;
--
2.25.1
- Re: [PATCH 07/11] target/rx: Use FloatRoundMode in helper_set_fpsw, (continued)
- [PATCH 02/11] softfloat: Rename float_flag_output_denormal to float_flag_oflush_denormal, Richard Henderson, 2021/05/27
- [PATCH 06/11] target/rx: Handle the FPSW.DN bit in helper_set_fpsw, Richard Henderson, 2021/05/27
- [PATCH 08/11] target/rx: Fix setting of FPSW.CE, Richard Henderson, 2021/05/27
- [PATCH 09/11] target/mips: Drop inline markers from msa_helper.c, Richard Henderson, 2021/05/27
- [PATCH 10/11] target/mips: Do not check MSACSR_FS_MASK in update_msacsr, Richard Henderson, 2021/05/27
- [PATCH 04/11] softfloat: Introduce float_flag_result_denormal,
Richard Henderson <=
- [PATCH 05/11] target/i386: Use float_flag_inorm_denormal, Richard Henderson, 2021/05/27
- [PATCH 11/11] target/mips: Drop denormal operand to update_msacsr, Richard Henderson, 2021/05/27