Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/lib/movmem.S
26439 views
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
[email protected] */
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)
218
219