mirror of
https://github.com/torvalds/linux.git
synced 2024-12-15 15:41:58 +00:00
1da177e4c3
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
71 lines
789 B
ArmAsm
71 lines
789 B
ArmAsm
/* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $
|
|
*
|
|
* "strlen" implementation of SuperH
|
|
*
|
|
* Copyright (C) 1999 Kaz Kojima
|
|
*
|
|
*/
|
|
|
|
/* size_t strlen (const char *s) */
|
|
|
|
#include <linux/linkage.h>
|
|
ENTRY(strlen)
|
|
mov r4,r0
|
|
and #3,r0
|
|
tst r0,r0
|
|
bt/s 1f
|
|
mov #0,r2
|
|
|
|
add #-1,r0
|
|
shll2 r0
|
|
shll r0
|
|
braf r0
|
|
nop
|
|
|
|
mov.b @r4+,r1
|
|
tst r1,r1
|
|
bt 8f
|
|
add #1,r2
|
|
|
|
mov.b @r4+,r1
|
|
tst r1,r1
|
|
bt 8f
|
|
add #1,r2
|
|
|
|
mov.b @r4+,r1
|
|
tst r1,r1
|
|
bt 8f
|
|
add #1,r2
|
|
|
|
1:
|
|
mov #0,r3
|
|
2:
|
|
mov.l @r4+,r1
|
|
cmp/str r3,r1
|
|
bf/s 2b
|
|
add #4,r2
|
|
|
|
add #-4,r2
|
|
#ifndef __LITTLE_ENDIAN__
|
|
swap.b r1,r1
|
|
swap.w r1,r1
|
|
swap.b r1,r1
|
|
#endif
|
|
extu.b r1,r0
|
|
tst r0,r0
|
|
bt/s 8f
|
|
shlr8 r1
|
|
add #1,r2
|
|
extu.b r1,r0
|
|
tst r0,r0
|
|
bt/s 8f
|
|
shlr8 r1
|
|
add #1,r2
|
|
extu.b r1,r0
|
|
tst r0,r0
|
|
bt 8f
|
|
add #1,r2
|
|
8:
|
|
rts
|
|
mov r2,r0
|