From 09b96ea041546cc645313936516c4ee727e6ea39 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 8 Jul 2005 18:41:54 +0000 Subject: [PATCH] * sim-fpu.c (pack_fpu): If SIM_QUIET_NAN_NEGATED is defined, use a different fraction for a quiet NaN. (unpack_fpu): Likewise. --- sim/common/ChangeLog | 6 ++++++ sim/common/sim-fpu.c | 13 ++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index 7a43a29bfc..c2ef9e0a8d 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,3 +1,9 @@ +2005-07-08 Ian Lance Taylor + + * sim-fpu.c (pack_fpu): If SIM_QUIET_NAN_NEGATED is defined, use a + different fraction for a quiet NaN. + (unpack_fpu): Likewise. + 2005-07-08 Ben Elliston * callback.c: Remove ANSI_PROTOTYPES conditional code. diff --git a/sim/common/sim-fpu.c b/sim/common/sim-fpu.c index 845248adb5..c9678bdc09 100644 --- a/sim/common/sim-fpu.c +++ b/sim/common/sim-fpu.c @@ -201,7 +201,11 @@ pack_fpu (const sim_fpu *src, /* force fraction to correct class */ fraction = src->fraction; fraction >>= NR_GUARDS; +#ifdef SIM_QUIET_NAN_NEGATED + fraction |= QUIET_NAN - 1; +#else fraction |= QUIET_NAN; +#endif break; case sim_fpu_class_snan: sign = src->sign; @@ -362,10 +366,17 @@ unpack_fpu (sim_fpu *dst, unsigned64 packed, int is_double) } else { + int qnan; + /* Non zero fraction, means NaN */ dst->sign = sign; dst->fraction = (fraction << NR_GUARDS); - if (fraction >= QUIET_NAN) +#ifdef SIM_QUIET_NAN_NEGATED + qnan = (fraction & QUIET_NAN) == 0; +#else + qnan = fraction >= QUIET_NAN; +#endif + if (qnan) dst->class = sim_fpu_class_qnan; else dst->class = sim_fpu_class_snan;