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