diff options
author | Paul Mackerras <paulus@samba.org> | 2005-10-20 01:37:02 +0200 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-10-20 01:37:02 +0200 |
commit | 344480b99730bfd205e306d3fd168cdcebe83425 (patch) | |
tree | 43e3d75779307d9ee36f001718efe6ef6fa220d3 /arch/powerpc/lib/div64.S | |
parent | powerpc: Fix a branch-too-far link error for 32-bit targets (diff) | |
download | linux-344480b99730bfd205e306d3fd168cdcebe83425.tar.xz linux-344480b99730bfd205e306d3fd168cdcebe83425.zip |
powerpc: Fix a corner case in __div64_32
The code was incorrectly doing a division by 0 in the case where
the denominator was 0x100000000 and the divisor was 0xffffffff.
Thanks to Fred Liu of Motorola for pointing this out.
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/lib/div64.S')
-rw-r--r-- | arch/powerpc/lib/div64.S | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/powerpc/lib/div64.S b/arch/powerpc/lib/div64.S index 3527569e9926..83d9832fd919 100644 --- a/arch/powerpc/lib/div64.S +++ b/arch/powerpc/lib/div64.S @@ -33,9 +33,10 @@ _GLOBAL(__div64_32) cntlzw r0,r5 # we are shifting the dividend right li r10,-1 # to make it < 2^32, and shifting srw r10,r10,r0 # the divisor right the same amount, - add r9,r4,r10 # rounding up (so the estimate cannot + addc r9,r4,r10 # rounding up (so the estimate cannot andc r11,r6,r10 # ever be too large, only too small) andc r9,r9,r10 + addze r9,r9 or r11,r5,r11 rotlw r9,r9,r0 rotlw r11,r11,r0 |