1 /* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3 Free Software Foundation, Inc.
5 This file is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 2, or (at your option) any
10 In addition to the permissions in the GNU General Public License, the
11 Free Software Foundation gives you unlimited permission to link the
12 compiled version of this file into combinations with other programs,
13 and to distribute those combinations without any restriction coming
14 from the use of this file. (The General Public License restrictions
15 do apply in other respects; for example, they cover modification of
16 the file, and distribution when not linked into a combine
19 This file is distributed in the hope that it will be useful, but
20 WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 General Public License for more details.
24 You should have received a copy of the GNU General Public License
25 along with this program; see the file COPYING. If not, write to
26 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
27 Boston, MA 02110-1301, USA. */
29 !! libgcc routines for the Renesas / SuperH SH CPUs.
30 !! Contributed by Steve Chamberlain.
33 !! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
34 !! recoded in assembly by Toshiyasu Morita
37 /* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
38 ELF local label prefixes by J"orn Rennecke
45 .set __movstr, __movmem
46 /* This would be a lot simpler if r6 contained the byte count
47 minus 64, and we wouldn't be called here for a byte count of 64. */
54 movmem_loop: /* Reached with rts */
68 ! done all the large groups, do the remainder
73 movmem_done: ! share slot insn, works out aligned.
83 .set __movstrSI64, __movmemSI64
89 .set __movstrSI60, __movmemSI60
95 .set __movstrSI56, __movmemSI56
101 .set __movstrSI52, __movmemSI52
107 .set __movstrSI48, __movmemSI48
113 .set __movstrSI44, __movmemSI44
119 .set __movstrSI40, __movmemSI40
125 .set __movstrSI36, __movmemSI36
131 .set __movstrSI32, __movmemSI32
137 .set __movstrSI28, __movmemSI28
143 .set __movstrSI24, __movmemSI24
149 .set __movstrSI20, __movmemSI20
155 .set __movstrSI16, __movmemSI16
161 .set __movstrSI12, __movmemSI12
167 .set __movstrSI8, __movmemSI8
173 .set __movstrSI4, __movmemSI4
179 .global __movmem_i4_even
180 .global __movstr_i4_even
181 .set __movstr_i4_even, __movmem_i4_even
183 .global __movmem_i4_odd
184 .global __movstr_i4_odd
185 .set __movstr_i4_odd, __movmem_i4_odd
187 .global __movmemSI12_i4
188 .global __movstrSI12_i4
189 .set __movstrSI12_i4, __movmemSI12_i4
201 bra L_movmem_start_even
216 bt/s L_movmem_2mod4_end