Lines Matching +full:0 +full:- +full:9 +full:a +full:- +full:b
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Memory copy functions for 32-bit PowerPC.
5 * Copyright (C) 1996-2005 Paul Mackerras.
12 #include <asm/code-patching-asm.h>
26 8 ## n ## 0: \
44 9 ## n ## 0: \
45 addi r5,r5,-(16 * n); \
46 b 104f; \
47 9 ## n ## 1: \
48 addi r5,r5,-(16 * n); \
49 b 105f; \
50 EX_TABLE(8 ## n ## 0b,9 ## n ## 0b); \
51 EX_TABLE(8 ## n ## 1b,9 ## n ## 0b); \
52 EX_TABLE(8 ## n ## 2b,9 ## n ## 0b); \
53 EX_TABLE(8 ## n ## 3b,9 ## n ## 0b); \
54 EX_TABLE(8 ## n ## 4b,9 ## n ## 1b); \
55 EX_TABLE(8 ## n ## 5b,9 ## n ## 1b); \
56 EX_TABLE(8 ## n ## 6b,9 ## n ## 1b); \
57 EX_TABLE(8 ## n ## 7b,9 ## n ## 1b)
63 CACHELINE_MASK = (L1_CACHE_BYTES-1)
68 addi r6, r3, -4
69 beq- 2f
70 rlwimi r4 ,r4 ,16 ,0 ,15
73 bdnz 1b
84 * area is cacheable. -- paulus
88 * replaced by a nop once cache is active. This is done in machine_init()
91 cmplwi 0,r5,4
95 rlwimi r4,r4,16,0,15
97 stw r4,0(r3)
102 cmplwi 0,r4,0
107 5: b 2f
108 patch_site 5b, patch__memset_nocache
110 clrlwi r7,r6,32-LG_CACHELINE_BYTES
113 addic. r9,r9,-1 /* total number of complete cachelines */
120 bdnz 4b
125 bdnz 10b
126 clrlwi r5,r8,32-LG_CACHELINE_BYTES
133 bdnz 1b
139 bdnz 8b
142 7: cmpwi 0,r5,0
145 addi r6,r3,-1
146 9: stbu r4,1(r6)
147 bdnz 9b
157 * -- paulus.
161 * replaced by a nop once cache is active. This is done in machine_init()
164 cmplw 0,r3,r4
169 1: b generic_memcpy
170 patch_site 1b, patch__memcpy_nocache
174 cmplw 0,r4,r7
176 crand 0,0,4 /* cr0.lt &= cr1.lt */
179 addi r4,r4,-4
180 addi r6,r3,-4
185 cmplw 0,r5,r0 /* is this more than total to do? */
187 andi. r8,r0,3 /* get it word-aligned first */
195 bdnz 70b
201 bdnz 72b
204 clrlwi r5,r5,32-LG_CACHELINE_BYTES
224 bdnz 53b
231 bdnz 30b
240 bdnz 40b
249 addi r6,r3,-4
250 addi r4,r4,-4
259 bdnz 1b
261 2: cmplwi 0,r5,4
264 addi r5,r5,-4
266 3: cmpwi 0,r5,0
273 bdnz 4b
281 bdnz 6b
283 rlwinm. r7,r5,32-3,3,31
284 beq 2b
286 b 1b
289 rlwinm. r7,r5,32-3,3,31 /* r0 = r5 >> 3 */
296 1: lwz r7,-4(r4)
297 lwzu r8,-8(r4)
298 stw r7,-4(r6)
299 stwu r8,-8(r6)
300 bdnz 1b
302 2: cmplwi 0,r5,4
304 lwzu r0,-4(r4)
306 stwu r0,-4(r6)
307 3: cmpwi 0,r5,0
310 4: lbzu r0,-1(r4)
311 stbu r0,-1(r6)
312 bdnz 4b
315 6: lbzu r7,-1(r4)
316 stbu r7,-1(r6)
317 bdnz 6b
319 rlwinm. r7,r5,32-3,3,31
320 beq 2b
322 b 1b
325 addi r4,r4,-4
326 addi r6,r3,-4
331 cmplw 0,r5,r0 /* is this more than total to do? */
333 andi. r8,r0,3 /* get it word-aligned first */
340 bdnz 70b
347 bdnz 72b
349 EX_TABLE(70b,100f)
350 EX_TABLE(71b,101f)
351 EX_TABLE(72b,102f)
352 EX_TABLE(73b,103f)
355 clrlwi r5,r5,32-LG_CACHELINE_BYTES
362 li r7,0
375 bdnz 111b
387 EX_TABLE(54b,105f)
389 COPY_16_BYTES_WITHEX(0)
403 bdnz 53b
404 cmpwi r0,0
406 li r7,0
407 bne 114b
414 bdnz 30b
423 bdnz 40b
424 65: li r3,0
427 /* read fault, initial single-byte copy */
428 100: li r9,0
429 b 90f
430 /* write fault, initial single-byte copy */
433 li r3,0
434 b 99f
436 102: li r9,0
437 b 91f
441 b 99f
447 COPY_16_BYTES_EXCODE(0)
463 104: li r9,0
464 b 92f
465 /* fault on dcbz (effectively a write fault) */
471 b 106f
473 108: li r9,0
474 b 93f
479 b 99f
481 110: li r9,0
482 b 94f
485 94: li r5,0
486 li r3,0
489 * r5 + (ctr << r3), and r9 is 0 for read or 1 for write.
495 cmpwi 0,r9,0
497 /* for a read fault, first try to continue the copy one byte at a time */
503 bdnz 130b
508 EX_TABLE(30b,108b)
509 EX_TABLE(31b,109b)
510 EX_TABLE(40b,110b)
511 EX_TABLE(41b,111b)
512 EX_TABLE(130b,132b)
513 EX_TABLE(131b,120b)