1/* Determine the length of a string.
2   For SPARC v7.
3   Copyright (C) 1996-2021 Free Software Foundation, Inc.
4   This file is part of the GNU C Library.
5
6   The GNU C Library is free software; you can redistribute it and/or
7   modify it under the terms of the GNU Lesser General Public
8   License as published by the Free Software Foundation; either
9   version 2.1 of the License, or (at your option) any later version.
10
11   The GNU C Library is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   Lesser General Public License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with the GNU C Library; if not, see
18   <https://www.gnu.org/licenses/>.  */
19
20#include <sysdep.h>
21
22	.text
23	.align		4
24
25ENTRY(strlen)
26	mov	%o0, %o1
27	andn	%o0, 0x3, %o0
28
29	ld	[%o0], %o5
30	and	%o1, 0x3, %g1
31	mov	-1, %g5
32
33	sethi	%hi(0x01010101), %o2
34	sll	%g1, 3, %g1
35
36	or	%o2, %lo(0x01010101), %o2
37	srl	%g5, %g1, %g2
38
39	orn	%o5, %g2, %o5
40	sll	%o2, 7, %o3
4110:	add	%o0, 4, %o0
42
43	andn	%o3, %o5, %g1
44	sub	%o5, %o2, %g2
45
46	andcc	%g1, %g2, %g0
47	be,a	10b
48	 ld	[%o0], %o5
49
50	srl	%o5, 24, %g1
51
52	andcc	%g1, 0xff, %g0
53	be	90f
54	 sub	%o0, 4, %o0
55
56	srl	%o5, 16, %g2
57
58	andcc	%g2, 0xff, %g0
59	be	90f
60	 add	%o0, 1, %o0
61
62	srl	%o5, 8, %g1
63
64	andcc	%g1, 0xff, %g0
65	be	90f
66	 add	%o0, 1, %o0
67
68	add	%o0, 1, %o0
69
7090:	retl
71	 sub	%o0, %o1, %o0
72END(strlen)
73libc_hidden_builtin_def (strlen)
74