[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 022/102] softfloat: Add flag specific to Inf * 0
From: |
Cédric Le Goater |
Subject: |
[PULL 022/102] softfloat: Add flag specific to Inf * 0 |
Date: |
Wed, 15 Dec 2021 18:02:37 +0100 |
From: Richard Henderson <richard.henderson@linaro.org>
PowerPC has this flag, and it's easier to compute it here
than after the fact.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20211119160502.17432-4-richard.henderson@linaro.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
include/fpu/softfloat-types.h | 1 +
fpu/softfloat-parts.c.inc | 4 ++--
fpu/softfloat-specialize.c.inc | 12 ++++++------
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h
index eaa12e1e0033..56b4cf783544 100644
--- a/include/fpu/softfloat-types.h
+++ b/include/fpu/softfloat-types.h
@@ -153,6 +153,7 @@ enum {
float_flag_input_denormal = 0x0020,
float_flag_output_denormal = 0x0040,
float_flag_invalid_isi = 0x0080, /* inf - inf */
+ float_flag_invalid_imz = 0x0100, /* inf * 0 */
};
/*
diff --git a/fpu/softfloat-parts.c.inc b/fpu/softfloat-parts.c.inc
index eb2b475ca466..3ed793347b18 100644
--- a/fpu/softfloat-parts.c.inc
+++ b/fpu/softfloat-parts.c.inc
@@ -423,7 +423,7 @@ static FloatPartsN *partsN(mul)(FloatPartsN *a, FloatPartsN
*b,
/* Inf * Zero == NaN */
if (unlikely(ab_mask == float_cmask_infzero)) {
- float_raise(float_flag_invalid, s);
+ float_raise(float_flag_invalid | float_flag_invalid_imz, s);
parts_default_nan(a, s);
return a;
}
@@ -489,6 +489,7 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a,
FloatPartsN *b,
if (unlikely(ab_mask != float_cmask_normal)) {
if (unlikely(ab_mask == float_cmask_infzero)) {
+ float_raise(float_flag_invalid | float_flag_invalid_imz, s);
goto d_nan;
}
@@ -567,7 +568,6 @@ static FloatPartsN *partsN(muladd)(FloatPartsN *a,
FloatPartsN *b,
goto finish_sign;
d_nan:
- float_raise(float_flag_invalid, s);
parts_default_nan(a, s);
return a;
}
diff --git a/fpu/softfloat-specialize.c.inc b/fpu/softfloat-specialize.c.inc
index f2ad0f335e63..943e3301d209 100644
--- a/fpu/softfloat-specialize.c.inc
+++ b/fpu/softfloat-specialize.c.inc
@@ -506,7 +506,7 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass
b_cls, FloatClass c_cls,
* the default NaN
*/
if (infzero && is_qnan(c_cls)) {
- float_raise(float_flag_invalid, status);
+ float_raise(float_flag_invalid | float_flag_invalid_imz, status);
return 3;
}
@@ -533,7 +533,7 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass
b_cls, FloatClass c_cls,
* case sets InvalidOp and returns the default NaN
*/
if (infzero) {
- float_raise(float_flag_invalid, status);
+ float_raise(float_flag_invalid | float_flag_invalid_imz, status);
return 3;
}
/* Prefer sNaN over qNaN, in the a, b, c order. */
@@ -556,7 +556,7 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass
b_cls, FloatClass c_cls,
* case sets InvalidOp and returns the input value 'c'
*/
if (infzero) {
- float_raise(float_flag_invalid, status);
+ float_raise(float_flag_invalid | float_flag_invalid_imz, status);
return 2;
}
/* Prefer sNaN over qNaN, in the c, a, b order. */
@@ -580,7 +580,7 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass
b_cls, FloatClass c_cls,
* a default NaN
*/
if (infzero) {
- float_raise(float_flag_invalid, status);
+ float_raise(float_flag_invalid | float_flag_invalid_imz, status);
return 2;
}
@@ -597,7 +597,7 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass
b_cls, FloatClass c_cls,
#elif defined(TARGET_RISCV)
/* For RISC-V, InvalidOp is set when multiplicands are Inf and zero */
if (infzero) {
- float_raise(float_flag_invalid, status);
+ float_raise(float_flag_invalid | float_flag_invalid_imz, status);
}
return 3; /* default NaN */
#elif defined(TARGET_XTENSA)
@@ -606,7 +606,7 @@ static int pickNaNMulAdd(FloatClass a_cls, FloatClass
b_cls, FloatClass c_cls,
* an input NaN if we have one (ie c).
*/
if (infzero) {
- float_raise(float_flag_invalid, status);
+ float_raise(float_flag_invalid | float_flag_invalid_imz, status);
return 2;
}
if (status->use_first_nan) {
--
2.31.1
- [PULL 013/102] ppc/pnv.c: add a friendly warning when accel=kvm is used, (continued)
- [PULL 013/102] ppc/pnv.c: add a friendly warning when accel=kvm is used, Cédric Le Goater, 2021/12/15
- [PULL 014/102] docs/system/ppc/powernv.rst: document KVM support status, Cédric Le Goater, 2021/12/15
- [PULL 018/102] docs: Rename ppc-spapr-hcalls.txt to ppc-spapr-hcalls.rst., Cédric Le Goater, 2021/12/15
- [PULL 019/102] Link new ppc-spapr-hcalls.rst file to pseries.rst., Cédric Le Goater, 2021/12/15
- [PULL 015/102] ppc/pnv.c: fix "system-id" FDT when -uuid is set, Cédric Le Goater, 2021/12/15
- [PULL 021/102] softfloat: Add flag specific to Inf - Inf, Cédric Le Goater, 2021/12/15
- [PULL 023/102] softfloat: Add flags specific to Inf / Inf and 0 / 0, Cédric Le Goater, 2021/12/15
- [PULL 026/102] softfloat: Add flag specific to signaling nans, Cédric Le Goater, 2021/12/15
- [PULL 027/102] target/ppc: Update float_invalid_op_addsub for new flags, Cédric Le Goater, 2021/12/15
- [PULL 025/102] softfloat: Add flag specific to convert non-nan to int, Cédric Le Goater, 2021/12/15
- [PULL 022/102] softfloat: Add flag specific to Inf * 0,
Cédric Le Goater <=
- [PULL 017/102] docs: rSTify ppc-spapr-hcalls.txt, Cédric Le Goater, 2021/12/15
- [PULL 024/102] softfloat: Add flag specific to sqrt(-x), Cédric Le Goater, 2021/12/15
- [PULL 028/102] target/ppc: Update float_invalid_op_mul for new flags, Cédric Le Goater, 2021/12/15
- [PULL 016/102] docs: Introducing pseries documentation., Cédric Le Goater, 2021/12/15
- [PULL 037/102] target/ppc: Update fmadd for new flags, Cédric Le Goater, 2021/12/15
- [PULL 031/102] target/ppc: Update float_invalid_cvt for new flags, Cédric Le Goater, 2021/12/15
- [PULL 020/102] softfloat: Extend float_exception_flags to 16 bits, Cédric Le Goater, 2021/12/15
- [PULL 035/102] target/ppc: Tidy inexact handling in do_fri, Cédric Le Goater, 2021/12/15
- [PULL 044/102] target/ppc: Update xsrqpi and xsrqpxp to new flags, Cédric Le Goater, 2021/12/15
- [PULL 034/102] target/ppc: Use FloatRoundMode in do_fri, Cédric Le Goater, 2021/12/15