18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci   Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
48c2ecf20Sopenharmony_ci   2004, 2005, 2006
58c2ecf20Sopenharmony_ci   Free Software Foundation, Inc.
68c2ecf20Sopenharmony_ci*/
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci!! libgcc routines for the Renesas / SuperH SH CPUs.
98c2ecf20Sopenharmony_ci!! Contributed by Steve Chamberlain.
108c2ecf20Sopenharmony_ci!! sac@cygnus.com
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
138c2ecf20Sopenharmony_ci!! recoded in assembly by Toshiyasu Morita
148c2ecf20Sopenharmony_ci!! tm@netcom.com
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
178c2ecf20Sopenharmony_ci   ELF local label prefixes by J"orn Rennecke
188c2ecf20Sopenharmony_ci   amylaar@cygnus.com  */
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci!
218c2ecf20Sopenharmony_ci! __ashlsi3
228c2ecf20Sopenharmony_ci!
238c2ecf20Sopenharmony_ci! Entry:
248c2ecf20Sopenharmony_ci!
258c2ecf20Sopenharmony_ci! r4: Value to shift
268c2ecf20Sopenharmony_ci! r5: Shifts
278c2ecf20Sopenharmony_ci!
288c2ecf20Sopenharmony_ci! Exit:
298c2ecf20Sopenharmony_ci!
308c2ecf20Sopenharmony_ci! r0: Result
318c2ecf20Sopenharmony_ci!
328c2ecf20Sopenharmony_ci! Destroys:
338c2ecf20Sopenharmony_ci!
348c2ecf20Sopenharmony_ci! (none)
358c2ecf20Sopenharmony_ci!
368c2ecf20Sopenharmony_ci! __ashlsi3_r0
378c2ecf20Sopenharmony_ci!
388c2ecf20Sopenharmony_ci! Entry:
398c2ecf20Sopenharmony_ci!
408c2ecf20Sopenharmony_ci! r4: Value to shift
418c2ecf20Sopenharmony_ci! r0: Shifts
428c2ecf20Sopenharmony_ci!
438c2ecf20Sopenharmony_ci! Exit:
448c2ecf20Sopenharmony_ci!
458c2ecf20Sopenharmony_ci! r0: Result
468c2ecf20Sopenharmony_ci!
478c2ecf20Sopenharmony_ci! Destroys:
488c2ecf20Sopenharmony_ci!
498c2ecf20Sopenharmony_ci! (none)
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci	.global	__ashlsi3
538c2ecf20Sopenharmony_ci	.global	__ashlsi3_r0
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci	.align	2
568c2ecf20Sopenharmony_ci__ashlsi3:
578c2ecf20Sopenharmony_ci	mov	r5,r0
588c2ecf20Sopenharmony_ci	.align	2
598c2ecf20Sopenharmony_ci__ashlsi3_r0:
608c2ecf20Sopenharmony_ci	and	#31,r0
618c2ecf20Sopenharmony_ci	mov.l	r4,@-r15
628c2ecf20Sopenharmony_ci	mov	r0,r4
638c2ecf20Sopenharmony_ci	mova	ashlsi3_table,r0
648c2ecf20Sopenharmony_ci	mov.b	@(r0,r4),r4
658c2ecf20Sopenharmony_ci	add	r4,r0
668c2ecf20Sopenharmony_ci	jmp	@r0
678c2ecf20Sopenharmony_ci	mov.l	@r15+,r0
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci	.align	2
708c2ecf20Sopenharmony_ciashlsi3_table:
718c2ecf20Sopenharmony_ci	.byte		ashlsi3_0-ashlsi3_table
728c2ecf20Sopenharmony_ci	.byte		ashlsi3_1-ashlsi3_table
738c2ecf20Sopenharmony_ci	.byte		ashlsi3_2-ashlsi3_table
748c2ecf20Sopenharmony_ci	.byte		ashlsi3_3-ashlsi3_table
758c2ecf20Sopenharmony_ci	.byte		ashlsi3_4-ashlsi3_table
768c2ecf20Sopenharmony_ci	.byte		ashlsi3_5-ashlsi3_table
778c2ecf20Sopenharmony_ci	.byte		ashlsi3_6-ashlsi3_table
788c2ecf20Sopenharmony_ci	.byte		ashlsi3_7-ashlsi3_table
798c2ecf20Sopenharmony_ci	.byte		ashlsi3_8-ashlsi3_table
808c2ecf20Sopenharmony_ci	.byte		ashlsi3_9-ashlsi3_table
818c2ecf20Sopenharmony_ci	.byte		ashlsi3_10-ashlsi3_table
828c2ecf20Sopenharmony_ci	.byte		ashlsi3_11-ashlsi3_table
838c2ecf20Sopenharmony_ci	.byte		ashlsi3_12-ashlsi3_table
848c2ecf20Sopenharmony_ci	.byte		ashlsi3_13-ashlsi3_table
858c2ecf20Sopenharmony_ci	.byte		ashlsi3_14-ashlsi3_table
868c2ecf20Sopenharmony_ci	.byte		ashlsi3_15-ashlsi3_table
878c2ecf20Sopenharmony_ci	.byte		ashlsi3_16-ashlsi3_table
888c2ecf20Sopenharmony_ci	.byte		ashlsi3_17-ashlsi3_table
898c2ecf20Sopenharmony_ci	.byte		ashlsi3_18-ashlsi3_table
908c2ecf20Sopenharmony_ci	.byte		ashlsi3_19-ashlsi3_table
918c2ecf20Sopenharmony_ci	.byte		ashlsi3_20-ashlsi3_table
928c2ecf20Sopenharmony_ci	.byte		ashlsi3_21-ashlsi3_table
938c2ecf20Sopenharmony_ci	.byte		ashlsi3_22-ashlsi3_table
948c2ecf20Sopenharmony_ci	.byte		ashlsi3_23-ashlsi3_table
958c2ecf20Sopenharmony_ci	.byte		ashlsi3_24-ashlsi3_table
968c2ecf20Sopenharmony_ci	.byte		ashlsi3_25-ashlsi3_table
978c2ecf20Sopenharmony_ci	.byte		ashlsi3_26-ashlsi3_table
988c2ecf20Sopenharmony_ci	.byte		ashlsi3_27-ashlsi3_table
998c2ecf20Sopenharmony_ci	.byte		ashlsi3_28-ashlsi3_table
1008c2ecf20Sopenharmony_ci	.byte		ashlsi3_29-ashlsi3_table
1018c2ecf20Sopenharmony_ci	.byte		ashlsi3_30-ashlsi3_table
1028c2ecf20Sopenharmony_ci	.byte		ashlsi3_31-ashlsi3_table
1038c2ecf20Sopenharmony_ci
1048c2ecf20Sopenharmony_ciashlsi3_6:
1058c2ecf20Sopenharmony_ci	shll2	r0
1068c2ecf20Sopenharmony_ciashlsi3_4:
1078c2ecf20Sopenharmony_ci	shll2	r0
1088c2ecf20Sopenharmony_ciashlsi3_2:
1098c2ecf20Sopenharmony_ci	rts
1108c2ecf20Sopenharmony_ci	shll2	r0
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_ciashlsi3_7:
1138c2ecf20Sopenharmony_ci	shll2	r0
1148c2ecf20Sopenharmony_ciashlsi3_5:
1158c2ecf20Sopenharmony_ci	shll2	r0
1168c2ecf20Sopenharmony_ciashlsi3_3:
1178c2ecf20Sopenharmony_ci	shll2	r0
1188c2ecf20Sopenharmony_ciashlsi3_1:
1198c2ecf20Sopenharmony_ci	rts
1208c2ecf20Sopenharmony_ci	shll	r0
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ciashlsi3_14:
1238c2ecf20Sopenharmony_ci	shll2	r0
1248c2ecf20Sopenharmony_ciashlsi3_12:
1258c2ecf20Sopenharmony_ci	shll2	r0
1268c2ecf20Sopenharmony_ciashlsi3_10:
1278c2ecf20Sopenharmony_ci	shll2	r0
1288c2ecf20Sopenharmony_ciashlsi3_8:
1298c2ecf20Sopenharmony_ci	rts
1308c2ecf20Sopenharmony_ci	shll8	r0
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ciashlsi3_15:
1338c2ecf20Sopenharmony_ci	shll2	r0
1348c2ecf20Sopenharmony_ciashlsi3_13:
1358c2ecf20Sopenharmony_ci	shll2	r0
1368c2ecf20Sopenharmony_ciashlsi3_11:
1378c2ecf20Sopenharmony_ci	shll2	r0
1388c2ecf20Sopenharmony_ciashlsi3_9:
1398c2ecf20Sopenharmony_ci	shll8	r0
1408c2ecf20Sopenharmony_ci	rts
1418c2ecf20Sopenharmony_ci	shll	r0
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ciashlsi3_22:
1448c2ecf20Sopenharmony_ci	shll2	r0
1458c2ecf20Sopenharmony_ciashlsi3_20:
1468c2ecf20Sopenharmony_ci	shll2	r0
1478c2ecf20Sopenharmony_ciashlsi3_18:
1488c2ecf20Sopenharmony_ci	shll2	r0
1498c2ecf20Sopenharmony_ciashlsi3_16:
1508c2ecf20Sopenharmony_ci	rts
1518c2ecf20Sopenharmony_ci	shll16	r0
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ciashlsi3_23:
1548c2ecf20Sopenharmony_ci	shll2	r0
1558c2ecf20Sopenharmony_ciashlsi3_21:
1568c2ecf20Sopenharmony_ci	shll2	r0
1578c2ecf20Sopenharmony_ciashlsi3_19:
1588c2ecf20Sopenharmony_ci	shll2	r0
1598c2ecf20Sopenharmony_ciashlsi3_17:
1608c2ecf20Sopenharmony_ci	shll16	r0
1618c2ecf20Sopenharmony_ci	rts
1628c2ecf20Sopenharmony_ci	shll	r0
1638c2ecf20Sopenharmony_ci
1648c2ecf20Sopenharmony_ciashlsi3_30:
1658c2ecf20Sopenharmony_ci	shll2	r0
1668c2ecf20Sopenharmony_ciashlsi3_28:
1678c2ecf20Sopenharmony_ci	shll2	r0
1688c2ecf20Sopenharmony_ciashlsi3_26:
1698c2ecf20Sopenharmony_ci	shll2	r0
1708c2ecf20Sopenharmony_ciashlsi3_24:
1718c2ecf20Sopenharmony_ci	shll16	r0
1728c2ecf20Sopenharmony_ci	rts
1738c2ecf20Sopenharmony_ci	shll8	r0
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_ciashlsi3_31:
1768c2ecf20Sopenharmony_ci	shll2	r0
1778c2ecf20Sopenharmony_ciashlsi3_29:
1788c2ecf20Sopenharmony_ci	shll2	r0
1798c2ecf20Sopenharmony_ciashlsi3_27:
1808c2ecf20Sopenharmony_ci	shll2	r0
1818c2ecf20Sopenharmony_ciashlsi3_25:
1828c2ecf20Sopenharmony_ci	shll16	r0
1838c2ecf20Sopenharmony_ci	shll8	r0
1848c2ecf20Sopenharmony_ci	rts
1858c2ecf20Sopenharmony_ci	shll	r0
1868c2ecf20Sopenharmony_ci
1878c2ecf20Sopenharmony_ciashlsi3_0:
1888c2ecf20Sopenharmony_ci	rts
1898c2ecf20Sopenharmony_ci	nop
190