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
15div8:
16 div1 r5,r4
17div7:
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
21divx4:
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
52large_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

source code of linux/arch/sh/lib/udivsi3.S