Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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 9bf18268b..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\n\
- add r6, r6, #0x8000\n\
- add r6, r6, r6, lsl #16\n\
- mvn r7, r6, lsl #1\n\
-\n\
-0:\n\
- cmp %1, #0x7\n\
- bls 1f\n\
-\n\
- ldmia %0!, { r3, r9 }\n\
-" PRELOADSTR ("%0") "\n\
- sub %1, %1, #8\n\
- eor r3, r3, %2\n\
- eor r9, r9, %2\n\
- add r2, r3, r7\n\
- add r8, r9, r7\n\
- bic r2, r2, r3\n\
- bic r8, r8, r9\n\
- and r1, r2, r6\n\
- and r9, r8, r6\n\
- orrs r1, r1, r9\n\
- beq 0b\n\
-\n\
- add %1, %1, #8\n\
- sub %0, %0, #8\n\
-1:\n\
- cmp %1, #0x3\n\
- bls 2f\n\
-\n\
- ldr r3, [%0], #4\n\
-" PRELOADSTR ("%0") "\n\
- sub %1, %1, #4\n\
- eor r3, r3, %2\n\
- add r2, r3, r7\n\
- bic r2, r2, r3\n\
- ands r1, r2, r6\n\
- beq 1b\n\
-\n\
- sub %0, %0, #4\n\
- add %1, %1, #4\n\
-2:\n\
-"
- : "=&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