diff options
Diffstat (limited to 'arch/arm/vfp/vfpsingle.c')
| -rw-r--r-- | arch/arm/vfp/vfpsingle.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/arm/vfp/vfpsingle.c b/arch/arm/vfp/vfpsingle.c index 6849fe35cb2e..14dd696ddeb1 100644 --- a/arch/arm/vfp/vfpsingle.c +++ b/arch/arm/vfp/vfpsingle.c | |||
| @@ -32,6 +32,8 @@ | |||
| 32 | */ | 32 | */ |
| 33 | #include <linux/kernel.h> | 33 | #include <linux/kernel.h> |
| 34 | #include <linux/bitops.h> | 34 | #include <linux/bitops.h> |
| 35 | |||
| 36 | #include <asm/div64.h> | ||
| 35 | #include <asm/ptrace.h> | 37 | #include <asm/ptrace.h> |
| 36 | #include <asm/vfp.h> | 38 | #include <asm/vfp.h> |
| 37 | 39 | ||
| @@ -303,7 +305,11 @@ u32 vfp_estimate_sqrt_significand(u32 exponent, u32 significand) | |||
| 303 | if (z <= a) | 305 | if (z <= a) |
| 304 | return (s32)a >> 1; | 306 | return (s32)a >> 1; |
| 305 | } | 307 | } |
| 306 | return (u32)(((u64)a << 31) / z) + (z >> 1); | 308 | { |
| 309 | u64 v = (u64)a << 31; | ||
| 310 | do_div(v, z); | ||
| 311 | return v + (z >> 1); | ||
| 312 | } | ||
| 307 | } | 313 | } |
| 308 | 314 | ||
| 309 | static u32 vfp_single_fsqrt(int sd, int unused, s32 m, u32 fpscr) | 315 | static u32 vfp_single_fsqrt(int sd, int unused, s32 m, u32 fpscr) |
| @@ -1107,7 +1113,11 @@ static u32 vfp_single_fdiv(int sd, int sn, s32 m, u32 fpscr) | |||
| 1107 | vsn.significand >>= 1; | 1113 | vsn.significand >>= 1; |
| 1108 | vsd.exponent++; | 1114 | vsd.exponent++; |
| 1109 | } | 1115 | } |
| 1110 | vsd.significand = ((u64)vsn.significand << 32) / vsm.significand; | 1116 | { |
| 1117 | u64 significand = (u64)vsn.significand << 32; | ||
| 1118 | do_div(significand, vsm.significand); | ||
| 1119 | vsd.significand = significand; | ||
| 1120 | } | ||
| 1111 | if ((vsd.significand & 0x3f) == 0) | 1121 | if ((vsd.significand & 0x3f) == 0) |
| 1112 | vsd.significand |= ((u64)vsm.significand * vsd.significand != (u64)vsn.significand << 32); | 1122 | vsd.significand |= ((u64)vsm.significand * vsd.significand != (u64)vsn.significand << 32); |
| 1113 | 1123 | ||
