GNU Linux-libre 6.7.9-gnu
[releases.git] / arch / sh / lib / ashlsi3.S
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
70 ashlsi3_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
104 ashlsi3_6:
105         shll2   r0
106 ashlsi3_4:
107         shll2   r0
108 ashlsi3_2:
109         rts
110         shll2   r0
111
112 ashlsi3_7:
113         shll2   r0
114 ashlsi3_5:
115         shll2   r0
116 ashlsi3_3:
117         shll2   r0
118 ashlsi3_1:
119         rts
120         shll    r0
121
122 ashlsi3_14:
123         shll2   r0
124 ashlsi3_12:
125         shll2   r0
126 ashlsi3_10:
127         shll2   r0
128 ashlsi3_8:
129         rts
130         shll8   r0
131
132 ashlsi3_15:
133         shll2   r0
134 ashlsi3_13:
135         shll2   r0
136 ashlsi3_11:
137         shll2   r0
138 ashlsi3_9:
139         shll8   r0
140         rts
141         shll    r0
142
143 ashlsi3_22:
144         shll2   r0
145 ashlsi3_20:
146         shll2   r0
147 ashlsi3_18:
148         shll2   r0
149 ashlsi3_16:
150         rts
151         shll16  r0
152
153 ashlsi3_23:
154         shll2   r0
155 ashlsi3_21:
156         shll2   r0
157 ashlsi3_19:
158         shll2   r0
159 ashlsi3_17:
160         shll16  r0
161         rts
162         shll    r0
163
164 ashlsi3_30:
165         shll2   r0
166 ashlsi3_28:
167         shll2   r0
168 ashlsi3_26:
169         shll2   r0
170 ashlsi3_24:
171         shll16  r0
172         rts
173         shll8   r0
174
175 ashlsi3_31:
176         shll2   r0
177 ashlsi3_29:
178         shll2   r0
179 ashlsi3_27:
180         shll2   r0
181 ashlsi3_25:
182         shll16  r0
183         shll8   r0
184         rts
185         shll    r0
186
187 ashlsi3_0:
188         rts
189         nop