xref: /OK3568_Linux_fs/u-boot/arch/sh/lib/ashrsi3.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2*4882a593Smuzhiyun   2004, 2005, 2006
3*4882a593Smuzhiyun   Free Software Foundation, Inc.
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun * SPDX-License-Identifier:	GPL-2.0+
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!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
13*4882a593Smuzhiyun!! recoded in assembly by Toshiyasu Morita
14*4882a593Smuzhiyun!! tm@netcom.com
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
17*4882a593Smuzhiyun   ELF local label prefixes by J"orn Rennecke
18*4882a593Smuzhiyun   amylaar@cygnus.com  */
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun!
21*4882a593Smuzhiyun! __ashrsi3
22*4882a593Smuzhiyun!
23*4882a593Smuzhiyun! Entry:
24*4882a593Smuzhiyun!
25*4882a593Smuzhiyun! r4: Value to shift
26*4882a593Smuzhiyun! r5: Shifts
27*4882a593Smuzhiyun!
28*4882a593Smuzhiyun! Exit:
29*4882a593Smuzhiyun!
30*4882a593Smuzhiyun! r0: Result
31*4882a593Smuzhiyun!
32*4882a593Smuzhiyun! Destroys:
33*4882a593Smuzhiyun!
34*4882a593Smuzhiyun! (none)
35*4882a593Smuzhiyun!
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun	.global	__ashrsi3
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	.align	2
40*4882a593Smuzhiyun__ashrsi3:
41*4882a593Smuzhiyun	mov	#31,r0
42*4882a593Smuzhiyun	and	r0,r5
43*4882a593Smuzhiyun	mova	ashrsi3_table,r0
44*4882a593Smuzhiyun	mov.b	@(r0,r5),r5
45*4882a593Smuzhiyun#ifdef __sh1__
46*4882a593Smuzhiyun	add	r5,r0
47*4882a593Smuzhiyun	jmp	@r0
48*4882a593Smuzhiyun#else
49*4882a593Smuzhiyun	braf	r5
50*4882a593Smuzhiyun#endif
51*4882a593Smuzhiyun	mov	r4,r0
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun	.align	2
54*4882a593Smuzhiyunashrsi3_table:
55*4882a593Smuzhiyun	.byte		ashrsi3_0-ashrsi3_table
56*4882a593Smuzhiyun	.byte		ashrsi3_1-ashrsi3_table
57*4882a593Smuzhiyun	.byte		ashrsi3_2-ashrsi3_table
58*4882a593Smuzhiyun	.byte		ashrsi3_3-ashrsi3_table
59*4882a593Smuzhiyun	.byte		ashrsi3_4-ashrsi3_table
60*4882a593Smuzhiyun	.byte		ashrsi3_5-ashrsi3_table
61*4882a593Smuzhiyun	.byte		ashrsi3_6-ashrsi3_table
62*4882a593Smuzhiyun	.byte		ashrsi3_7-ashrsi3_table
63*4882a593Smuzhiyun	.byte		ashrsi3_8-ashrsi3_table
64*4882a593Smuzhiyun	.byte		ashrsi3_9-ashrsi3_table
65*4882a593Smuzhiyun	.byte		ashrsi3_10-ashrsi3_table
66*4882a593Smuzhiyun	.byte		ashrsi3_11-ashrsi3_table
67*4882a593Smuzhiyun	.byte		ashrsi3_12-ashrsi3_table
68*4882a593Smuzhiyun	.byte		ashrsi3_13-ashrsi3_table
69*4882a593Smuzhiyun	.byte		ashrsi3_14-ashrsi3_table
70*4882a593Smuzhiyun	.byte		ashrsi3_15-ashrsi3_table
71*4882a593Smuzhiyun	.byte		ashrsi3_16-ashrsi3_table
72*4882a593Smuzhiyun	.byte		ashrsi3_17-ashrsi3_table
73*4882a593Smuzhiyun	.byte		ashrsi3_18-ashrsi3_table
74*4882a593Smuzhiyun	.byte		ashrsi3_19-ashrsi3_table
75*4882a593Smuzhiyun	.byte		ashrsi3_20-ashrsi3_table
76*4882a593Smuzhiyun	.byte		ashrsi3_21-ashrsi3_table
77*4882a593Smuzhiyun	.byte		ashrsi3_22-ashrsi3_table
78*4882a593Smuzhiyun	.byte		ashrsi3_23-ashrsi3_table
79*4882a593Smuzhiyun	.byte		ashrsi3_24-ashrsi3_table
80*4882a593Smuzhiyun	.byte		ashrsi3_25-ashrsi3_table
81*4882a593Smuzhiyun	.byte		ashrsi3_26-ashrsi3_table
82*4882a593Smuzhiyun	.byte		ashrsi3_27-ashrsi3_table
83*4882a593Smuzhiyun	.byte		ashrsi3_28-ashrsi3_table
84*4882a593Smuzhiyun	.byte		ashrsi3_29-ashrsi3_table
85*4882a593Smuzhiyun	.byte		ashrsi3_30-ashrsi3_table
86*4882a593Smuzhiyun	.byte		ashrsi3_31-ashrsi3_table
87*4882a593Smuzhiyun
88*4882a593Smuzhiyunashrsi3_31:
89*4882a593Smuzhiyun	rotcl	r0
90*4882a593Smuzhiyun	rts
91*4882a593Smuzhiyun	subc	r0,r0
92*4882a593Smuzhiyun
93*4882a593Smuzhiyunashrsi3_30:
94*4882a593Smuzhiyun	shar	r0
95*4882a593Smuzhiyunashrsi3_29:
96*4882a593Smuzhiyun	shar	r0
97*4882a593Smuzhiyunashrsi3_28:
98*4882a593Smuzhiyun	shar	r0
99*4882a593Smuzhiyunashrsi3_27:
100*4882a593Smuzhiyun	shar	r0
101*4882a593Smuzhiyunashrsi3_26:
102*4882a593Smuzhiyun	shar	r0
103*4882a593Smuzhiyunashrsi3_25:
104*4882a593Smuzhiyun	shar	r0
105*4882a593Smuzhiyunashrsi3_24:
106*4882a593Smuzhiyun	shlr16	r0
107*4882a593Smuzhiyun	shlr8	r0
108*4882a593Smuzhiyun	rts
109*4882a593Smuzhiyun	exts.b	r0,r0
110*4882a593Smuzhiyun
111*4882a593Smuzhiyunashrsi3_23:
112*4882a593Smuzhiyun	shar	r0
113*4882a593Smuzhiyunashrsi3_22:
114*4882a593Smuzhiyun	shar	r0
115*4882a593Smuzhiyunashrsi3_21:
116*4882a593Smuzhiyun	shar	r0
117*4882a593Smuzhiyunashrsi3_20:
118*4882a593Smuzhiyun	shar	r0
119*4882a593Smuzhiyunashrsi3_19:
120*4882a593Smuzhiyun	shar	r0
121*4882a593Smuzhiyunashrsi3_18:
122*4882a593Smuzhiyun	shar	r0
123*4882a593Smuzhiyunashrsi3_17:
124*4882a593Smuzhiyun	shar	r0
125*4882a593Smuzhiyunashrsi3_16:
126*4882a593Smuzhiyun	shlr16	r0
127*4882a593Smuzhiyun	rts
128*4882a593Smuzhiyun	exts.w	r0,r0
129*4882a593Smuzhiyun
130*4882a593Smuzhiyunashrsi3_15:
131*4882a593Smuzhiyun	shar	r0
132*4882a593Smuzhiyunashrsi3_14:
133*4882a593Smuzhiyun	shar	r0
134*4882a593Smuzhiyunashrsi3_13:
135*4882a593Smuzhiyun	shar	r0
136*4882a593Smuzhiyunashrsi3_12:
137*4882a593Smuzhiyun	shar	r0
138*4882a593Smuzhiyunashrsi3_11:
139*4882a593Smuzhiyun	shar	r0
140*4882a593Smuzhiyunashrsi3_10:
141*4882a593Smuzhiyun	shar	r0
142*4882a593Smuzhiyunashrsi3_9:
143*4882a593Smuzhiyun	shar	r0
144*4882a593Smuzhiyunashrsi3_8:
145*4882a593Smuzhiyun	shar	r0
146*4882a593Smuzhiyunashrsi3_7:
147*4882a593Smuzhiyun	shar	r0
148*4882a593Smuzhiyunashrsi3_6:
149*4882a593Smuzhiyun	shar	r0
150*4882a593Smuzhiyunashrsi3_5:
151*4882a593Smuzhiyun	shar	r0
152*4882a593Smuzhiyunashrsi3_4:
153*4882a593Smuzhiyun	shar	r0
154*4882a593Smuzhiyunashrsi3_3:
155*4882a593Smuzhiyun	shar	r0
156*4882a593Smuzhiyunashrsi3_2:
157*4882a593Smuzhiyun	shar	r0
158*4882a593Smuzhiyunashrsi3_1:
159*4882a593Smuzhiyun	rts
160*4882a593Smuzhiyun	shar	r0
161*4882a593Smuzhiyun
162*4882a593Smuzhiyunashrsi3_0:
163*4882a593Smuzhiyun	rts
164*4882a593Smuzhiyun	nop
165