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

source code of linux/arch/sh/lib/ashlsi3.S