/* SPDX-License-Identifier: GPL-2.0 */
/*
* String handling functions for PowerPC32
*
* Copyright ( C ) 1996 Paul Mackerras .
*
*/
#include <linux/export.h>
#include <asm/ppc_asm.h>
#include <asm/cache.h>
.text
CACHELINE_BYTES = L1_CACHE_BYTES
LG_CACHELINE_BYTES = L1_CACHE_SHIFT
CACHELINE_MASK = (L1_CACHE_BYTES-1 )
_GLOBAL (__arch_clear_user)
/*
* Use dcbz on the complete cache lines in the destination
* to set them to zero . This requires that the destination
* area is cacheable .
*/
cmplwi cr0, r4, 4
mr r10, r3
li r3, 0
blt 7 f
11 : stw r3, 0 (r10)
beqlr
andi. r0, r10, 3
add r11, r0, r4
subf r6, r0, r10
clrlwi r7, r6, 32 - LG_CACHELINE_BYTES
add r8, r7, r11
srwi r9, r8, LG_CACHELINE_BYTES
addic. r9, r9, -1 /* total number of complete cachelines */
ble 2 f
xori r0, r7, CACHELINE_MASK & ~3
srwi. r0, r0, 2
beq 3 f
mtctr r0
4 : stwu r3, 4 (r6)
bdnz 4 b
3 : mtctr r9
li r7, 4
10 : dcbz r7, r6
addi r6, r6, CACHELINE_BYTES
bdnz 10 b
clrlwi r11, r8, 32 - LG_CACHELINE_BYTES
addi r11, r11, 4
2 : srwi r0 ,r11 ,2
mtctr r0
bdz 6 f
1 : stwu r3, 4 (r6)
bdnz 1 b
6 : andi. r11, r11, 3
beqlr
mtctr r11
addi r6, r6, 3
8 : stbu r3, 1 (r6)
bdnz 8 b
blr
7 : cmpwi cr0, r4, 0
beqlr
mtctr r4
addi r6, r10, -1
9 : stbu r3, 1 (r6)
bdnz 9 b
blr
90 : mr r3, r4
blr
91 : add r3, r10, r4
subf r3, r6, r3
blr
EX_TABLE(11 b, 90 b)
EX_TABLE(4 b, 91 b)
EX_TABLE(10 b, 91 b)
EX_TABLE(1 b, 91 b)
EX_TABLE(8 b, 91 b)
EX_TABLE(9 b, 91 b)
EXPORT_SYMBOL(__arch_clear_user)
Messung V0.5 in Prozent C=96 H=100 G=97
¤ Dauer der Verarbeitung: 0.23 Sekunden
(vorverarbeitet am 2026-10-01)
¤
*© Formatika GbR, Deutschland