aboutsummaryrefslogtreecommitdiff
path: root/newlib/libc/machine/xscale/memchr.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/xscale/memchr.c')
-rw-r--r--newlib/libc/machine/xscale/memchr.c102
1 files changed, 0 insertions, 102 deletions
diff --git a/newlib/libc/machine/xscale/memchr.c b/newlib/libc/machine/xscale/memchr.c
deleted file mode 100644
index fc24bf66e..000000000
--- a/newlib/libc/machine/xscale/memchr.c
+++ /dev/null
@@ -1,102 +0,0 @@
-#if defined __thumb__
-
-#include "../../string/memchr.c"
-
-#else
-
-#include <string.h>
-#include "xscale.h"
-
-void *
-memchr (const void *start, int c, size_t len)
-{
- const char *str = start;
-
- if (len == 0)
- return 0;
-
- asm (PRELOADSTR ("%0") : : "r" (start));
-
- c &= 0xff;
-
-#ifndef __OPTIMIZE_SIZE__
- /* Skip unaligned part. */
- if ((long)str & 3)
- {
- str--;
- do
- {
- if (*++str == c)
- return (void *)str;
- }
- while (((long)str & 3) != 0 && --len > 0);
- }
-
- if (len > 3)
- {
- unsigned int c2 = c + (c << 8);
- c2 += c2 << 16;
-
- /* Load two constants:
- R7 = 0xfefefeff [ == ~(0x80808080 << 1) ]
- R6 = 0x80808080 */
-
- asm (
- "mov r6, #0x80
- add r6, r6, #0x8000
- add r6, r6, r6, lsl #16
- mvn r7, r6, lsl #1
-
-0:
- cmp %1, #0x7
- bls 1f
-
- ldmia %0!, { r3, r9 }
-" PRELOADSTR ("%0") "
- sub %1, %1, #8
- eor r3, r3, %2
- eor r9, r9, %2
- add r2, r3, r7
- add r8, r9, r7
- bic r2, r2, r3
- bic r8, r8, r9
- and r1, r2, r6
- and r9, r8, r6
- orrs r1, r1, r9
- beq 0b
-
- add %1, %1, #8
- sub %0, %0, #8
-1:
- cmp %1, #0x3
- bls 2f
-
- ldr r3, [%0], #4
-" PRELOADSTR ("%0") "
- sub %1, %1, #4
- eor r3, r3, %2
- add r2, r3, r7
- bic r2, r2, r3
- ands r1, r2, r6
- beq 1b
-
- sub %0, %0, #4
- add %1, %1, #4
-2:
-"
- : "=&r" (str), "=&r" (len)
- : "r" (c2), "0" (str), "1" (len)
- : "r1", "r2", "r3", "r6", "r7", "r8", "r9", "cc");
- }
-#endif
-
- while (len-- > 0)
- {
- if (*str == c)
- return (void *)str;
- str++;
- }
-
- return 0;
-}
-#endif