summaryrefslogtreecommitdiff
path: root/arch/arm/vfp/vfpsingle.c
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2006-04-11 00:32:39 +0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-04-11 00:32:39 +0400
commit1320a80d1d2587545f39bc0d2dc3adaf390250ef (patch)
tree95a2af8dca357efe40a70258b70fa1227098098b /arch/arm/vfp/vfpsingle.c
parentadeff42236aec0601ec979d1a41cd6d9cf5a8c05 (diff)
downloadlinux-1320a80d1d2587545f39bc0d2dc3adaf390250ef.tar.xz
[ARM] 3471/1: FTOSI functions should return 0 for NaN
Patch from Catalin Marinas The NaN case was dealed with by the "exponent >= ... + 32" condition but it was not setting the value "d" to 0. Signed-off-by: Ken'ichi Kuromusha <musha@aplix.co.jp> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/vfp/vfpsingle.c')
-rw-r--r--arch/arm/vfp/vfpsingle.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/arm/vfp/vfpsingle.c b/arch/arm/vfp/vfpsingle.c
index 14dd696ddeb1..df6e5e23bccb 100644
--- a/arch/arm/vfp/vfpsingle.c
+++ b/arch/arm/vfp/vfpsingle.c
@@ -632,6 +632,7 @@ static u32 vfp_single_ftosi(int sd, int unused, s32 m, u32 fpscr)
struct vfp_single vsm;
u32 d, exceptions = 0;
int rmode = fpscr & FPSCR_RMODE_MASK;
+ int tm;
vfp_single_unpack(&vsm, m);
vfp_single_dump("VSM", &vsm);
@@ -639,10 +640,14 @@ static u32 vfp_single_ftosi(int sd, int unused, s32 m, u32 fpscr)
/*
* Do we have a denormalised number?
*/
+ tm = vfp_single_type(&vsm);
if (vfp_single_type(&vsm) & VFP_DENORMAL)
exceptions |= FPSCR_IDC;
- if (vsm.exponent >= 127 + 32) {
+ if (tm & VFP_NAN) {
+ d = 0;
+ exceptions |= FPSCR_IOC;
+ } else if (vsm.exponent >= 127 + 32) {
/*
* m >= 2^31-2^7: invalid
*/