Merge tag 'kbuild-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
[linux-block.git] / arch / powerpc / lib / string.S
CommitLineData
14cf11af
PM
1/*
2 * String handling functions for PowerPC.
3 *
4 * Copyright (C) 1996 Paul Mackerras.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 */
14cf11af
PM
11#include <asm/processor.h>
12#include <asm/errno.h>
13#include <asm/ppc_asm.h>
9445aa1a 14#include <asm/export.h>
14cf11af 15
14cf11af
PM
16 .text
17
14cf11af
PM
18/* This clears out any unused part of the destination buffer,
19 just as the libc version does. -- paulus */
20_GLOBAL(strncpy)
ca5d0674 21 PPC_LCMPI 0,r5,0
14cf11af
PM
22 beqlr
23 mtctr r5
24 addi r6,r3,-1
25 addi r4,r4,-1
87a156fb 26 .balign 16
14cf11af
PM
271: lbzu r0,1(r4)
28 cmpwi 0,r0,0
29 stbu r0,1(r6)
30 bdnzf 2,1b /* dec ctr, branch if ctr != 0 && !cr0.eq */
31 bnelr /* if we didn't hit a null char, we're done */
32 mfctr r5
ca5d0674 33 PPC_LCMPI 0,r5,0 /* any space left in destination buffer? */
14cf11af
PM
34 beqlr /* we know r0 == 0 here */
352: stbu r0,1(r6) /* clear it out if so */
36 bdnz 2b
37 blr
9445aa1a 38EXPORT_SYMBOL(strncpy)
14cf11af 39
0119536c 40_GLOBAL(strncmp)
ca5d0674
AS
41 PPC_LCMPI 0,r5,0
42 beq- 2f
0119536c
SR
43 mtctr r5
44 addi r5,r3,-1
45 addi r4,r4,-1
87a156fb 46 .balign 16
0119536c
SR
471: lbzu r3,1(r5)
48 cmpwi 1,r3,0
49 lbzu r0,1(r4)
50 subf. r3,r0,r3
51 beqlr 1
52 bdnzt eq,1b
53 blr
637a9902
JM
542: li r3,0
55 blr
9445aa1a 56EXPORT_SYMBOL(strncmp)
0119536c 57
15c2d45d 58#ifdef CONFIG_PPC32
14cf11af 59_GLOBAL(memcmp)
ca5d0674
AS
60 PPC_LCMPI 0,r5,0
61 beq- 2f
14cf11af
PM
62 mtctr r5
63 addi r6,r3,-1
64 addi r4,r4,-1
651: lbzu r3,1(r6)
66 lbzu r0,1(r4)
67 subf. r3,r0,r3
68 bdnzt 2,1b
69 blr
702: li r3,0
71 blr
9445aa1a 72EXPORT_SYMBOL(memcmp)
15c2d45d 73#endif
14cf11af
PM
74
75_GLOBAL(memchr)
ca5d0674
AS
76 PPC_LCMPI 0,r5,0
77 beq- 2f
14cf11af
PM
78 mtctr r5
79 addi r3,r3,-1
87a156fb 80 .balign 16
14cf11af
PM
811: lbzu r0,1(r3)
82 cmpw 0,r0,r4
83 bdnzf 2,1b
84 beqlr
852: li r3,0
86 blr
9445aa1a 87EXPORT_SYMBOL(memchr)
14cf11af 88
17968fbb 89#ifdef CONFIG_PPC32
14cf11af
PM
90_GLOBAL(__clear_user)
91 addi r6,r3,-4
92 li r3,0
93 li r5,0
94 cmplwi 0,r4,4
95 blt 7f
96 /* clear a single word */
9711: stwu r5,4(r6)
98 beqlr
99 /* clear word sized chunks */
100 andi. r0,r6,3
101 add r4,r0,r4
102 subf r6,r0,r6
103 srwi r0,r4,2
104 andi. r4,r4,3
105 mtctr r0
106 bdz 7f
1071: stwu r5,4(r6)
108 bdnz 1b
109 /* clear byte sized chunks */
1107: cmpwi 0,r4,0
111 beqlr
112 mtctr r4
113 addi r6,r6,3
1148: stbu r5,1(r6)
115 bdnz 8b
116 blr
11790: mr r3,r4
118 blr
11991: mfctr r3
120 slwi r3,r3,2
121 add r3,r3,r4
122 blr
12392: mfctr r3
124 blr
125
24bfa6a9
NP
126 EX_TABLE(11b, 90b)
127 EX_TABLE(1b, 91b)
128 EX_TABLE(8b, 92b)
129
9445aa1a 130EXPORT_SYMBOL(__clear_user)
17968fbb 131#endif