summaryrefslogtreecommitdiff
path: root/runtime/powerpc/i64_udiv.s
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2013-07-03 11:28:17 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2013-07-03 11:28:17 +0000
commit14ae5ba40c3217f7410c377bf36e21509b01eb8f (patch)
treef1d57929fb4310b6e8bdf8bf2edb3718c1169be9 /runtime/powerpc/i64_udiv.s
parent67976ff28a03fc57690ad792fd5e515010f803a5 (diff)
powerpc: faster implementation of long division modeled on that for IA32
test: add one test (2^64-1) / (2^32+3) to exercise a special case of this long division. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2288 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'runtime/powerpc/i64_udiv.s')
-rw-r--r--runtime/powerpc/i64_udiv.s10
1 files changed, 6 insertions, 4 deletions
diff --git a/runtime/powerpc/i64_udiv.s b/runtime/powerpc/i64_udiv.s
index 7bca760..9443d59 100644
--- a/runtime/powerpc/i64_udiv.s
+++ b/runtime/powerpc/i64_udiv.s
@@ -41,11 +41,13 @@
.balign 16
.globl __i64_udiv
__i64_udiv:
- mflr r11 # save return address in r11
+ mflr r0
+ stw r0, 4(r1) # save return address in caller's frame
bl __i64_udivmod # unsigned divide
- mtlr r11 # restore return address
- mr r3, r7 # R = quotient
- mr r4, r8
+ lwz r0, 4(r1)
+ mtlr r0 # restore return address
+ mr r3, r5 # result = quotient
+ mr r4, r6
blr
.type __i64_udiv, @function
.size __i64_udiv, .-__i64_udiv