]> xenbits.xensource.com Git - xen.git/commitdiff
xen: arm32: add optimised strchr and strrchr routines
authorIan Campbell <ian.campbell@citrix.com>
Wed, 26 Mar 2014 13:38:43 +0000 (13:38 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Thu, 3 Apr 2014 16:15:42 +0000 (17:15 +0100)
Taken from Linux v3.14-rc7.

These aren't widely used enough to be critical, but we may as well have them.

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/strchr.S [new file with mode: 0644]
xen/arch/arm/arm32/lib/strrchr.S [new file with mode: 0644]
xen/include/asm-arm/string.h

index fa4e241e3a30954c38a8160b10b8f8c1165f4720..e9fbc595b9cf37543a0b23926ad3f9a15c151a74 100644 (file)
@@ -2,4 +2,5 @@ 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
+obj-y += strchr.o strrchr.o
 obj-y += lib1funcs.o lshrdi3.o div64.o
diff --git a/xen/arch/arm/arm32/lib/strchr.S b/xen/arch/arm/arm32/lib/strchr.S
new file mode 100644 (file)
index 0000000..2f89c01
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ *  linux/arch/arm/lib/strchr.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(strchr)
+               and     r1, r1, #0xff
+1:             ldrb    r2, [r0], #1
+               teq     r2, r1
+               teqne   r2, #0
+               bne     1b
+               teq     r2, r1
+               movne   r0, #0
+               subeq   r0, r0, #1
+               mov     pc, lr
+ENDPROC(strchr)
diff --git a/xen/arch/arm/arm32/lib/strrchr.S b/xen/arch/arm/arm32/lib/strrchr.S
new file mode 100644 (file)
index 0000000..7d534b1
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  linux/arch/arm/lib/strrchr.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(strrchr)
+               mov     r3, #0
+1:             ldrb    r2, [r0], #1
+               teq     r2, r1
+               subeq   r3, r0, #1
+               teq     r2, #0
+               bne     1b
+               mov     r0, r3
+               mov     pc, lr
+ENDPROC(strrchr)
index 2c9f4f79f75b2016de689e8410aa333394e3400c..7d8b35a64ac111f62f3bebc5af5df881a2d9fe27 100644 (file)
@@ -4,6 +4,18 @@
 #include <xen/config.h>
 
 #if defined(CONFIG_ARM_32)
+
+/*
+ * We don't do inline string functions, since the
+ * optimised inline asm versions are not small.
+ */
+
+#define __HAVE_ARCH_STRRCHR
+extern char * strrchr(const char * s, int c);
+
+#define __HAVE_ARCH_STRCHR
+extern char * strchr(const char * s, int c);
+
 #define __HAVE_ARCH_MEMCPY
 extern void * memcpy(void *, const void *, __kernel_size_t);