📄 strcpy.c
字号:
#if defined __thumb__#include "../../string/strcpy.c"#else#include <string.h>#include "xscale.h"char *strcpy (char *dest, const char *src){ char *dest0 = dest; asm (PRELOADSTR ("%0") : : "r" (src));#ifndef __OPTIMIZE_SIZE__ if (((long)src & 3) == ((long)dest & 3)) { /* Skip unaligned part. */ while ((long)src & 3) { if (! (*dest++ = *src++)) return dest0; } /* Load two constants: R4 = 0xfefefeff [ == ~(0x80808080 << 1) ] R5 = 0x80808080 */ asm ("mov r5, #0x80\n\ ldr r1, [%1, #0]\n\ add r5, r5, #0x8000\n\ add r5, r5, r5, lsl #16\n\ mvn r4, r5, lsl #1\n\\n\ add r3, r1, r5\n\ bic r3, r3, r1\n\ ands r2, r3, r4\n\ bne 1f\n\0:\n\ ldr r3, [%1, #0]\n\ ldr r1, [%1, #4]!\n\" PRELOADSTR("%1") "\n\ str r3, [%0], #4\n\ add r2, r1, r4\n\ bic r2, r2, r1\n\ ands r3, r2, r5\n\ beq 0b\n\1:" : "=&r" (dest), "=&r" (src) : "0" (dest), "1" (src) : "r1", "r2", "r3", "r4", "r5", "memory", "cc"); }#endif while (*dest++ = *src++) asm (PRELOADSTR ("%0") : : "r" (src)); return dest0;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -