aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2007-10-11 22:36:20 -0400
committerPaul Mackerras <paulus@samba.org>2007-10-12 00:13:44 -0400
commit9b4b8feb962f4b3e74768b7205f1f8f6cce87238 (patch)
tree7d7c95d9024d0d47ebb5f4299efc8d7ef00fa3ec
parentd0c3d534a4388a465101b634a95f2ec586415254 (diff)
[POWERPC] Add memchr() to the bootwrapper
This adds a memchr() implementation to the bootwrapper, which will be needed when libfdt is merged in. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/boot/string.S13
-rw-r--r--arch/powerpc/boot/string.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/arch/powerpc/boot/string.S b/arch/powerpc/boot/string.S
index 2627558bcb71..643e4cb2f11d 100644
--- a/arch/powerpc/boot/string.S
+++ b/arch/powerpc/boot/string.S
@@ -219,6 +219,19 @@ backwards_memcpy:
219 mtctr r7 219 mtctr r7
220 b 1b 220 b 1b
221 221
222 .globl memchr
223memchr:
224 cmpwi 0,r5,0
225 blelr
226 mtctr r5
227 addi r3,r3,-1
2281: lbzu r0,1(r3)
229 cmpw r0,r4
230 beqlr
231 bdnz 1b
232 li r3,0
233 blr
234
222 .globl memcmp 235 .globl memcmp
223memcmp: 236memcmp:
224 cmpwi 0,r5,0 237 cmpwi 0,r5,0
diff --git a/arch/powerpc/boot/string.h b/arch/powerpc/boot/string.h
index 4650030d1040..50091cc0eed9 100644
--- a/arch/powerpc/boot/string.h
+++ b/arch/powerpc/boot/string.h
@@ -14,6 +14,7 @@ extern size_t strnlen(const char *s, size_t count);
14extern void *memset(void *s, int c, size_t n); 14extern void *memset(void *s, int c, size_t n);
15extern void *memmove(void *dest, const void *src, unsigned long n); 15extern void *memmove(void *dest, const void *src, unsigned long n);
16extern void *memcpy(void *dest, const void *src, unsigned long n); 16extern void *memcpy(void *dest, const void *src, unsigned long n);
17extern void *memchr(const void *s, int c, size_t n);
17extern int memcmp(const void *s1, const void *s2, size_t n); 18extern int memcmp(const void *s1, const void *s2, size_t n);
18 19
19#endif /* _PPC_BOOT_STRING_H_ */ 20#endif /* _PPC_BOOT_STRING_H_ */