Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/lib/strlen.S
26444 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $
3
*
4
* "strlen" implementation of SuperH
5
*
6
* Copyright (C) 1999 Kaz Kojima
7
*
8
*/
9
10
/* size_t strlen (const char *s) */
11
12
#include <linux/linkage.h>
13
ENTRY(strlen)
14
mov r4,r0
15
and #3,r0
16
tst r0,r0
17
bt/s 1f
18
mov #0,r2
19
20
add #-1,r0
21
shll2 r0
22
shll r0
23
braf r0
24
nop
25
26
mov.b @r4+,r1
27
tst r1,r1
28
bt 8f
29
add #1,r2
30
31
mov.b @r4+,r1
32
tst r1,r1
33
bt 8f
34
add #1,r2
35
36
mov.b @r4+,r1
37
tst r1,r1
38
bt 8f
39
add #1,r2
40
41
1:
42
mov #0,r3
43
2:
44
mov.l @r4+,r1
45
cmp/str r3,r1
46
bf/s 2b
47
add #4,r2
48
49
add #-4,r2
50
#ifndef __LITTLE_ENDIAN__
51
swap.b r1,r1
52
swap.w r1,r1
53
swap.b r1,r1
54
#endif
55
extu.b r1,r0
56
tst r0,r0
57
bt/s 8f
58
shlr8 r1
59
add #1,r2
60
extu.b r1,r0
61
tst r0,r0
62
bt/s 8f
63
shlr8 r1
64
add #1,r2
65
extu.b r1,r0
66
tst r0,r0
67
bt 8f
68
add #1,r2
69
8:
70
rts
71
mov r2,r0
72
73