1
2
3
4
5
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
17
18
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