Linux Audio

Check our new training course

Loading...
v3.15
 
 1/*
 2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
 3 *
 4 * This program is free software; you can redistribute it and/or modify
 5 * it under the terms of the GNU General Public License version 2 as
 6 * published by the Free Software Foundation.
 7 */
 8
 9#include <linux/linkage.h>
10
11ENTRY(strlen)
12	or	r3,r0,7
13	ld	r2,[r3,-7]
14	ld.a	r6,[r3,-3]
15	mov	r4,0x01010101
16	; uses long immediate
17#ifdef __LITTLE_ENDIAN__
18	asl_s	r1,r0,3
19	btst_s	r0,2
20	asl	r7,r4,r1
21	ror	r5,r4
22	sub	r1,r2,r7
23	bic_s	r1,r1,r2
24	mov.eq	r7,r4
25	sub	r12,r6,r7
26	bic	r12,r12,r6
27	or.eq	r12,r12,r1
28	and	r12,r12,r5
29	brne	r12,0,.Learly_end
30#else /* BIG ENDIAN */
31	ror	r5,r4
32	btst_s	r0,2
33	mov_s	r1,31
34	sub3	r7,r1,r0
35	sub	r1,r2,r4
36	bic_s	r1,r1,r2
37	bmsk	r1,r1,r7
38	sub	r12,r6,r4
39	bic	r12,r12,r6
40	bmsk.ne	r12,r12,r7
41	or.eq	r12,r12,r1
42	and	r12,r12,r5
43	brne	r12,0,.Learly_end
44#endif /* ENDIAN */
45
46.Loop:
47	ld_s	r2,[r3,4]
48	ld.a	r6,[r3,8]
49	; stall for load result
50	sub	r1,r2,r4
51	bic_s	r1,r1,r2
52	sub	r12,r6,r4
53	bic	r12,r12,r6
54	or	r12,r12,r1
55	and	r12,r12,r5
56	breq r12,0,.Loop
57.Lend:
58	and.f	r1,r1,r5
59	sub.ne	r3,r3,4
60	mov.eq	r1,r12
61#ifdef __LITTLE_ENDIAN__
62	sub_s	r2,r1,1
63	bic_s	r2,r2,r1
64	norm	r1,r2
65	sub_s	r0,r0,3
66	lsr_s	r1,r1,3
67	sub	    r0,r3,r0
68	j_s.d	[blink]
69	sub	    r0,r0,r1
70#else /* BIG ENDIAN */
71	lsr_s	r1,r1,7
72	mov.eq	r2,r6
73	bic_s	r1,r1,r2
74	norm	r1,r1
75	sub	    r0,r3,r0
76	lsr_s	r1,r1,3
77	j_s.d	[blink]
78	add	    r0,r0,r1
79#endif /* ENDIAN */
80.Learly_end:
81	b.d	.Lend
82	sub_s.ne r1,r1,r1
83END(strlen)
v6.2
 1/* SPDX-License-Identifier: GPL-2.0-only */
 2/*
 3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
 
 
 
 
 4 */
 5
 6#include <linux/linkage.h>
 7
 8ENTRY_CFI(strlen)
 9	or	r3,r0,7
10	ld	r2,[r3,-7]
11	ld.a	r6,[r3,-3]
12	mov	r4,0x01010101
13	; uses long immediate
14#ifdef __LITTLE_ENDIAN__
15	asl_s	r1,r0,3
16	btst_s	r0,2
17	asl	r7,r4,r1
18	ror	r5,r4
19	sub	r1,r2,r7
20	bic_s	r1,r1,r2
21	mov.eq	r7,r4
22	sub	r12,r6,r7
23	bic	r12,r12,r6
24	or.eq	r12,r12,r1
25	and	r12,r12,r5
26	brne	r12,0,.Learly_end
27#else /* BIG ENDIAN */
28	ror	r5,r4
29	btst_s	r0,2
30	mov_s	r1,31
31	sub3	r7,r1,r0
32	sub	r1,r2,r4
33	bic_s	r1,r1,r2
34	bmsk	r1,r1,r7
35	sub	r12,r6,r4
36	bic	r12,r12,r6
37	bmsk.ne	r12,r12,r7
38	or.eq	r12,r12,r1
39	and	r12,r12,r5
40	brne	r12,0,.Learly_end
41#endif /* ENDIAN */
42
43.Loop:
44	ld_s	r2,[r3,4]
45	ld.a	r6,[r3,8]
46	; stall for load result
47	sub	r1,r2,r4
48	bic_s	r1,r1,r2
49	sub	r12,r6,r4
50	bic	r12,r12,r6
51	or	r12,r12,r1
52	and	r12,r12,r5
53	breq r12,0,.Loop
54.Lend:
55	and.f	r1,r1,r5
56	sub.ne	r3,r3,4
57	mov.eq	r1,r12
58#ifdef __LITTLE_ENDIAN__
59	sub_s	r2,r1,1
60	bic_s	r2,r2,r1
61	norm	r1,r2
62	sub_s	r0,r0,3
63	lsr_s	r1,r1,3
64	sub	    r0,r3,r0
65	j_s.d	[blink]
66	sub	    r0,r0,r1
67#else /* BIG ENDIAN */
68	lsr_s	r1,r1,7
69	mov.eq	r2,r6
70	bic_s	r1,r1,r2
71	norm	r1,r1
72	sub	    r0,r3,r0
73	lsr_s	r1,r1,3
74	j_s.d	[blink]
75	add	    r0,r0,r1
76#endif /* ENDIAN */
77.Learly_end:
78	b.d	.Lend
79	sub_s.ne r1,r1,r1
80END_CFI(strlen)