diff options
Diffstat (limited to 'newlib/libc/machine/m68k/strcpy.c')
-rw-r--r-- | newlib/libc/machine/m68k/strcpy.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/newlib/libc/machine/m68k/strcpy.c b/newlib/libc/machine/m68k/strcpy.c new file mode 100644 index 00000000000..ccc914193d7 --- /dev/null +++ b/newlib/libc/machine/m68k/strcpy.c @@ -0,0 +1,36 @@ +/* + * C library strcpy routine + * + * This routine has been optimized for the CPU32+. + * It should run on all 68k machines. + * + * W. Eric Norum + * Saskatchewan Accelerator Laboratory + * University of Saskatchewan + * Saskatoon, Saskatchewan, CANADA + * eric@skatter.usask.ca + */ + +#include <string.h> + +/* + * Copy bytes using CPU32+ loop mode if possible + */ + +char * +strcpy (char *to, const char *from) +{ + char *pto = to; + unsigned int n = 0xFFFF; + + asm volatile ("1:\n" + "\tmove.b (%0)+,(%1)+\n" +#if defined(__mcpu32__) + "\tdbeq %2,1b\n" +#endif + "\tbne.b 1b\n" : + "=a" (from), "=a" (pto), "=d" (n) : + "0" (from), "1" (pto), "2" (n) : + "cc", "memory"); + return to; +} |