USB: add USB-Persist facility
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / arch / sh / lib / strlen.S
blobf8ab296047b3a0122dcc5636277b0d2881b07e56
1 /* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $
2  *
3  * "strlen" implementation of SuperH
4  *
5  * Copyright (C) 1999  Kaz Kojima
6  *
7  */
9 /* size_t strlen (const char *s)  */
11 #include <linux/linkage.h>
12 ENTRY(strlen)
13         mov     r4,r0
14         and     #3,r0
15         tst     r0,r0
16         bt/s    1f
17          mov    #0,r2
19         add     #-1,r0
20         shll2   r0
21         shll    r0
22         braf    r0
23          nop
25         mov.b   @r4+,r1
26         tst     r1,r1
27         bt      8f
28         add     #1,r2
30         mov.b   @r4+,r1
31         tst     r1,r1
32         bt      8f
33         add     #1,r2
35         mov.b   @r4+,r1
36         tst     r1,r1
37         bt      8f
38         add     #1,r2   
41         mov     #0,r3
43         mov.l   @r4+,r1
44         cmp/str r3,r1
45         bf/s    2b
46          add    #4,r2
48         add     #-4,r2
49 #ifndef __LITTLE_ENDIAN__
50         swap.b  r1,r1
51         swap.w  r1,r1
52         swap.b  r1,r1
53 #endif
54         extu.b  r1,r0
55         tst     r0,r0
56         bt/s    8f
57          shlr8  r1
58         add     #1,r2
59         extu.b  r1,r0
60         tst     r0,r0
61         bt/s    8f
62          shlr8  r1
63         add     #1,r2
64         extu.b  r1,r0
65         tst     r0,r0
66         bt      8f
67         add     #1,r2
69         rts
70          mov    r2,r0