1 | /* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0 |
2 | |
3 | Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, |
4 | 2004, 2005 |
5 | Free Software Foundation, Inc. |
6 | */ |
7 | |
8 | !! libgcc routines for the Renesas / SuperH SH CPUs. |
9 | !! Contributed by Steve Chamberlain. |
10 | !! sac@cygnus.com |
11 | |
12 | .balign 4 |
13 | .global __udivsi3 |
14 | .type __udivsi3, @function |
15 | div8: |
16 | div1 r5,r4 |
17 | div7: |
18 | div1 r5,r4; div1 r5,r4; div1 r5,r4 |
19 | div1 r5,r4; div1 r5,r4; div1 r5,r4; rts; div1 r5,r4 |
20 | |
21 | divx4: |
22 | div1 r5,r4; rotcl r0 |
23 | div1 r5,r4; rotcl r0 |
24 | div1 r5,r4; rotcl r0 |
25 | rts; div1 r5,r4 |
26 | |
27 | __udivsi3: |
28 | sts.l pr,@-r15 |
29 | extu.w r5,r0 |
30 | cmp/eq r5,r0 |
31 | bf/s large_divisor |
32 | div0u |
33 | swap.w r4,r0 |
34 | shlr16 r4 |
35 | bsr div8 |
36 | shll16 r5 |
37 | bsr div7 |
38 | div1 r5,r4 |
39 | xtrct r4,r0 |
40 | xtrct r0,r4 |
41 | bsr div8 |
42 | swap.w r4,r4 |
43 | bsr div7 |
44 | div1 r5,r4 |
45 | lds.l @r15+,pr |
46 | xtrct r4,r0 |
47 | swap.w r0,r0 |
48 | rotcl r0 |
49 | rts |
50 | shlr16 r5 |
51 | |
52 | large_divisor: |
53 | mov #0,r0 |
54 | xtrct r4,r0 |
55 | xtrct r0,r4 |
56 | bsr divx4 |
57 | rotcl r0 |
58 | bsr divx4 |
59 | rotcl r0 |
60 | bsr divx4 |
61 | rotcl r0 |
62 | bsr divx4 |
63 | rotcl r0 |
64 | lds.l @r15+,pr |
65 | rts |
66 | rotcl r0 |
67 | |