162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
462306a36Sopenharmony_ci   2004, 2005
562306a36Sopenharmony_ci   Free Software Foundation, Inc.
662306a36Sopenharmony_ci*/
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci!! libgcc routines for the Renesas / SuperH SH CPUs.
962306a36Sopenharmony_ci!! Contributed by Steve Chamberlain.
1062306a36Sopenharmony_ci!! sac@cygnus.com
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci	.balign 4
1362306a36Sopenharmony_ci	.global	__udivsi3
1462306a36Sopenharmony_ci	.type	__udivsi3, @function
1562306a36Sopenharmony_cidiv8:
1662306a36Sopenharmony_ci	div1 r5,r4
1762306a36Sopenharmony_cidiv7:
1862306a36Sopenharmony_ci	div1 r5,r4; div1 r5,r4; div1 r5,r4
1962306a36Sopenharmony_ci	div1 r5,r4; div1 r5,r4; div1 r5,r4; rts; div1 r5,r4
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cidivx4:
2262306a36Sopenharmony_ci	div1 r5,r4; rotcl r0
2362306a36Sopenharmony_ci	div1 r5,r4; rotcl r0
2462306a36Sopenharmony_ci	div1 r5,r4; rotcl r0
2562306a36Sopenharmony_ci	rts; div1 r5,r4
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci__udivsi3:
2862306a36Sopenharmony_ci	sts.l pr,@-r15
2962306a36Sopenharmony_ci	extu.w r5,r0
3062306a36Sopenharmony_ci	cmp/eq r5,r0
3162306a36Sopenharmony_ci	bf/s large_divisor
3262306a36Sopenharmony_ci	div0u
3362306a36Sopenharmony_ci	swap.w r4,r0
3462306a36Sopenharmony_ci	shlr16 r4
3562306a36Sopenharmony_ci	bsr div8
3662306a36Sopenharmony_ci	shll16 r5
3762306a36Sopenharmony_ci	bsr div7
3862306a36Sopenharmony_ci	div1 r5,r4
3962306a36Sopenharmony_ci	xtrct r4,r0
4062306a36Sopenharmony_ci	xtrct r0,r4
4162306a36Sopenharmony_ci	bsr div8
4262306a36Sopenharmony_ci	swap.w r4,r4
4362306a36Sopenharmony_ci	bsr div7
4462306a36Sopenharmony_ci	div1 r5,r4
4562306a36Sopenharmony_ci	lds.l @r15+,pr
4662306a36Sopenharmony_ci	xtrct r4,r0
4762306a36Sopenharmony_ci	swap.w r0,r0
4862306a36Sopenharmony_ci	rotcl r0
4962306a36Sopenharmony_ci	rts
5062306a36Sopenharmony_ci	shlr16 r5
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cilarge_divisor:
5362306a36Sopenharmony_ci	mov #0,r0
5462306a36Sopenharmony_ci	xtrct r4,r0
5562306a36Sopenharmony_ci	xtrct r0,r4
5662306a36Sopenharmony_ci	bsr divx4
5762306a36Sopenharmony_ci	rotcl r0
5862306a36Sopenharmony_ci	bsr divx4
5962306a36Sopenharmony_ci	rotcl r0
6062306a36Sopenharmony_ci	bsr divx4
6162306a36Sopenharmony_ci	rotcl r0
6262306a36Sopenharmony_ci	bsr divx4
6362306a36Sopenharmony_ci	rotcl r0
6462306a36Sopenharmony_ci	lds.l @r15+,pr
6562306a36Sopenharmony_ci	rts
6662306a36Sopenharmony_ci	rotcl r0
67