summaryrefslogtreecommitdiff
path: root/arch/powerpc/lib/div64.S
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2005-10-20 03:37:02 +0400
committerPaul Mackerras <paulus@samba.org>2005-10-20 03:37:02 +0400
commit344480b99730bfd205e306d3fd168cdcebe83425 (patch)
tree43e3d75779307d9ee36f001718efe6ef6fa220d3 /arch/powerpc/lib/div64.S
parenta4bcc95a3ad0ccba6d7b39442dfb81cc57bb7121 (diff)
downloadlinux-344480b99730bfd205e306d3fd168cdcebe83425.tar.xz
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.S3
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