Module Name: src Committed By: isaki Date: Fri Mar 22 13:46:38 UTC 2013
Modified Files: src/sys/arch/m68k/fpe: fpu_implode.c Log Message: Fix fpu_ftox(). Update not only exponential but also mantissa when an integer part becomes 2 by rounding up. Without this fix, the extended precision value becomes 0.0 because mantissa (including explicit integer bit) is all-zero. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/m68k/fpe/fpu_implode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/m68k/fpe/fpu_implode.c diff -u src/sys/arch/m68k/fpe/fpu_implode.c:1.13 src/sys/arch/m68k/fpe/fpu_implode.c:1.14 --- src/sys/arch/m68k/fpe/fpu_implode.c:1.13 Tue Mar 19 09:17:17 2013 +++ src/sys/arch/m68k/fpe/fpu_implode.c Fri Mar 22 13:46:38 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: fpu_implode.c,v 1.13 2013/03/19 09:17:17 isaki Exp $ */ +/* $NetBSD: fpu_implode.c,v 1.14 2013/03/22 13:46:38 isaki Exp $ */ /* * Copyright (c) 1992, 1993 @@ -46,7 +46,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fpu_implode.c,v 1.13 2013/03/19 09:17:17 isaki Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fpu_implode.c,v 1.14 2013/03/22 13:46:38 isaki Exp $"); #include <sys/types.h> #include <sys/systm.h> @@ -433,8 +433,10 @@ fpu_ftox(struct fpemu *fe, struct fpn *f #if (FP_NMANT - FP_NG - EXT_FRACBITS) > 0 (void) fpu_shr(fp, FP_NMANT - FP_NG - EXT_FRACBITS); #endif - if (fpu_round(fe, fp) && fp->fp_mant[0] == EXT_EXPLICIT2) + if (fpu_round(fe, fp) && fp->fp_mant[0] == EXT_EXPLICIT2) { exp++; + fpu_shr(fp, 1); + } if (exp >= EXT_EXP_INFNAN) { fe->fe_fpsr |= FPSR_OPERR | FPSR_INEX2 | FPSR_OVFL; if (toinf(fe, sign)) {