xref: /rk3399_rockchip-uboot/arch/sh/lib/udiv_qrnnd.S (revision 9b5b60a05cb8bba2d135439419b2030764e359bd)
1*5f91a3adSMasahiro Yamada/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2*5f91a3adSMasahiro Yamada   2004, 2005, 2006
3*5f91a3adSMasahiro Yamada   Free Software Foundation, Inc.
4*5f91a3adSMasahiro Yamada
5*5f91a3adSMasahiro Yamada * SPDX-License-Identifier:	GPL-2.0+
6*5f91a3adSMasahiro Yamada */
7*5f91a3adSMasahiro Yamada
8*5f91a3adSMasahiro Yamada!! libgcc routines for the Renesas / SuperH SH CPUs.
9*5f91a3adSMasahiro Yamada!! Contributed by Steve Chamberlain.
10*5f91a3adSMasahiro Yamada!! sac@cygnus.com
11*5f91a3adSMasahiro Yamada
12*5f91a3adSMasahiro Yamada!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
13*5f91a3adSMasahiro Yamada!! recoded in assembly by Toshiyasu Morita
14*5f91a3adSMasahiro Yamada!! tm@netcom.com
15*5f91a3adSMasahiro Yamada
16*5f91a3adSMasahiro Yamada/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
17*5f91a3adSMasahiro Yamada   ELF local label prefixes by J"orn Rennecke
18*5f91a3adSMasahiro Yamada   amylaar@cygnus.com  */
19*5f91a3adSMasahiro Yamada
20*5f91a3adSMasahiro Yamada	/* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */
21*5f91a3adSMasahiro Yamada	/* n1 < d, but n1 might be larger than d1.  */
22*5f91a3adSMasahiro Yamada	.global __udiv_qrnnd_16
23*5f91a3adSMasahiro Yamada	.balign 8
24*5f91a3adSMasahiro Yamada__udiv_qrnnd_16:
25*5f91a3adSMasahiro Yamada	div0u
26*5f91a3adSMasahiro Yamada	cmp/hi r6,r0
27*5f91a3adSMasahiro Yamada	bt .Lots
28*5f91a3adSMasahiro Yamada	.rept 16
29*5f91a3adSMasahiro Yamada	div1 r6,r0
30*5f91a3adSMasahiro Yamada	.endr
31*5f91a3adSMasahiro Yamada	extu.w r0,r1
32*5f91a3adSMasahiro Yamada	bt 0f
33*5f91a3adSMasahiro Yamada	add r6,r0
34*5f91a3adSMasahiro Yamada0:	rotcl r1
35*5f91a3adSMasahiro Yamada	mulu.w r1,r5
36*5f91a3adSMasahiro Yamada	xtrct r4,r0
37*5f91a3adSMasahiro Yamada	swap.w r0,r0
38*5f91a3adSMasahiro Yamada	sts macl,r2
39*5f91a3adSMasahiro Yamada	cmp/hs r2,r0
40*5f91a3adSMasahiro Yamada	sub r2,r0
41*5f91a3adSMasahiro Yamada	bt 0f
42*5f91a3adSMasahiro Yamada	addc r5,r0
43*5f91a3adSMasahiro Yamada	add #-1,r1
44*5f91a3adSMasahiro Yamada	bt 0f
45*5f91a3adSMasahiro Yamada1:	add #-1,r1
46*5f91a3adSMasahiro Yamada	rts
47*5f91a3adSMasahiro Yamada	add r5,r0
48*5f91a3adSMasahiro Yamada	.balign 8
49*5f91a3adSMasahiro Yamada.Lots:
50*5f91a3adSMasahiro Yamada	sub r5,r0
51*5f91a3adSMasahiro Yamada	swap.w r4,r1
52*5f91a3adSMasahiro Yamada	xtrct r0,r1
53*5f91a3adSMasahiro Yamada	clrt
54*5f91a3adSMasahiro Yamada	mov r1,r0
55*5f91a3adSMasahiro Yamada	addc r5,r0
56*5f91a3adSMasahiro Yamada	mov #-1,r1
57*5f91a3adSMasahiro Yamada	bf/s 1b
58*5f91a3adSMasahiro Yamada	 shlr16 r1
59*5f91a3adSMasahiro Yamada0:	rts
60*5f91a3adSMasahiro Yamada	nop
61