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