softfloat: Add flags specific to Inf / Inf and 0 / 0
PowerPC has these flags, and it's easier to compute them here than after the fact. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20211119160502.17432-5-richard.henderson@linaro.org> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
bead3c9b0f
commit
10cc964030
@ -590,11 +590,13 @@ static FloatPartsN *partsN(div)(FloatPartsN *a, FloatPartsN *b,
|
||||
}
|
||||
|
||||
/* 0/0 or Inf/Inf => NaN */
|
||||
if (unlikely(ab_mask == float_cmask_zero) ||
|
||||
unlikely(ab_mask == float_cmask_inf)) {
|
||||
float_raise(float_flag_invalid, s);
|
||||
parts_default_nan(a, s);
|
||||
return a;
|
||||
if (unlikely(ab_mask == float_cmask_zero)) {
|
||||
float_raise(float_flag_invalid | float_flag_invalid_zdz, s);
|
||||
goto d_nan;
|
||||
}
|
||||
if (unlikely(ab_mask == float_cmask_inf)) {
|
||||
float_raise(float_flag_invalid | float_flag_invalid_idi, s);
|
||||
goto d_nan;
|
||||
}
|
||||
|
||||
/* All the NaN cases */
|
||||
@ -625,6 +627,10 @@ static FloatPartsN *partsN(div)(FloatPartsN *a, FloatPartsN *b,
|
||||
float_raise(float_flag_divbyzero, s);
|
||||
a->cls = float_class_inf;
|
||||
return a;
|
||||
|
||||
d_nan:
|
||||
parts_default_nan(a, s);
|
||||
return a;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -154,6 +154,8 @@ enum {
|
||||
float_flag_output_denormal = 0x0040,
|
||||
float_flag_invalid_isi = 0x0080, /* inf - inf */
|
||||
float_flag_invalid_imz = 0x0100, /* inf * 0 */
|
||||
float_flag_invalid_idi = 0x0200, /* inf / inf */
|
||||
float_flag_invalid_zdz = 0x0400, /* 0 / 0 */
|
||||
};
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user