Last change
on this file since 444 was
444,
checked in by satin@…, 6 years ago
|
add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc
|
File size:
1.1 KB
|
Rev | Line | |
---|
[444] | 1 | #if defined __thumb__ |
---|
| 2 | |
---|
| 3 | #include "../../string/strcpy.c" |
---|
| 4 | |
---|
| 5 | #else |
---|
| 6 | |
---|
| 7 | #include <string.h> |
---|
| 8 | #include "xscale.h" |
---|
| 9 | |
---|
| 10 | char * |
---|
| 11 | strcpy (char *dest, const char *src) |
---|
| 12 | { |
---|
| 13 | char *dest0 = dest; |
---|
| 14 | |
---|
| 15 | asm (PRELOADSTR ("%0") : : "r" (src)); |
---|
| 16 | |
---|
| 17 | #ifndef __OPTIMIZE_SIZE__ |
---|
| 18 | if (((long)src & 3) == ((long)dest & 3)) |
---|
| 19 | { |
---|
| 20 | /* Skip unaligned part. */ |
---|
| 21 | while ((long)src & 3) |
---|
| 22 | { |
---|
| 23 | if (! (*dest++ = *src++)) |
---|
| 24 | return dest0; |
---|
| 25 | } |
---|
| 26 | |
---|
| 27 | /* Load two constants: |
---|
| 28 | R4 = 0xfefefeff [ == ~(0x80808080 << 1) ] |
---|
| 29 | R5 = 0x80808080 */ |
---|
| 30 | |
---|
| 31 | asm ("mov r5, #0x80\n\ |
---|
| 32 | ldr r1, [%1, #0]\n\ |
---|
| 33 | add r5, r5, #0x8000\n\ |
---|
| 34 | add r5, r5, r5, lsl #16\n\ |
---|
| 35 | mvn r4, r5, lsl #1\n\ |
---|
| 36 | \n\ |
---|
| 37 | add r3, r1, r5\n\ |
---|
| 38 | bic r3, r3, r1\n\ |
---|
| 39 | ands r2, r3, r4\n\ |
---|
| 40 | bne 1f\n\ |
---|
| 41 | 0:\n\ |
---|
| 42 | ldr r3, [%1, #0]\n\ |
---|
| 43 | ldr r1, [%1, #4]!\n\ |
---|
| 44 | " PRELOADSTR("%1") "\n\ |
---|
| 45 | str r3, [%0], #4\n\ |
---|
| 46 | add r2, r1, r4\n\ |
---|
| 47 | bic r2, r2, r1\n\ |
---|
| 48 | ands r3, r2, r5\n\ |
---|
| 49 | beq 0b\n\ |
---|
| 50 | 1:" |
---|
| 51 | : "=&r" (dest), "=&r" (src) |
---|
| 52 | : "0" (dest), "1" (src) |
---|
| 53 | : "r1", "r2", "r3", "r4", "r5", "memory", "cc"); |
---|
| 54 | } |
---|
| 55 | #endif |
---|
| 56 | |
---|
| 57 | while (*dest++ = *src++) |
---|
| 58 | asm (PRELOADSTR ("%0") : : "r" (src)); |
---|
| 59 | return dest0; |
---|
| 60 | } |
---|
| 61 | |
---|
| 62 | #endif |
---|
Note: See
TracBrowser
for help on using the repository browser.