diff options
author | Giuseppe Cavallaro <peppe.cavallaro@st.com> | 2009-07-13 10:38:24 +0200 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2009-09-27 09:59:21 +0200 |
commit | 815a7b0b6076c0708c305fd1fae297e004fe01de (patch) | |
tree | e3e0f0924df1e7e2a7f2304e31a3879d602a62c8 /libc | |
parent | b7c4dd7d71f97279f325a4e5aa387c84e8ca0485 (diff) | |
download | uClibc-alpine-815a7b0b6076c0708c305fd1fae297e004fe01de.tar.bz2 uClibc-alpine-815a7b0b6076c0708c305fd1fae297e004fe01de.tar.xz |
sh: add assembly strcpy and strncpy
This patch adds the strcpy and strncpy assembly routines.
Benchmarks showed the following gains:
~7% for strcpy
~30% for strncpy
Note: uClibc string tests pass without any failures.
These functions have been only tested on SH4, for this reason
I've voluntarily added them within the sh4 sub-folder.
If somebody would like to test them on other SH CPUs, these can be moved
on sh common folder.
Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'libc')
-rw-r--r-- | libc/string/sh/sh4/strcpy.S | 28 | ||||
-rw-r--r-- | libc/string/sh/sh4/strncpy.S | 43 |
2 files changed, 71 insertions, 0 deletions
diff --git a/libc/string/sh/sh4/strcpy.S b/libc/string/sh/sh4/strcpy.S new file mode 100644 index 000000000..0f8278017 --- /dev/null +++ b/libc/string/sh/sh4/strcpy.S @@ -0,0 +1,28 @@ +/* strcpy implementation for SUPERH + * + * Copyright (C) 2009 STMicroelectronics Ltd. + * + * Author: Giuseppe Cavallaro <peppe.cavallaro@st.com> + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +/* + char *strcpy(char *dest, const char *src); + */ + +#include <sysdep.h> + +ENTRY(strcpy) + mov r4,r2 +1: + mov.b @r5+,r1 + tst r1,r1 + mov.b r1,@r2 + bf/s 1b + add #1,r2 + + rts + mov r4,r0 +END(strcpy) +libc_hidden_def (strcpy) diff --git a/libc/string/sh/sh4/strncpy.S b/libc/string/sh/sh4/strncpy.S new file mode 100644 index 000000000..8a16f39d4 --- /dev/null +++ b/libc/string/sh/sh4/strncpy.S @@ -0,0 +1,43 @@ +/* strncpy implementation for SUPERH + * + * Copyright (C) 2009 STMicroelectronics Ltd. + * + * Author: Giuseppe Cavallaro <peppe.cavallaro@st.com> + * + * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + */ + +/* + char *strncpy(char *dest, const char *src, size_t n); + */ + +#include <sysdep.h> + +ENTRY(strncpy) + mov #0,r0 + bra 2f + mov r4,r2 +1: + mov.b r1,@(r0,r2) + add #1,r0 +2: + cmp/hs r6,r0 + bt 5f + mov.b @(r0,r5),r1 + tst r1,r1 + bf/s 1b + cmp/hs r6,r0 + bra 4f + nop +3: + mov.b r1,@(r0,r2) + add #1,r0 + cmp/hs r6,r0 +4: + bf/s 3b + mov #0,r1 +5: + rts + mov r2,r0 +END(strncpy) +libc_hidden_def(strncpy) |