]> xenbits.xensource.com Git - xen.git/commitdiff
xen: arm32: add optimised memchr routine
authorIan Campbell <ian.campbell@citrix.com>
Wed, 26 Mar 2014 13:38:42 +0000 (13:38 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Thu, 3 Apr 2014 16:15:42 +0000 (17:15 +0100)
This isn't used enough to be critical, but it completes the set of mem*.

Taken from Linux v3.14-rc7.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Tim Deegan <tim@xen.org>
xen/arch/arm/arm32/lib/Makefile
xen/arch/arm/arm32/lib/memchr.S [new file with mode: 0644]
xen/include/asm-arm/string.h

index 4cf41f41e1228ad3bb7b8cf38f5aee639353d8bc..fa4e241e3a30954c38a8160b10b8f8c1165f4720 100644 (file)
@@ -1,4 +1,4 @@
-obj-y += memcpy.o memmove.o memset.o memzero.o
+obj-y += memcpy.o memmove.o memset.o memchr.o memzero.o
 obj-y += findbit.o setbit.o
 obj-y += setbit.o clearbit.o changebit.o
 obj-y += testsetbit.o testclearbit.o testchangebit.o
diff --git a/xen/arch/arm/arm32/lib/memchr.S b/xen/arch/arm/arm32/lib/memchr.S
new file mode 100644 (file)
index 0000000..fd64ed8
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  linux/arch/arm/lib/memchr.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ *  ASM optimised string functions
+ */
+
+#include <xen/config.h>
+
+#include "assembler.h"
+
+       .text
+       .align  5
+ENTRY(memchr)
+1:     subs    r2, r2, #1
+       bmi     2f
+       ldrb    r3, [r0], #1
+       teq     r3, r1
+       bne     1b
+       sub     r0, r0, #1
+2:     movne   r0, #0
+       mov     pc, lr
+ENDPROC(memchr)
index abfa9d20afc0052dc1ab15544ade85994e61b6bc..2c9f4f79f75b2016de689e8410aa333394e3400c 100644 (file)
@@ -14,6 +14,9 @@ extern void *memmove(void *dest, const void *src, size_t n);
 #define __HAVE_ARCH_MEMSET
 extern void * memset(void *, int, __kernel_size_t);
 
+#define __HAVE_ARCH_MEMCHR
+extern void * memchr(const void *, int, __kernel_size_t);
+
 extern void __memzero(void *ptr, __kernel_size_t n);
 
 #define memset(p,v,n)                                                   \