xref: /OK3568_Linux_fs/kernel/arch/sh/lib/ashrsi3.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, 2006
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!! 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! __ashrsi3_r0
37*4882a593Smuzhiyun!
38*4882a593Smuzhiyun! Entry:
39*4882a593Smuzhiyun!
40*4882a593Smuzhiyun! r4: Value to shift
41*4882a593Smuzhiyun! r0: Shifts
42*4882a593Smuzhiyun!
43*4882a593Smuzhiyun! Exit:
44*4882a593Smuzhiyun!
45*4882a593Smuzhiyun! r0: Result
46*4882a593Smuzhiyun!
47*4882a593Smuzhiyun! Destroys:
48*4882a593Smuzhiyun!
49*4882a593Smuzhiyun! (none)
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun	.global	__ashrsi3
52*4882a593Smuzhiyun	.global	__ashrsi3_r0
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun	.align	2
55*4882a593Smuzhiyun__ashrsi3:
56*4882a593Smuzhiyun	mov	r5,r0
57*4882a593Smuzhiyun	.align	2
58*4882a593Smuzhiyun__ashrsi3_r0:
59*4882a593Smuzhiyun	and	#31,r0
60*4882a593Smuzhiyun	mov.l	r4,@-r15
61*4882a593Smuzhiyun	mov	r0,r4
62*4882a593Smuzhiyun	mova	ashrsi3_table,r0
63*4882a593Smuzhiyun	mov.b	@(r0,r4),r4
64*4882a593Smuzhiyun	add	r4,r0
65*4882a593Smuzhiyun	jmp	@r0
66*4882a593Smuzhiyun	mov.l	@r15+,r0
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun	.align	2
69*4882a593Smuzhiyunashrsi3_table:
70*4882a593Smuzhiyun	.byte		ashrsi3_0-ashrsi3_table
71*4882a593Smuzhiyun	.byte		ashrsi3_1-ashrsi3_table
72*4882a593Smuzhiyun	.byte		ashrsi3_2-ashrsi3_table
73*4882a593Smuzhiyun	.byte		ashrsi3_3-ashrsi3_table
74*4882a593Smuzhiyun	.byte		ashrsi3_4-ashrsi3_table
75*4882a593Smuzhiyun	.byte		ashrsi3_5-ashrsi3_table
76*4882a593Smuzhiyun	.byte		ashrsi3_6-ashrsi3_table
77*4882a593Smuzhiyun	.byte		ashrsi3_7-ashrsi3_table
78*4882a593Smuzhiyun	.byte		ashrsi3_8-ashrsi3_table
79*4882a593Smuzhiyun	.byte		ashrsi3_9-ashrsi3_table
80*4882a593Smuzhiyun	.byte		ashrsi3_10-ashrsi3_table
81*4882a593Smuzhiyun	.byte		ashrsi3_11-ashrsi3_table
82*4882a593Smuzhiyun	.byte		ashrsi3_12-ashrsi3_table
83*4882a593Smuzhiyun	.byte		ashrsi3_13-ashrsi3_table
84*4882a593Smuzhiyun	.byte		ashrsi3_14-ashrsi3_table
85*4882a593Smuzhiyun	.byte		ashrsi3_15-ashrsi3_table
86*4882a593Smuzhiyun	.byte		ashrsi3_16-ashrsi3_table
87*4882a593Smuzhiyun	.byte		ashrsi3_17-ashrsi3_table
88*4882a593Smuzhiyun	.byte		ashrsi3_18-ashrsi3_table
89*4882a593Smuzhiyun	.byte		ashrsi3_19-ashrsi3_table
90*4882a593Smuzhiyun	.byte		ashrsi3_20-ashrsi3_table
91*4882a593Smuzhiyun	.byte		ashrsi3_21-ashrsi3_table
92*4882a593Smuzhiyun	.byte		ashrsi3_22-ashrsi3_table
93*4882a593Smuzhiyun	.byte		ashrsi3_23-ashrsi3_table
94*4882a593Smuzhiyun	.byte		ashrsi3_24-ashrsi3_table
95*4882a593Smuzhiyun	.byte		ashrsi3_25-ashrsi3_table
96*4882a593Smuzhiyun	.byte		ashrsi3_26-ashrsi3_table
97*4882a593Smuzhiyun	.byte		ashrsi3_27-ashrsi3_table
98*4882a593Smuzhiyun	.byte		ashrsi3_28-ashrsi3_table
99*4882a593Smuzhiyun	.byte		ashrsi3_29-ashrsi3_table
100*4882a593Smuzhiyun	.byte		ashrsi3_30-ashrsi3_table
101*4882a593Smuzhiyun	.byte		ashrsi3_31-ashrsi3_table
102*4882a593Smuzhiyun
103*4882a593Smuzhiyunashrsi3_31:
104*4882a593Smuzhiyun	rotcl	r0
105*4882a593Smuzhiyun	rts
106*4882a593Smuzhiyun	subc	r0,r0
107*4882a593Smuzhiyun
108*4882a593Smuzhiyunashrsi3_30:
109*4882a593Smuzhiyun	shar	r0
110*4882a593Smuzhiyunashrsi3_29:
111*4882a593Smuzhiyun	shar	r0
112*4882a593Smuzhiyunashrsi3_28:
113*4882a593Smuzhiyun	shar	r0
114*4882a593Smuzhiyunashrsi3_27:
115*4882a593Smuzhiyun	shar	r0
116*4882a593Smuzhiyunashrsi3_26:
117*4882a593Smuzhiyun	shar	r0
118*4882a593Smuzhiyunashrsi3_25:
119*4882a593Smuzhiyun	shar	r0
120*4882a593Smuzhiyunashrsi3_24:
121*4882a593Smuzhiyun	shlr16	r0
122*4882a593Smuzhiyun	shlr8	r0
123*4882a593Smuzhiyun	rts
124*4882a593Smuzhiyun	exts.b	r0,r0
125*4882a593Smuzhiyun
126*4882a593Smuzhiyunashrsi3_23:
127*4882a593Smuzhiyun	shar	r0
128*4882a593Smuzhiyunashrsi3_22:
129*4882a593Smuzhiyun	shar	r0
130*4882a593Smuzhiyunashrsi3_21:
131*4882a593Smuzhiyun	shar	r0
132*4882a593Smuzhiyunashrsi3_20:
133*4882a593Smuzhiyun	shar	r0
134*4882a593Smuzhiyunashrsi3_19:
135*4882a593Smuzhiyun	shar	r0
136*4882a593Smuzhiyunashrsi3_18:
137*4882a593Smuzhiyun	shar	r0
138*4882a593Smuzhiyunashrsi3_17:
139*4882a593Smuzhiyun	shar	r0
140*4882a593Smuzhiyunashrsi3_16:
141*4882a593Smuzhiyun	shlr16	r0
142*4882a593Smuzhiyun	rts
143*4882a593Smuzhiyun	exts.w	r0,r0
144*4882a593Smuzhiyun
145*4882a593Smuzhiyunashrsi3_15:
146*4882a593Smuzhiyun	shar	r0
147*4882a593Smuzhiyunashrsi3_14:
148*4882a593Smuzhiyun	shar	r0
149*4882a593Smuzhiyunashrsi3_13:
150*4882a593Smuzhiyun	shar	r0
151*4882a593Smuzhiyunashrsi3_12:
152*4882a593Smuzhiyun	shar	r0
153*4882a593Smuzhiyunashrsi3_11:
154*4882a593Smuzhiyun	shar	r0
155*4882a593Smuzhiyunashrsi3_10:
156*4882a593Smuzhiyun	shar	r0
157*4882a593Smuzhiyunashrsi3_9:
158*4882a593Smuzhiyun	shar	r0
159*4882a593Smuzhiyunashrsi3_8:
160*4882a593Smuzhiyun	shar	r0
161*4882a593Smuzhiyunashrsi3_7:
162*4882a593Smuzhiyun	shar	r0
163*4882a593Smuzhiyunashrsi3_6:
164*4882a593Smuzhiyun	shar	r0
165*4882a593Smuzhiyunashrsi3_5:
166*4882a593Smuzhiyun	shar	r0
167*4882a593Smuzhiyunashrsi3_4:
168*4882a593Smuzhiyun	shar	r0
169*4882a593Smuzhiyunashrsi3_3:
170*4882a593Smuzhiyun	shar	r0
171*4882a593Smuzhiyunashrsi3_2:
172*4882a593Smuzhiyun	shar	r0
173*4882a593Smuzhiyunashrsi3_1:
174*4882a593Smuzhiyun	rts
175*4882a593Smuzhiyun	shar	r0
176*4882a593Smuzhiyun
177*4882a593Smuzhiyunashrsi3_0:
178*4882a593Smuzhiyun	rts
179*4882a593Smuzhiyun	nop
180