diff options
author | Nicolas Pitre <nico@cam.org> | 2005-06-23 16:56:46 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-06-23 16:56:46 -0400 |
commit | c1241c4c3a1507d76c7b987130f2f02f53ecc09f (patch) | |
tree | 8b34e8bd30c94c279a3cdabf8b13e05d1ef3dc77 /arch/arm/nwfpe/softfloat.c | |
parent | bf1b8ab6f21e1adbab1abd1b4e71c35fe65dc5fe (diff) |
[PATCH] ARM: 2722/1: remove reliance on udivdi3 for nwfpe
Patch from Nicolas Pitre
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/nwfpe/softfloat.c')
-rw-r--r-- | arch/arm/nwfpe/softfloat.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/arm/nwfpe/softfloat.c b/arch/arm/nwfpe/softfloat.c index 9d743ae29062..e038dd3be9b3 100644 --- a/arch/arm/nwfpe/softfloat.c +++ b/arch/arm/nwfpe/softfloat.c | |||
@@ -28,6 +28,8 @@ this code that are retained. | |||
28 | =============================================================================== | 28 | =============================================================================== |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <asm/div64.h> | ||
32 | |||
31 | #include "fpa11.h" | 33 | #include "fpa11.h" |
32 | //#include "milieu.h" | 34 | //#include "milieu.h" |
33 | //#include "softfloat.h" | 35 | //#include "softfloat.h" |
@@ -1331,7 +1333,11 @@ float32 float32_div( float32 a, float32 b ) | |||
1331 | aSig >>= 1; | 1333 | aSig >>= 1; |
1332 | ++zExp; | 1334 | ++zExp; |
1333 | } | 1335 | } |
1334 | zSig = ( ( (bits64) aSig )<<32 ) / bSig; | 1336 | { |
1337 | bits64 tmp = ( (bits64) aSig )<<32; | ||
1338 | do_div( tmp, bSig ); | ||
1339 | zSig = tmp; | ||
1340 | } | ||
1335 | if ( ( zSig & 0x3F ) == 0 ) { | 1341 | if ( ( zSig & 0x3F ) == 0 ) { |
1336 | zSig |= ( ( (bits64) bSig ) * zSig != ( (bits64) aSig )<<32 ); | 1342 | zSig |= ( ( (bits64) bSig ) * zSig != ( (bits64) aSig )<<32 ); |
1337 | } | 1343 | } |
@@ -1397,7 +1403,9 @@ float32 float32_rem( float32 a, float32 b ) | |||
1397 | q = ( bSig <= aSig ); | 1403 | q = ( bSig <= aSig ); |
1398 | if ( q ) aSig -= bSig; | 1404 | if ( q ) aSig -= bSig; |
1399 | if ( 0 < expDiff ) { | 1405 | if ( 0 < expDiff ) { |
1400 | q = ( ( (bits64) aSig )<<32 ) / bSig; | 1406 | bits64 tmp = ( (bits64) aSig )<<32; |
1407 | do_div( tmp, bSig ); | ||
1408 | q = tmp; | ||
1401 | q >>= 32 - expDiff; | 1409 | q >>= 32 - expDiff; |
1402 | bSig >>= 2; | 1410 | bSig >>= 2; |
1403 | aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q; | 1411 | aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q; |