Linux Audio

Check our new training course

Loading...
v3.5.6
 
 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 */
 8
 9/* size_t strlen (const char *s)  */
10
11#include <linux/linkage.h>
12ENTRY(strlen)
13	mov	r4,r0
14	and	#3,r0
15	tst	r0,r0
16	bt/s	1f
17	 mov	#0,r2
18
19	add	#-1,r0
20	shll2	r0
21	shll	r0
22	braf	r0
23	 nop
24
25	mov.b	@r4+,r1
26	tst	r1,r1
27	bt	8f
28	add	#1,r2
29
30	mov.b	@r4+,r1
31	tst	r1,r1
32	bt	8f
33	add	#1,r2
34
35	mov.b	@r4+,r1
36	tst	r1,r1
37	bt	8f
38	add	#1,r2
39
401:
41	mov	#0,r3
422:
43	mov.l	@r4+,r1
44	cmp/str	r3,r1
45	bf/s	2b
46	 add	#4,r2
47
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
688:
69	rts
70	 mov	r2,r0
v6.13.7
 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>
13ENTRY(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
411:
42	mov	#0,r3
432:
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
698:
70	rts
71	 mov	r2,r0