xref: /openbmc/linux/arch/sh/lib/ashlsi3.S (revision f3a8b664)
1/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2   2004, 2005, 2006
3   Free Software Foundation, Inc.
4
5This file is free software; you can redistribute it and/or modify it
6under the terms of the GNU General Public License as published by the
7Free Software Foundation; either version 2, or (at your option) any
8later version.
9
10In addition to the permissions in the GNU General Public License, the
11Free Software Foundation gives you unlimited permission to link the
12compiled version of this file into combinations with other programs,
13and to distribute those combinations without any restriction coming
14from the use of this file.  (The General Public License restrictions
15do apply in other respects; for example, they cover modification of
16the file, and distribution when not linked into a combine
17executable.)
18
19This file is distributed in the hope that it will be useful, but
20WITHOUT ANY WARRANTY; without even the implied warranty of
21MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22General Public License for more details.
23
24You should have received a copy of the GNU General Public License
25along with this program; see the file COPYING.  If not, write to
26the Free Software Foundation, 51 Franklin Street, Fifth Floor,
27Boston, MA 02110-1301, USA.  */
28
29!! libgcc routines for the Renesas / SuperH SH CPUs.
30!! Contributed by Steve Chamberlain.
31!! sac@cygnus.com
32
33!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
34!! recoded in assembly by Toshiyasu Morita
35!! tm@netcom.com
36
37/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
38   ELF local label prefixes by J"orn Rennecke
39   amylaar@cygnus.com  */
40
41!
42! __ashlsi3
43!
44! Entry:
45!
46! r4: Value to shift
47! r5: Shifts
48!
49! Exit:
50!
51! r0: Result
52!
53! Destroys:
54!
55! (none)
56!
57! __ashlsi3_r0
58!
59! Entry:
60!
61! r4: Value to shift
62! r0: Shifts
63!
64! Exit:
65!
66! r0: Result
67!
68! Destroys:
69!
70! (none)
71
72
73	.global	__ashlsi3
74	.global	__ashlsi3_r0
75
76	.align	2
77__ashlsi3:
78	mov	r5,r0
79	.align	2
80__ashlsi3_r0:
81	and	#31,r0
82	mov.l	r4,@-r15
83	mov	r0,r4
84	mova	ashlsi3_table,r0
85	mov.b	@(r0,r4),r4
86	add	r4,r0
87	jmp	@r0
88	mov.l	@r15+,r0
89
90	.align	2
91ashlsi3_table:
92	.byte		ashlsi3_0-ashlsi3_table
93	.byte		ashlsi3_1-ashlsi3_table
94	.byte		ashlsi3_2-ashlsi3_table
95	.byte		ashlsi3_3-ashlsi3_table
96	.byte		ashlsi3_4-ashlsi3_table
97	.byte		ashlsi3_5-ashlsi3_table
98	.byte		ashlsi3_6-ashlsi3_table
99	.byte		ashlsi3_7-ashlsi3_table
100	.byte		ashlsi3_8-ashlsi3_table
101	.byte		ashlsi3_9-ashlsi3_table
102	.byte		ashlsi3_10-ashlsi3_table
103	.byte		ashlsi3_11-ashlsi3_table
104	.byte		ashlsi3_12-ashlsi3_table
105	.byte		ashlsi3_13-ashlsi3_table
106	.byte		ashlsi3_14-ashlsi3_table
107	.byte		ashlsi3_15-ashlsi3_table
108	.byte		ashlsi3_16-ashlsi3_table
109	.byte		ashlsi3_17-ashlsi3_table
110	.byte		ashlsi3_18-ashlsi3_table
111	.byte		ashlsi3_19-ashlsi3_table
112	.byte		ashlsi3_20-ashlsi3_table
113	.byte		ashlsi3_21-ashlsi3_table
114	.byte		ashlsi3_22-ashlsi3_table
115	.byte		ashlsi3_23-ashlsi3_table
116	.byte		ashlsi3_24-ashlsi3_table
117	.byte		ashlsi3_25-ashlsi3_table
118	.byte		ashlsi3_26-ashlsi3_table
119	.byte		ashlsi3_27-ashlsi3_table
120	.byte		ashlsi3_28-ashlsi3_table
121	.byte		ashlsi3_29-ashlsi3_table
122	.byte		ashlsi3_30-ashlsi3_table
123	.byte		ashlsi3_31-ashlsi3_table
124
125ashlsi3_6:
126	shll2	r0
127ashlsi3_4:
128	shll2	r0
129ashlsi3_2:
130	rts
131	shll2	r0
132
133ashlsi3_7:
134	shll2	r0
135ashlsi3_5:
136	shll2	r0
137ashlsi3_3:
138	shll2	r0
139ashlsi3_1:
140	rts
141	shll	r0
142
143ashlsi3_14:
144	shll2	r0
145ashlsi3_12:
146	shll2	r0
147ashlsi3_10:
148	shll2	r0
149ashlsi3_8:
150	rts
151	shll8	r0
152
153ashlsi3_15:
154	shll2	r0
155ashlsi3_13:
156	shll2	r0
157ashlsi3_11:
158	shll2	r0
159ashlsi3_9:
160	shll8	r0
161	rts
162	shll	r0
163
164ashlsi3_22:
165	shll2	r0
166ashlsi3_20:
167	shll2	r0
168ashlsi3_18:
169	shll2	r0
170ashlsi3_16:
171	rts
172	shll16	r0
173
174ashlsi3_23:
175	shll2	r0
176ashlsi3_21:
177	shll2	r0
178ashlsi3_19:
179	shll2	r0
180ashlsi3_17:
181	shll16	r0
182	rts
183	shll	r0
184
185ashlsi3_30:
186	shll2	r0
187ashlsi3_28:
188	shll2	r0
189ashlsi3_26:
190	shll2	r0
191ashlsi3_24:
192	shll16	r0
193	rts
194	shll8	r0
195
196ashlsi3_31:
197	shll2	r0
198ashlsi3_29:
199	shll2	r0
200ashlsi3_27:
201	shll2	r0
202ashlsi3_25:
203	shll16	r0
204	shll8	r0
205	rts
206	shll	r0
207
208ashlsi3_0:
209	rts
210	nop
211