diff options
Diffstat (limited to 'newlib/libc/machine/xscale/memchr.c')
-rw-r--r-- | newlib/libc/machine/xscale/memchr.c | 82 |
1 files changed, 41 insertions, 41 deletions
diff --git a/newlib/libc/machine/xscale/memchr.c b/newlib/libc/machine/xscale/memchr.c index 9bf18268b..fc24bf66e 100644 --- a/newlib/libc/machine/xscale/memchr.c +++ b/newlib/libc/machine/xscale/memchr.c @@ -42,47 +42,47 @@ memchr (const void *start, int c, size_t len) 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\ + "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) |