~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/sh/lib/movmem.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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         .text
 21         .balign 4
 22         .global __movmem
 23         .global __movstr
 24         .set __movstr, __movmem 
 25         /* This would be a lot simpler if r6 contained the byte count
 26            minus 64, and we wouldn't be called here for a byte count of 64.  */
 27 __movmem:
 28         sts.l   pr,@-r15
 29         shll2   r6
 30         bsr     __movmemSI52+2
 31         mov.l   @(48,r5),r0
 32         .balign 4
 33 movmem_loop: /* Reached with rts */
 34         mov.l   @(60,r5),r0
 35         add     #-64,r6
 36         mov.l   r0,@(60,r4)
 37         tst     r6,r6
 38         mov.l   @(56,r5),r0
 39         bt      movmem_done
 40         mov.l   r0,@(56,r4)
 41         cmp/pl  r6
 42         mov.l   @(52,r5),r0
 43         add     #64,r5
 44         mov.l   r0,@(52,r4)
 45         add     #64,r4
 46         bt      __movmemSI52
 47 ! done all the large groups, do the remainder
 48 ! jump to movmem+
 49         mova    __movmemSI4+4,r0
 50         add     r6,r0
 51         jmp     @r0
 52 movmem_done: ! share slot insn, works out aligned.
 53         lds.l   @r15+,pr
 54         mov.l   r0,@(56,r4)
 55         mov.l   @(52,r5),r0
 56         rts
 57         mov.l   r0,@(52,r4)
 58         .balign 4
 59 
 60         .global __movmemSI64
 61         .global __movstrSI64
 62         .set    __movstrSI64, __movmemSI64
 63 __movmemSI64:
 64         mov.l   @(60,r5),r0
 65         mov.l   r0,@(60,r4)
 66         .global __movmemSI60
 67         .global __movstrSI60
 68         .set    __movstrSI60, __movmemSI60
 69 __movmemSI60:
 70         mov.l   @(56,r5),r0
 71         mov.l   r0,@(56,r4)
 72         .global __movmemSI56
 73         .global __movstrSI56
 74         .set    __movstrSI56, __movmemSI56
 75 __movmemSI56:
 76         mov.l   @(52,r5),r0
 77         mov.l   r0,@(52,r4)
 78         .global __movmemSI52
 79         .global __movstrSI52
 80         .set    __movstrSI52, __movmemSI52
 81 __movmemSI52:
 82         mov.l   @(48,r5),r0
 83         mov.l   r0,@(48,r4)
 84         .global __movmemSI48
 85         .global __movstrSI48
 86         .set    __movstrSI48, __movmemSI48
 87 __movmemSI48:
 88         mov.l   @(44,r5),r0
 89         mov.l   r0,@(44,r4)
 90         .global __movmemSI44
 91         .global __movstrSI44
 92         .set    __movstrSI44, __movmemSI44
 93 __movmemSI44:
 94         mov.l   @(40,r5),r0
 95         mov.l   r0,@(40,r4)
 96         .global __movmemSI40
 97         .global __movstrSI40
 98         .set    __movstrSI40, __movmemSI40
 99 __movmemSI40:
100         mov.l   @(36,r5),r0
101         mov.l   r0,@(36,r4)
102         .global __movmemSI36
103         .global __movstrSI36
104         .set    __movstrSI36, __movmemSI36
105 __movmemSI36:
106         mov.l   @(32,r5),r0
107         mov.l   r0,@(32,r4)
108         .global __movmemSI32
109         .global __movstrSI32
110         .set    __movstrSI32, __movmemSI32
111 __movmemSI32:
112         mov.l   @(28,r5),r0
113         mov.l   r0,@(28,r4)
114         .global __movmemSI28
115         .global __movstrSI28
116         .set    __movstrSI28, __movmemSI28
117 __movmemSI28:
118         mov.l   @(24,r5),r0
119         mov.l   r0,@(24,r4)
120         .global __movmemSI24
121         .global __movstrSI24
122         .set    __movstrSI24, __movmemSI24
123 __movmemSI24:
124         mov.l   @(20,r5),r0
125         mov.l   r0,@(20,r4)
126         .global __movmemSI20
127         .global __movstrSI20
128         .set    __movstrSI20, __movmemSI20
129 __movmemSI20:
130         mov.l   @(16,r5),r0
131         mov.l   r0,@(16,r4)
132         .global __movmemSI16
133         .global __movstrSI16
134         .set    __movstrSI16, __movmemSI16
135 __movmemSI16:
136         mov.l   @(12,r5),r0
137         mov.l   r0,@(12,r4)
138         .global __movmemSI12
139         .global __movstrSI12
140         .set    __movstrSI12, __movmemSI12
141 __movmemSI12:
142         mov.l   @(8,r5),r0
143         mov.l   r0,@(8,r4)
144         .global __movmemSI8
145         .global __movstrSI8
146         .set    __movstrSI8, __movmemSI8
147 __movmemSI8:
148         mov.l   @(4,r5),r0
149         mov.l   r0,@(4,r4)
150         .global __movmemSI4
151         .global __movstrSI4
152         .set    __movstrSI4, __movmemSI4
153 __movmemSI4:
154         mov.l   @(0,r5),r0
155         rts
156         mov.l   r0,@(0,r4)
157 
158         .global __movmem_i4_even
159         .global __movstr_i4_even
160         .set    __movstr_i4_even, __movmem_i4_even
161 
162         .global __movmem_i4_odd
163         .global __movstr_i4_odd
164         .set    __movstr_i4_odd, __movmem_i4_odd
165 
166         .global __movmemSI12_i4
167         .global __movstrSI12_i4
168         .set    __movstrSI12_i4, __movmemSI12_i4
169 
170         .p2align        5
171 L_movmem_2mod4_end:
172         mov.l   r0,@(16,r4)
173         rts
174         mov.l   r1,@(20,r4)
175 
176         .p2align        2
177 
178 __movmem_i4_even:
179         mov.l   @r5+,r0
180         bra     L_movmem_start_even
181         mov.l   @r5+,r1
182 
183 __movmem_i4_odd:
184         mov.l   @r5+,r1
185         add     #-4,r4
186         mov.l   @r5+,r2
187         mov.l   @r5+,r3
188         mov.l   r1,@(4,r4)
189         mov.l   r2,@(8,r4)
190 
191 L_movmem_loop:
192         mov.l   r3,@(12,r4)
193         dt      r6
194         mov.l   @r5+,r0
195         bt/s    L_movmem_2mod4_end
196         mov.l   @r5+,r1
197         add     #16,r4
198 L_movmem_start_even:
199         mov.l   @r5+,r2
200         mov.l   @r5+,r3
201         mov.l   r0,@r4
202         dt      r6
203         mov.l   r1,@(4,r4)
204         bf/s    L_movmem_loop
205         mov.l   r2,@(8,r4)
206         rts
207         mov.l   r3,@(12,r4)
208 
209         .p2align        4
210 __movmemSI12_i4:
211         mov.l   @r5,r0
212         mov.l   @(4,r5),r1
213         mov.l   @(8,r5),r2
214         mov.l   r0,@r4
215         mov.l   r1,@(4,r4)
216         rts
217         mov.l   r2,@(8,r4)

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php