diff options
Diffstat (limited to 'arch/arm/vfp/vfpdouble.c')
| -rw-r--r-- | arch/arm/vfp/vfpdouble.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/arm/vfp/vfpdouble.c b/arch/arm/vfp/vfpdouble.c index 9b367a65cb4d..2418d12e7fb5 100644 --- a/arch/arm/vfp/vfpdouble.c +++ b/arch/arm/vfp/vfpdouble.c | |||
| @@ -588,6 +588,7 @@ static u32 vfp_double_ftosi(int sd, int unused, int dm, u32 fpscr) | |||
| 588 | struct vfp_double vdm; | 588 | struct vfp_double vdm; |
| 589 | u32 d, exceptions = 0; | 589 | u32 d, exceptions = 0; |
| 590 | int rmode = fpscr & FPSCR_RMODE_MASK; | 590 | int rmode = fpscr & FPSCR_RMODE_MASK; |
| 591 | int tm; | ||
| 591 | 592 | ||
| 592 | vfp_double_unpack(&vdm, vfp_get_double(dm)); | 593 | vfp_double_unpack(&vdm, vfp_get_double(dm)); |
| 593 | vfp_double_dump("VDM", &vdm); | 594 | vfp_double_dump("VDM", &vdm); |
| @@ -595,10 +596,14 @@ static u32 vfp_double_ftosi(int sd, int unused, int dm, u32 fpscr) | |||
| 595 | /* | 596 | /* |
| 596 | * Do we have denormalised number? | 597 | * Do we have denormalised number? |
| 597 | */ | 598 | */ |
| 598 | if (vfp_double_type(&vdm) & VFP_DENORMAL) | 599 | tm = vfp_double_type(&vdm); |
| 600 | if (tm & VFP_DENORMAL) | ||
| 599 | exceptions |= FPSCR_IDC; | 601 | exceptions |= FPSCR_IDC; |
| 600 | 602 | ||
| 601 | if (vdm.exponent >= 1023 + 32) { | 603 | if (tm & VFP_NAN) { |
| 604 | d = 0; | ||
| 605 | exceptions |= FPSCR_IOC; | ||
| 606 | } else if (vdm.exponent >= 1023 + 32) { | ||
| 602 | d = 0x7fffffff; | 607 | d = 0x7fffffff; |
| 603 | if (vdm.sign) | 608 | if (vdm.sign) |
| 604 | d = ~d; | 609 | d = ~d; |
