/* SPDX-License-Identifier: GPL-2.0-or-later */1/*2* String handling functions for PowerPC.3*4* Copyright (C) 1996 Paul Mackerras.5*/6#include <linux/export.h>7#include <asm/ppc_asm.h>8#include <asm/cache.h>910.text1112/* This clears out any unused part of the destination buffer,13just as the libc version does. -- paulus */14_GLOBAL(strncpy)15PPC_LCMPI 0,r5,016beqlr17mtctr r518addi r6,r3,-119addi r4,r4,-120.balign IFETCH_ALIGN_BYTES211: lbzu r0,1(r4)22cmpwi 0,r0,023stbu r0,1(r6)24bdnzf 2,1b /* dec ctr, branch if ctr != 0 && !cr0.eq */25bnelr /* if we didn't hit a null char, we're done */26mfctr r527PPC_LCMPI 0,r5,0 /* any space left in destination buffer? */28beqlr /* we know r0 == 0 here */292: stbu r0,1(r6) /* clear it out if so */30bdnz 2b31blr32EXPORT_SYMBOL(strncpy)3334_GLOBAL(strncmp)35PPC_LCMPI 0,r5,036beq- 2f37mtctr r538addi r5,r3,-139addi r4,r4,-140.balign IFETCH_ALIGN_BYTES411: lbzu r3,1(r5)42cmpwi 1,r3,043lbzu r0,1(r4)44subf. r3,r0,r345beqlr 146bdnzt eq,1b47blr482: li r3,049blr50EXPORT_SYMBOL(strncmp)5152_GLOBAL(memchr)53PPC_LCMPI 0,r5,054beq- 2f55mtctr r556addi r3,r3,-157.balign IFETCH_ALIGN_BYTES581: lbzu r0,1(r3)59cmpw 0,r0,r460bdnzf 2,1b61beqlr622: li r3,063blr64EXPORT_SYMBOL(memchr)656667