/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* String handling functions for PowerPC.
*
* Copyright (C) 1996 Paul Mackerras.
*/
#include <linux/export.h>
#include <asm/processor.h>
#include <asm/errno.h>
#include <asm/ppc_asm.h>
#include <asm/kasan.h>
#ifndef CONFIG_KASAN
_GLOBAL (__memset16)
rlwimi r4,r4,16 ,0 ,15
/* fall through */
_GLOBAL (__memset32)
rldimi r4,r4,32 ,0
/* fall through */
_GLOBAL (__memset64)
neg r0,r3
andi. r0,r0,7
cmplw cr1,r5,r0
b .Lms
EXPORT_SYMBOL(__memset16)
EXPORT_SYMBOL(__memset32)
EXPORT_SYMBOL(__memset64)
#endif
_GLOBAL_KASAN(memset)
neg r0,r3
rlwimi r4,r4,8 ,16 ,23
andi. r0,r0,7 /* # bytes to be 8-byte aligned */
rlwimi r4,r4,16 ,0 ,15
cmplw cr1,r5,r0 /* do we get that far? */
rldimi r4,r4,32 ,0
.Lms: PPC_MTOCRF(1 ,r0)
mr r6,r3
blt cr1,8 f
beq 3 f /* if already 8-byte aligned */
subf r5,r0,r5
bf 31 ,1 f
stb r4,0 (r6)
addi r6,r6,1
1 : bf 30 ,2 f
sth r4,0 (r6)
addi r6,r6,2
2 : bf 29 ,3 f
stw r4,0 (r6)
addi r6,r6,4
3 : srdi. r0,r5,6
clrldi r5,r5,58
mtctr r0
beq 5 f
.balign 16
4 : std r4,0 (r6)
std r4,8 (r6)
std r4,16 (r6)
std r4,24 (r6)
std r4,32 (r6)
std r4,40 (r6)
std r4,48 (r6)
std r4,56 (r6)
addi r6,r6,64
bdnz 4 b
5 : srwi. r0,r5,3
clrlwi r5,r5,29
PPC_MTOCRF(1 ,r0)
beq 8 f
bf 29 ,6 f
std r4,0 (r6)
std r4,8 (r6)
std r4,16 (r6)
std r4,24 (r6)
addi r6,r6,32
6 : bf 30 ,7 f
std r4,0 (r6)
std r4,8 (r6)
addi r6,r6,16
7 : bf 31 ,8 f
std r4,0 (r6)
addi r6,r6,8
8 : cmpwi r5,0
PPC_MTOCRF(1 ,r5)
beqlr
bf 29 ,9 f
stw r4,0 (r6)
addi r6,r6,4
9 : bf 30 ,10 f
sth r4,0 (r6)
addi r6,r6,2
10 : bflr 31
stb r4,0 (r6)
blr
EXPORT_SYMBOL(memset)
EXPORT_SYMBOL_KASAN(memset)
_GLOBAL_TOC_KASAN(memmove)
cmplw 0 ,r3,r4
bgt backwards_memcpy
b memcpy
_GLOBAL (backwards_memcpy)
rlwinm. r7,r5,32 -3 ,3 ,31 /* r0 = r5 >> 3 */
add r6,r3,r5
add r4,r4,r5
beq 2 f
andi. r0,r6,3
mtctr r7
bne 5 f
.balign 16
1 : lwz r7,-4 (r4)
lwzu r8,-8 (r4)
stw r7,-4 (r6)
stwu r8,-8 (r6)
bdnz 1 b
andi. r5,r5,7
2 : cmplwi 0 ,r5,4
blt 3 f
lwzu r0,-4 (r4)
subi r5,r5,4
stwu r0,-4 (r6)
3 : cmpwi 0 ,r5,0
beqlr
mtctr r5
4 : lbzu r0,-1 (r4)
stbu r0,-1 (r6)
bdnz 4 b
blr
5 : mtctr r0
6 : lbzu r7,-1 (r4)
stbu r7,-1 (r6)
bdnz 6 b
subf r5,r0,r5
rlwinm. r7,r5,32 -3 ,3 ,31
beq 2 b
mtctr r7
b 1 b
EXPORT_SYMBOL(memmove)
EXPORT_SYMBOL_KASAN(memmove)
Messung V0.5 in Prozent C=96 H=97 G=96
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland