aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/lib/div64.S
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-16 18:20:36 -0400
commit1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch)
tree0bba044c4ce775e45a88a51686b5d9f90697ea9d /arch/sh/lib/div64.S
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
Diffstat (limited to 'arch/sh/lib/div64.S')
-rw-r--r--arch/sh/lib/div64.S46
1 files changed, 46 insertions, 0 deletions
diff --git a/arch/sh/lib/div64.S b/arch/sh/lib/div64.S
new file mode 100644
index 000000000000..eefc275d64a7
--- /dev/null
+++ b/arch/sh/lib/div64.S
@@ -0,0 +1,46 @@
1/*
2 * unsigned long long __xdiv64_32(unsigned long long n, unsigned long d);
3 */
4
5#include <linux/linkage.h>
6
7.text
8ENTRY(__xdiv64_32)
9#ifdef __LITTLE_ENDIAN__
10 mov r4, r0
11 mov r5, r1
12#else
13 mov r4, r1
14 mov r5, r0
15#endif
16 cmp/hs r6, r1
17 bf.s 1f
18 mov #0, r2
19
20 mov r1, r2
21 mov #0, r3
22 div0u
23 .rept 32
24 rotcl r2
25 div1 r6, r3
26 .endr
27 rotcl r2
28 mul.l r6, r2
29 sts macl, r3
30 sub r3, r1
311:
32 div0u
33 .rept 32
34 rotcl r0
35 div1 r6, r1
36 .endr
37#ifdef __LITTLE_ENDIAN__
38 mov r2, r1
39 rts
40 rotcl r0
41#else
42 rotcl r0
43 mov r0, r1
44 rts
45 mov r2, r0
46#endif