diff options
| author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-03-16 09:11:31 +0000 | 
|---|---|---|
| committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-03-16 09:11:31 +0000 | 
| commit | 1cd785fe106389b7cc708d1c413eb8bfbc95ff43 (patch) | |
| tree | 01a20f24c6cac36568a0c96ce76578fe8b8f47f8 /libc/string/avr32/strlen.S | |
| parent | b892d0f9caca5d891d7ce615e3df518b3870b36b (diff) | |
| download | uClibc-alpine-1cd785fe106389b7cc708d1c413eb8bfbc95ff43.tar.bz2 uClibc-alpine-1cd785fe106389b7cc708d1c413eb8bfbc95ff43.tar.xz  | |
Merge nptl branch tree with trunk. 
Step 8: add xtensa, cris and avr32 architecture dependent
files, as is.
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'libc/string/avr32/strlen.S')
| -rw-r--r-- | libc/string/avr32/strlen.S | 62 | 
1 files changed, 62 insertions, 0 deletions
diff --git a/libc/string/avr32/strlen.S b/libc/string/avr32/strlen.S new file mode 100644 index 000000000..d2808998d --- /dev/null +++ b/libc/string/avr32/strlen.S @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2004-2007 Atmel Corporation + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License.  See the file "COPYING.LIB" in the main directory of this + * archive for more details. + */ + +#include <features.h> + +#define str r12 + +       .text +       .global strlen +       .type   strlen, @function +strlen: +       mov     r11, r12 + +       mov     r9, str +       andl    r9, 3, COH +       brne    .Lunaligned_str + +1:     ld.w    r8, str++ +       tnbz    r8 +       brne    1b + +       sub     r12, r11 +       bfextu  r9, r8, 24, 8 +       cp.w    r9, 0 +       subeq   r12, 4 +       reteq   r12 +       bfextu  r9, r8, 16, 8 +       cp.w    r9, 0 +       subeq   r12, 3 +       reteq   r12 +       bfextu  r9, r8, 8, 8 +       cp.w    r9, 0 +       subeq   r12, 2 +       reteq   r12 +       sub     r12, 1 +       retal   r12 + +.Lunaligned_str: +       add     pc, pc, r9 << 3 +       sub     r0, r0, 0       /* 4-byte nop */ +       ld.ub   r8, str++ +       sub     r8, r8, 0 +       breq    1f +       ld.ub   r8, str++ +       sub     r8, r8, 0 +       breq    1f +       ld.ub   r8, str++ +       sub     r8, r8, 0 +       brne    1b + +1:     sub     r12, 1 +       sub     r12, r11 +       retal   r12 + +       .size   strlen, . - strlen + +libc_hidden_def(strlen)  | 
