1/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
2
3   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
4   2004, 2005, 2006
5   Free Software Foundation, Inc.
6*/
7
8!! libgcc routines for the Renesas / SuperH SH CPUs.
9!! Contributed by Steve Chamberlain.
10!! sac@cygnus.com
11
12!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
13!! recoded in assembly by Toshiyasu Morita
14!! tm@netcom.com
15
16/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
17   ELF local label prefixes by J"orn Rennecke
18   amylaar@cygnus.com  */
19
20!
21! __ashlsi3
22!
23! Entry:
24!
25! r4: Value to shift
26! r5: Shifts
27!
28! Exit:
29!
30! r0: Result
31!
32! Destroys:
33!
34! (none)
35!
36! __ashlsi3_r0
37!
38! Entry:
39!
40! r4: Value to shift
41! r0: Shifts
42!
43! Exit:
44!
45! r0: Result
46!
47! Destroys:
48!
49! (none)
50
51
52	.global	__ashlsi3
53	.global	__ashlsi3_r0
54
55	.align	2
56__ashlsi3:
57	mov	r5,r0
58	.align	2
59__ashlsi3_r0:
60	and	#31,r0
61	mov.l	r4,@-r15
62	mov	r0,r4
63	mova	ashlsi3_table,r0
64	mov.b	@(r0,r4),r4
65	add	r4,r0
66	jmp	@r0
67	mov.l	@r15+,r0
68
69	.align	2
70ashlsi3_table:
71	.byte		ashlsi3_0-ashlsi3_table
72	.byte		ashlsi3_1-ashlsi3_table
73	.byte		ashlsi3_2-ashlsi3_table
74	.byte		ashlsi3_3-ashlsi3_table
75	.byte		ashlsi3_4-ashlsi3_table
76	.byte		ashlsi3_5-ashlsi3_table
77	.byte		ashlsi3_6-ashlsi3_table
78	.byte		ashlsi3_7-ashlsi3_table
79	.byte		ashlsi3_8-ashlsi3_table
80	.byte		ashlsi3_9-ashlsi3_table
81	.byte		ashlsi3_10-ashlsi3_table
82	.byte		ashlsi3_11-ashlsi3_table
83	.byte		ashlsi3_12-ashlsi3_table
84	.byte		ashlsi3_13-ashlsi3_table
85	.byte		ashlsi3_14-ashlsi3_table
86	.byte		ashlsi3_15-ashlsi3_table
87	.byte		ashlsi3_16-ashlsi3_table
88	.byte		ashlsi3_17-ashlsi3_table
89	.byte		ashlsi3_18-ashlsi3_table
90	.byte		ashlsi3_19-ashlsi3_table
91	.byte		ashlsi3_20-ashlsi3_table
92	.byte		ashlsi3_21-ashlsi3_table
93	.byte		ashlsi3_22-ashlsi3_table
94	.byte		ashlsi3_23-ashlsi3_table
95	.byte		ashlsi3_24-ashlsi3_table
96	.byte		ashlsi3_25-ashlsi3_table
97	.byte		ashlsi3_26-ashlsi3_table
98	.byte		ashlsi3_27-ashlsi3_table
99	.byte		ashlsi3_28-ashlsi3_table
100	.byte		ashlsi3_29-ashlsi3_table
101	.byte		ashlsi3_30-ashlsi3_table
102	.byte		ashlsi3_31-ashlsi3_table
103
104ashlsi3_6:
105	shll2	r0
106ashlsi3_4:
107	shll2	r0
108ashlsi3_2:
109	rts
110	shll2	r0
111
112ashlsi3_7:
113	shll2	r0
114ashlsi3_5:
115	shll2	r0
116ashlsi3_3:
117	shll2	r0
118ashlsi3_1:
119	rts
120	shll	r0
121
122ashlsi3_14:
123	shll2	r0
124ashlsi3_12:
125	shll2	r0
126ashlsi3_10:
127	shll2	r0
128ashlsi3_8:
129	rts
130	shll8	r0
131
132ashlsi3_15:
133	shll2	r0
134ashlsi3_13:
135	shll2	r0
136ashlsi3_11:
137	shll2	r0
138ashlsi3_9:
139	shll8	r0
140	rts
141	shll	r0
142
143ashlsi3_22:
144	shll2	r0
145ashlsi3_20:
146	shll2	r0
147ashlsi3_18:
148	shll2	r0
149ashlsi3_16:
150	rts
151	shll16	r0
152
153ashlsi3_23:
154	shll2	r0
155ashlsi3_21:
156	shll2	r0
157ashlsi3_19:
158	shll2	r0
159ashlsi3_17:
160	shll16	r0
161	rts
162	shll	r0
163
164ashlsi3_30:
165	shll2	r0
166ashlsi3_28:
167	shll2	r0
168ashlsi3_26:
169	shll2	r0
170ashlsi3_24:
171	shll16	r0
172	rts
173	shll8	r0
174
175ashlsi3_31:
176	shll2	r0
177ashlsi3_29:
178	shll2	r0
179ashlsi3_27:
180	shll2	r0
181ashlsi3_25:
182	shll16	r0
183	shll8	r0
184	rts
185	shll	r0
186
187ashlsi3_0:
188	rts
189	nop
190