]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/sparc/sparc64/strspn.S
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / sparc / sparc64 / strspn.S
CommitLineData
ae6b8730
RH
1/* strspn (str, ss) -- Return the length of the maximum initial segment
2 of S which contains only characters in ACCEPT.
3 For SPARC v9.
bfff8b1b 4 Copyright (C) 1999-2017 Free Software Foundation, Inc.
ae6b8730
RH
5 This file is part of the GNU C Library.
6 Contributed by Jakub Jelinek <jj@ultra.linux.cz>
7
8 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
ae6b8730
RH
12
13 The GNU C Library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 16 Lesser General Public License for more details.
ae6b8730 17
41bdb6e2 18 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
19 License along with the GNU C Library; if not, see
20 <http://www.gnu.org/licenses/>. */
ae6b8730
RH
21
22#include <sysdep.h>
23#include <asm/asi.h>
24#ifndef XCC
25#define XCC xcc
26#define STACK_SIZE 128
27#define STACK_OFFSET 128+0x7ff
8cb079d4 28 .register %g2, #scratch
ae6b8730
RH
29#else
30#define STACK_SIZE 64
31#define STACK_OFFSET 64
32#endif
33
34 .text
35 .align 32
36ENTRY(strspn)
37 sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */
38 mov 1, %o4 /* IEU1 */
39 stx %g0, [%sp + STACK_OFFSET] /* Store Group */
8cb079d4 40 mov %o0, %g4 /* IEU0 */
ae6b8730
RH
41
42 stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */
43 add %sp, STACK_OFFSET, %o5 /* IEU0 */
44 stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */
45 stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */
46
471: ldub [%o1], %o2 /* Load Group */
48 brz,pn %o2, 2f /* CTI+IEU1 Group */
49 srl %o2, 3, %o3 /* IEU0 */
50 and %o3, 0x18, %o3 /* IEU0 Group */
51
52 and %o2, 0x3f, %o2 /* IEU1 */
53 ldx [%o5 + %o3], %g2 /* Load Group */
54 sllx %o4, %o2, %g1 /* IEU0 */
55 add %o1, 1, %o1 /* IEU1 */
56
57 or %g2, %g1, %g2 /* IEU0 Group */
58 ba,pt %xcc, 1b /* CTI */
59 stx %g2, [%o5 + %o3] /* Store */
602: andcc %o0, 7, %g0 /* IEU1 Group */
61
62 be,a,pt %xcc, 4f /* CTI */
63 ldx [%o0], %o2 /* Load */
64 ldub [%o0], %o2 /* Load Group */
653: srl %o2, 3, %o3 /* IEU0 Group */
66
67 and %o2, 0x3f, %o2 /* IEU1 */
68 and %o3, 0x18, %o3 /* IEU0 Group */
69 ldx [%o5 + %o3], %g2 /* Load Group */
70 sllx %o4, %o2, %g1 /* IEU0 */
71
72 add %o0, 1, %o0 /* IEU1 */
73 andcc %g2, %g1, %g0 /* IEU1 Group */
74 be,pn %xcc, 12f /* CTI */
75 andcc %o0, 7, %g0 /* IEU1 Group */
76
77 bne,a,pt %icc, 3b /* CTI */
78 ldub [%o0], %o2 /* Load */
79 ldx [%o0], %o2 /* Load Group */
804: srlx %o2, 59, %o3 /* IEU0 Group */
81
8cb079d4 82 srlx %o2, 56, %g5 /* IEU0 Group */
ae6b8730 835: and %o3, 0x18, %o3 /* IEU1 */
8cb079d4 84 andcc %g5, 0x3f, %g5 /* IEU1 Group */
ae6b8730
RH
85 ldx [%o5 + %o3], %g2 /* Load */
86
87 srlx %o2, 51, %o3 /* IEU0 */
8cb079d4
UD
88 sllx %o4, %g5, %g1 /* IEU0 Group */
89 srlx %o2, 48, %g5 /* IEU0 Group */
ae6b8730
RH
90 andcc %g2, %g1, %g2 /* IEU1 */
91
92 be,pn %xcc, 13f /* CTI */
93 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 94 and %g5, 0x3f, %g5 /* IEU1 */
ae6b8730
RH
95 ldx [%o5 + %o3], %g2 /* Load Group */
96
97 srlx %o2, 43, %o3 /* IEU0 */
8cb079d4
UD
98 sllx %o4, %g5, %g1 /* IEU0 Group */
99 srlx %o2, 40, %g5 /* IEU0 Group */
ae6b8730
RH
100 andcc %g2, %g1, %g2 /* IEU1 */
101
102 be,pn %xcc, 14f /* CTI */
103 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 104 and %g5, 0x3f, %g5 /* IEU1 */
ae6b8730
RH
105 ldx [%o5 + %o3], %g2 /* Load Group */
106
107 srlx %o2, 35, %o3 /* IEU0 */
8cb079d4
UD
108 sllx %o4, %g5, %g1 /* IEU0 Group */
109 srlx %o2, 32, %g5 /* IEU0 Group */
ae6b8730
RH
110 andcc %g2, %g1, %g2 /* IEU1 */
111
112 be,pn %xcc, 15f /* CTI */
113 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 114 and %g5, 0x3f, %g5 /* IEU1 */
ae6b8730
RH
115 ldx [%o5 + %o3], %g2 /* Load Group */
116
117 srlx %o2, 27, %o3 /* IEU0 */
8cb079d4
UD
118 sllx %o4, %g5, %g1 /* IEU0 Group */
119 srlx %o2, 24, %g5 /* IEU0 Group */
ae6b8730
RH
120 andcc %g2, %g1, %g2 /* IEU1 */
121
122 be,pn %xcc, 16f /* CTI */
123 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 124 and %g5, 0x3f, %g5 /* IEU1 */
ae6b8730
RH
125 ldx [%o5 + %o3], %g2 /* Load Group */
126
127 srlx %o2, 19, %o3 /* IEU0 */
8cb079d4
UD
128 sllx %o4, %g5, %g1 /* IEU0 Group */
129 srlx %o2, 16, %g5 /* IEU0 Group */
ae6b8730
RH
130 andcc %g2, %g1, %g2 /* IEU1 */
131
132 be,pn %xcc, 17f /* CTI */
133 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 134 and %g5, 0x3f, %g5 /* IEU1 */
ae6b8730
RH
135 ldx [%o5 + %o3], %g2 /* Load Group */
136
137 srlx %o2, 11, %o3 /* IEU0 */
8cb079d4 138 sllx %o4, %g5, %g1 /* IEU0 Group */
ae6b8730 139 add %o0, 8, %o0 /* IEU1 */
8cb079d4 140 srlx %o2, 8, %g5 /* IEU0 Group */
ae6b8730
RH
141
142 andcc %g2, %g1, %g2 /* IEU1 */
143 be,pn %xcc, 18f /* CTI */
144 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 145 and %g5, 0x3f, %g5 /* IEU1 */
ae6b8730
RH
146
147 ldx [%o5 + %o3], %g2 /* Load Group */
8cb079d4
UD
148 sllx %o4, %g5, %g1 /* IEU0 */
149 mov %o2, %g5 /* IEU1 */
ae6b8730
RH
150 srlx %o2, 3, %o3 /* IEU0 Group */
151
152 ldxa [%o0] ASI_PNF, %o2 /* Load */
153 andcc %g2, %g1, %g2 /* IEU1 Group */
154 be,pn %xcc, 19f /* CTI */
155 and %o3, 0x18, %o3 /* IEU0 Group */
156
8cb079d4 157 and %g5, 0x3f, %g5 /* IEU1 */
ae6b8730 158 ldx [%o5 + %o3], %g2 /* Load Group */
8cb079d4 159 sllx %o4, %g5, %g1 /* IEU0 */
ae6b8730
RH
160 srlx %o2, 59, %o3 /* IEU0 Group */
161
162 andcc %g2, %g1, %g2 /* IEU1 Group */
163 bne,pt %xcc, 5b /* CTI */
8cb079d4 164 srlx %o2, 56, %g5 /* IEU0 Group */
ae6b8730
RH
165 sub %o0, 1, %o0 /* IEU1 */
166
167 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
168 retl /* CTI+IEU1 Group */
8cb079d4 169 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730
RH
170
171 .align 16
17219: sub %o0, 2, %o0 /* IEU1 */
173 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
174 retl /* CTI+IEU1 Group */
8cb079d4 175 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730
RH
176
17718: sub %o0, 3, %o0 /* IEU1 */
178 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
179 retl /* CTI+IEU1 Group */
8cb079d4 180 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730
RH
181
18217: add %o0, 4, %o0 /* IEU1 */
183 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
184 retl /* CTI+IEU1 Group */
8cb079d4 185 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730
RH
186
18716: add %o0, 3, %o0 /* IEU1 */
188 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
189 retl /* CTI+IEU1 Group */
8cb079d4 190 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730
RH
191
19215: add %o0, 2, %o0 /* IEU1 */
193 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
194 retl /* CTI+IEU1 Group */
8cb079d4 195 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730
RH
196
19714: add %o0, 1, %o0 /* IEU1 */
198 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
199 retl /* CTI+IEU1 Group */
8cb079d4 200 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730
RH
201
20213: add %sp, STACK_SIZE+32, %sp /* IEU1 */
203 retl /* CTI+IEU1 Group */
8cb079d4 204 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730
RH
205
206 .align 16
20712: sub %o0, 1, %o0 /* IEU0 Group */
208 add %sp, STACK_SIZE+32, %sp /* IEU1 */
209 retl /* CTI+IEU1 Group */
8cb079d4 210 sub %o0, %g4, %o0 /* IEU0 */
ae6b8730 211END(strspn)
85dd1003 212libc_hidden_builtin_def (strspn)