On Sun, 6 Dec 2015, Aurelien Jarno wrote: > cvt.s.d and cvt.d.s are FP operations and thus need to convert input > sNaN into corresponding qNaN. Explicitely use the floatXX_maybe_silence_nan > functions for that as the floatXX_to_floatXX functions do not do that. > > Cc: Leon Alrae <leon.al...@imgtec.com> > Signed-off-by: Aurelien Jarno <aurel...@aurel32.net> > --- > target-mips/op_helper.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c > index d2c98c9..20e79be 100644 > --- a/target-mips/op_helper.c > +++ b/target-mips/op_helper.c > @@ -2545,6 +2545,7 @@ uint64_t helper_float_cvtd_s(CPUMIPSState *env, > uint32_t fst0) > uint64_t fdt2; > > fdt2 = float32_to_float64(fst0, &env->active_fpu.fp_status); > + fdt2 = float64_maybe_silence_nan(fdt2); > update_fcr31(env, GETPC()); > return fdt2; > } > @@ -2634,6 +2635,7 @@ uint32_t helper_float_cvts_d(CPUMIPSState *env, > uint64_t fdt0) > uint32_t fst2; > > fst2 = float64_to_float32(fdt0, &env->active_fpu.fp_status); > + fst2 = float32_maybe_silence_nan(fst2); > update_fcr31(env, GETPC()); > return fst2; > }
FYI, I posted a more general fix to this a while ago, however the review regrettably went nowhere. See the archive of discussion starting at: <http://lists.nongnu.org/archive/html/qemu-devel/2014-12/msg00969.html> for details, including the justification and further design consideration. Maciej