Loading...
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! __lshrsi3
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 .global __lshrsi3
58
59 .align 2
60__lshrsi3:
61 mov #31,r0
62 and r0,r5
63 mova lshrsi3_table,r0
64 mov.b @(r0,r5),r5
65#ifdef __sh1__
66 add r5,r0
67 jmp @r0
68#else
69 braf r5
70#endif
71 mov r4,r0
72
73 .align 2
74lshrsi3_table:
75 .byte lshrsi3_0-lshrsi3_table
76 .byte lshrsi3_1-lshrsi3_table
77 .byte lshrsi3_2-lshrsi3_table
78 .byte lshrsi3_3-lshrsi3_table
79 .byte lshrsi3_4-lshrsi3_table
80 .byte lshrsi3_5-lshrsi3_table
81 .byte lshrsi3_6-lshrsi3_table
82 .byte lshrsi3_7-lshrsi3_table
83 .byte lshrsi3_8-lshrsi3_table
84 .byte lshrsi3_9-lshrsi3_table
85 .byte lshrsi3_10-lshrsi3_table
86 .byte lshrsi3_11-lshrsi3_table
87 .byte lshrsi3_12-lshrsi3_table
88 .byte lshrsi3_13-lshrsi3_table
89 .byte lshrsi3_14-lshrsi3_table
90 .byte lshrsi3_15-lshrsi3_table
91 .byte lshrsi3_16-lshrsi3_table
92 .byte lshrsi3_17-lshrsi3_table
93 .byte lshrsi3_18-lshrsi3_table
94 .byte lshrsi3_19-lshrsi3_table
95 .byte lshrsi3_20-lshrsi3_table
96 .byte lshrsi3_21-lshrsi3_table
97 .byte lshrsi3_22-lshrsi3_table
98 .byte lshrsi3_23-lshrsi3_table
99 .byte lshrsi3_24-lshrsi3_table
100 .byte lshrsi3_25-lshrsi3_table
101 .byte lshrsi3_26-lshrsi3_table
102 .byte lshrsi3_27-lshrsi3_table
103 .byte lshrsi3_28-lshrsi3_table
104 .byte lshrsi3_29-lshrsi3_table
105 .byte lshrsi3_30-lshrsi3_table
106 .byte lshrsi3_31-lshrsi3_table
107
108lshrsi3_6:
109 shlr2 r0
110lshrsi3_4:
111 shlr2 r0
112lshrsi3_2:
113 rts
114 shlr2 r0
115
116lshrsi3_7:
117 shlr2 r0
118lshrsi3_5:
119 shlr2 r0
120lshrsi3_3:
121 shlr2 r0
122lshrsi3_1:
123 rts
124 shlr r0
125
126lshrsi3_14:
127 shlr2 r0
128lshrsi3_12:
129 shlr2 r0
130lshrsi3_10:
131 shlr2 r0
132lshrsi3_8:
133 rts
134 shlr8 r0
135
136lshrsi3_15:
137 shlr2 r0
138lshrsi3_13:
139 shlr2 r0
140lshrsi3_11:
141 shlr2 r0
142lshrsi3_9:
143 shlr8 r0
144 rts
145 shlr r0
146
147lshrsi3_22:
148 shlr2 r0
149lshrsi3_20:
150 shlr2 r0
151lshrsi3_18:
152 shlr2 r0
153lshrsi3_16:
154 rts
155 shlr16 r0
156
157lshrsi3_23:
158 shlr2 r0
159lshrsi3_21:
160 shlr2 r0
161lshrsi3_19:
162 shlr2 r0
163lshrsi3_17:
164 shlr16 r0
165 rts
166 shlr r0
167
168lshrsi3_30:
169 shlr2 r0
170lshrsi3_28:
171 shlr2 r0
172lshrsi3_26:
173 shlr2 r0
174lshrsi3_24:
175 shlr16 r0
176 rts
177 shlr8 r0
178
179lshrsi3_31:
180 shlr2 r0
181lshrsi3_29:
182 shlr2 r0
183lshrsi3_27:
184 shlr2 r0
185lshrsi3_25:
186 shlr16 r0
187 shlr8 r0
188 rts
189 shlr r0
190
191lshrsi3_0:
192 rts
193 nop
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! __lshrsi3
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! __lshrsi3_r0
37!
38! Entry:
39!
40! r0: Value to shift
41! r5: Shifts
42!
43! Exit:
44!
45! r0: Result
46!
47! Destroys:
48!
49! (none)
50!
51 .global __lshrsi3
52 .global __lshrsi3_r0
53
54 .align 2
55__lshrsi3:
56 mov r5,r0
57 .align 2
58__lshrsi3_r0:
59 and #31,r0
60 mov.l r4,@-r15
61 mov r0,r4
62 mova lshrsi3_table,r0
63 mov.b @(r0,r4),r4
64 add r4,r0
65 jmp @r0
66 mov.l @r15+,r0
67
68 .align 2
69lshrsi3_table:
70 .byte lshrsi3_0-lshrsi3_table
71 .byte lshrsi3_1-lshrsi3_table
72 .byte lshrsi3_2-lshrsi3_table
73 .byte lshrsi3_3-lshrsi3_table
74 .byte lshrsi3_4-lshrsi3_table
75 .byte lshrsi3_5-lshrsi3_table
76 .byte lshrsi3_6-lshrsi3_table
77 .byte lshrsi3_7-lshrsi3_table
78 .byte lshrsi3_8-lshrsi3_table
79 .byte lshrsi3_9-lshrsi3_table
80 .byte lshrsi3_10-lshrsi3_table
81 .byte lshrsi3_11-lshrsi3_table
82 .byte lshrsi3_12-lshrsi3_table
83 .byte lshrsi3_13-lshrsi3_table
84 .byte lshrsi3_14-lshrsi3_table
85 .byte lshrsi3_15-lshrsi3_table
86 .byte lshrsi3_16-lshrsi3_table
87 .byte lshrsi3_17-lshrsi3_table
88 .byte lshrsi3_18-lshrsi3_table
89 .byte lshrsi3_19-lshrsi3_table
90 .byte lshrsi3_20-lshrsi3_table
91 .byte lshrsi3_21-lshrsi3_table
92 .byte lshrsi3_22-lshrsi3_table
93 .byte lshrsi3_23-lshrsi3_table
94 .byte lshrsi3_24-lshrsi3_table
95 .byte lshrsi3_25-lshrsi3_table
96 .byte lshrsi3_26-lshrsi3_table
97 .byte lshrsi3_27-lshrsi3_table
98 .byte lshrsi3_28-lshrsi3_table
99 .byte lshrsi3_29-lshrsi3_table
100 .byte lshrsi3_30-lshrsi3_table
101 .byte lshrsi3_31-lshrsi3_table
102
103lshrsi3_6:
104 shlr2 r0
105lshrsi3_4:
106 shlr2 r0
107lshrsi3_2:
108 rts
109 shlr2 r0
110
111lshrsi3_7:
112 shlr2 r0
113lshrsi3_5:
114 shlr2 r0
115lshrsi3_3:
116 shlr2 r0
117lshrsi3_1:
118 rts
119 shlr r0
120
121lshrsi3_14:
122 shlr2 r0
123lshrsi3_12:
124 shlr2 r0
125lshrsi3_10:
126 shlr2 r0
127lshrsi3_8:
128 rts
129 shlr8 r0
130
131lshrsi3_15:
132 shlr2 r0
133lshrsi3_13:
134 shlr2 r0
135lshrsi3_11:
136 shlr2 r0
137lshrsi3_9:
138 shlr8 r0
139 rts
140 shlr r0
141
142lshrsi3_22:
143 shlr2 r0
144lshrsi3_20:
145 shlr2 r0
146lshrsi3_18:
147 shlr2 r0
148lshrsi3_16:
149 rts
150 shlr16 r0
151
152lshrsi3_23:
153 shlr2 r0
154lshrsi3_21:
155 shlr2 r0
156lshrsi3_19:
157 shlr2 r0
158lshrsi3_17:
159 shlr16 r0
160 rts
161 shlr r0
162
163lshrsi3_30:
164 shlr2 r0
165lshrsi3_28:
166 shlr2 r0
167lshrsi3_26:
168 shlr2 r0
169lshrsi3_24:
170 shlr16 r0
171 rts
172 shlr8 r0
173
174lshrsi3_31:
175 shlr2 r0
176lshrsi3_29:
177 shlr2 r0
178lshrsi3_27:
179 shlr2 r0
180lshrsi3_25:
181 shlr16 r0
182 shlr8 r0
183 rts
184 shlr r0
185
186lshrsi3_0:
187 rts
188 nop