12874c5fdSThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-or-later */ 214cf11afSPaul Mackerras/* 314cf11afSPaul Mackerras * String handling functions for PowerPC. 414cf11afSPaul Mackerras * 514cf11afSPaul Mackerras * Copyright (C) 1996 Paul Mackerras. 614cf11afSPaul Mackerras */ 7*39326182SMasahiro Yamada#include <linux/export.h> 814cf11afSPaul Mackerras#include <asm/ppc_asm.h> 91128bb78SChristophe Leroy#include <asm/cache.h> 1014cf11afSPaul Mackerras 1114cf11afSPaul Mackerras .text 1214cf11afSPaul Mackerras 1314cf11afSPaul Mackerras/* This clears out any unused part of the destination buffer, 1414cf11afSPaul Mackerras just as the libc version does. -- paulus */ 1514cf11afSPaul Mackerras_GLOBAL(strncpy) 16ca5d0674SAndreas Schwab PPC_LCMPI 0,r5,0 1714cf11afSPaul Mackerras beqlr 1814cf11afSPaul Mackerras mtctr r5 1914cf11afSPaul Mackerras addi r6,r3,-1 2014cf11afSPaul Mackerras addi r4,r4,-1 211128bb78SChristophe Leroy .balign IFETCH_ALIGN_BYTES 2214cf11afSPaul Mackerras1: lbzu r0,1(r4) 2314cf11afSPaul Mackerras cmpwi 0,r0,0 2414cf11afSPaul Mackerras stbu r0,1(r6) 2514cf11afSPaul Mackerras bdnzf 2,1b /* dec ctr, branch if ctr != 0 && !cr0.eq */ 2614cf11afSPaul Mackerras bnelr /* if we didn't hit a null char, we're done */ 2714cf11afSPaul Mackerras mfctr r5 28ca5d0674SAndreas Schwab PPC_LCMPI 0,r5,0 /* any space left in destination buffer? */ 2914cf11afSPaul Mackerras beqlr /* we know r0 == 0 here */ 3014cf11afSPaul Mackerras2: stbu r0,1(r6) /* clear it out if so */ 3114cf11afSPaul Mackerras bdnz 2b 3214cf11afSPaul Mackerras blr 339445aa1aSAl ViroEXPORT_SYMBOL(strncpy) 3414cf11afSPaul Mackerras 350119536cSSteven Rostedt_GLOBAL(strncmp) 36ca5d0674SAndreas Schwab PPC_LCMPI 0,r5,0 37ca5d0674SAndreas Schwab beq- 2f 380119536cSSteven Rostedt mtctr r5 390119536cSSteven Rostedt addi r5,r3,-1 400119536cSSteven Rostedt addi r4,r4,-1 411128bb78SChristophe Leroy .balign IFETCH_ALIGN_BYTES 420119536cSSteven Rostedt1: lbzu r3,1(r5) 430119536cSSteven Rostedt cmpwi 1,r3,0 440119536cSSteven Rostedt lbzu r0,1(r4) 450119536cSSteven Rostedt subf. r3,r0,r3 460119536cSSteven Rostedt beqlr 1 470119536cSSteven Rostedt bdnzt eq,1b 480119536cSSteven Rostedt blr 49637a9902SJeff Mahoney2: li r3,0 50637a9902SJeff Mahoney blr 519445aa1aSAl ViroEXPORT_SYMBOL(strncmp) 520119536cSSteven Rostedt 5314cf11afSPaul Mackerras_GLOBAL(memchr) 54ca5d0674SAndreas Schwab PPC_LCMPI 0,r5,0 55ca5d0674SAndreas Schwab beq- 2f 5614cf11afSPaul Mackerras mtctr r5 5714cf11afSPaul Mackerras addi r3,r3,-1 581128bb78SChristophe Leroy .balign IFETCH_ALIGN_BYTES 5914cf11afSPaul Mackerras1: lbzu r0,1(r3) 6014cf11afSPaul Mackerras cmpw 0,r0,r4 6114cf11afSPaul Mackerras bdnzf 2,1b 6214cf11afSPaul Mackerras beqlr 6314cf11afSPaul Mackerras2: li r3,0 6414cf11afSPaul Mackerras blr 659445aa1aSAl ViroEXPORT_SYMBOL(memchr) 66