xref: /openbmc/linux/arch/sh/lib/ashlsi3.S (revision 597473720f4dc69749542bfcfed4a927a43d935e)
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
190