1 /* strpbrk (s, accept) -- Find the first occurrence in S of any character in
4 Copyright (C) 1999-2024 Free Software Foundation, Inc.
5 This file is part of the GNU C Library.
7 The GNU C Library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
12 The GNU C Library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public
18 License along with the GNU C Library; if not, see
19 <https://www.gnu.org/licenses/>. */
25 #define STACK_SIZE 128
26 #define STACK_OFFSET 128+0x7ff
27 .register %g2, #scratch
30 #define STACK_OFFSET 64
36 sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */
38 stx %o4, [%sp + STACK_OFFSET] /* Store Group */
39 stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */
41 add %sp, STACK_OFFSET, %o5 /* IEU0 */
42 stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */
43 stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */
44 1: ldub [%o1], %o2 /* Load Group */
46 brz,pn %o2, 2f /* CTI+IEU1 Group */
47 srl %o2, 3, %o3 /* IEU0 */
48 and %o3, 0x18, %o3 /* IEU0 Group */
49 and %o2, 0x3f, %o2 /* IEU1 */
51 ldx [%o5 + %o3], %g2 /* Load Group */
52 sllx %o4, %o2, %g1 /* IEU0 */
53 add %o1, 1, %o1 /* IEU1 */
54 or %g2, %g1, %g2 /* IEU0 Group */
56 ba,pt %xcc, 1b /* CTI */
57 stx %g2, [%o5 + %o3] /* Store */
58 2: andcc %o0, 7, %g0 /* IEU1 Group */
59 be,a,pt %xcc, 4f /* CTI */
61 ldx [%o0], %o2 /* Load */
62 ldub [%o0], %o2 /* Load Group */
63 3: srl %o2, 3, %o3 /* IEU0 Group */
64 and %o2, 0x3f, %o2 /* IEU1 */
66 and %o3, 0x18, %o3 /* IEU0 Group */
67 ldx [%o5 + %o3], %g2 /* Load Group */
68 sllx %o4, %o2, %g1 /* IEU0 */
69 add %o0, 1, %o0 /* IEU1 */
71 andcc %g2, %g1, %g0 /* IEU1 Group */
72 bne,pn %xcc, 12f /* CTI */
73 andcc %o0, 7, %g0 /* IEU1 Group */
74 bne,a,pt %icc, 3b /* CTI */
76 ldub [%o0], %o2 /* Load */
77 ldx [%o0], %o2 /* Load Group */
78 4: srlx %o2, 59, %o3 /* IEU0 Group */
79 srlx %o2, 56, %g4 /* IEU0 Group */
81 5: and %o3, 0x18, %o3 /* IEU1 */
82 andcc %g4, 0x3f, %g4 /* IEU1 Group */
83 ldx [%o5 + %o3], %g2 /* Load */
84 srlx %o2, 51, %o3 /* IEU0 */
86 sllx %o4, %g4, %g1 /* IEU0 Group */
87 srlx %o2, 48, %g4 /* IEU0 Group */
88 andcc %g2, %g1, %g2 /* IEU1 */
89 bne,pn %xcc, 13f /* CTI */
91 and %o3, 0x18, %o3 /* IEU0 Group */
92 and %g4, 0x3f, %g4 /* IEU1 */
93 ldx [%o5 + %o3], %g2 /* Load Group */
94 srlx %o2, 43, %o3 /* IEU0 */
96 sllx %o4, %g4, %g1 /* IEU0 Group */
97 srlx %o2, 40, %g4 /* IEU0 Group */
98 andcc %g2, %g1, %g2 /* IEU1 */
99 bne,pn %xcc, 14f /* CTI */
101 and %o3, 0x18, %o3 /* IEU0 Group */
102 and %g4, 0x3f, %g4 /* IEU1 */
103 ldx [%o5 + %o3], %g2 /* Load Group */
104 srlx %o2, 35, %o3 /* IEU0 */
106 sllx %o4, %g4, %g1 /* IEU0 Group */
107 srlx %o2, 32, %g4 /* IEU0 Group */
108 andcc %g2, %g1, %g2 /* IEU1 */
109 bne,pn %xcc, 15f /* CTI */
111 and %o3, 0x18, %o3 /* IEU0 Group */
112 and %g4, 0x3f, %g4 /* IEU1 */
113 ldx [%o5 + %o3], %g2 /* Load Group */
114 srlx %o2, 27, %o3 /* IEU0 */
116 sllx %o4, %g4, %g1 /* IEU0 Group */
117 srlx %o2, 24, %g4 /* IEU0 Group */
118 andcc %g2, %g1, %g2 /* IEU1 */
119 bne,pn %xcc, 16f /* CTI */
121 and %o3, 0x18, %o3 /* IEU0 Group */
122 and %g4, 0x3f, %g4 /* IEU1 */
123 ldx [%o5 + %o3], %g2 /* Load Group */
124 srlx %o2, 19, %o3 /* IEU0 */
126 sllx %o4, %g4, %g1 /* IEU0 Group */
127 srlx %o2, 16, %g4 /* IEU0 Group */
128 andcc %g2, %g1, %g2 /* IEU1 */
129 bne,pn %xcc, 17f /* CTI */
131 and %o3, 0x18, %o3 /* IEU0 Group */
132 and %g4, 0x3f, %g4 /* IEU1 */
133 ldx [%o5 + %o3], %g2 /* Load Group */
134 srlx %o2, 11, %o3 /* IEU0 */
136 sllx %o4, %g4, %g1 /* IEU0 Group */
137 add %o0, 8, %o0 /* IEU1 */
138 srlx %o2, 8, %g4 /* IEU0 Group */
139 andcc %g2, %g1, %g2 /* IEU1 */
141 bne,pn %xcc, 18f /* CTI */
142 and %o3, 0x18, %o3 /* IEU0 Group */
143 and %g4, 0x3f, %g4 /* IEU1 */
144 ldx [%o5 + %o3], %g2 /* Load Group */
146 sllx %o4, %g4, %g1 /* IEU0 */
147 mov %o2, %g5 /* IEU1 */
148 srlx %o2, 3, %o3 /* IEU0 Group */
149 ldxa [%o0] ASI_PNF, %o2 /* Load */
151 andcc %g2, %g1, %g2 /* IEU1 Group */
152 bne,pn %xcc, 19f /* CTI */
153 and %o3, 0x18, %o3 /* IEU0 Group */
154 and %g5, 0x3f, %g4 /* IEU1 */
156 ldx [%o5 + %o3], %g2 /* Load Group */
157 sllx %o4, %g4, %g1 /* IEU0 */
158 srlx %o2, 59, %o3 /* IEU0 Group */
159 andcc %g2, %g1, %g2 /* IEU1 Group */
161 be,pt %xcc, 5b /* CTI */
162 srlx %o2, 56, %g4 /* IEU0 Group */
163 sub %o0, 1, %o0 /* IEU1 */
164 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
166 andcc %g5, 0xff, %g0 /* IEU1 */
167 retl /* CTI+IEU1 Group */
168 move %icc, 0, %o0 /* Single Group */
171 19: sub %o0, 2, %o0 /* IEU1 */
172 srl %g5, 8, %g1 /* IEU0 Group */
173 add %sp, STACK_SIZE+32, %sp /* IEU1 */
174 andcc %g1, 0xff, %g0 /* IEU1 Group */
176 retl /* CTI+IEU1 Group */
177 move %icc, 0, %o0 /* Single Group */
178 18: sub %o0, 3, %o0 /* IEU1 */
179 srl %o2, 16, %g1 /* IEU0 Group */
181 add %sp, STACK_SIZE+32, %sp /* IEU1 */
182 andcc %g1, 0xff, %g0 /* IEU1 Group */
183 retl /* CTI+IEU1 Group */
184 move %icc, 0, %o0 /* Single Group */
186 17: add %o0, 4, %o0 /* IEU1 */
187 srl %o2, 24, %g1 /* IEU0 Group */
188 add %sp, STACK_SIZE+32, %sp /* IEU1 */
189 retl /* CTI+IEU1 Group */
191 movrz %g1, 0, %o0 /* Single Group */
192 16: add %o0, 3, %o0 /* IEU1 */
193 srlx %o2, 32, %g1 /* IEU0 Group */
194 add %sp, STACK_SIZE+32, %sp /* IEU1 */
196 andcc %g1, 0xff, %g0 /* IEU1 Group */
197 retl /* CTI+IEU1 Group */
198 move %icc, 0, %o0 /* Single Group */
201 15: add %o0, 2, %o0 /* IEU1 */
202 srlx %o2, 40, %g1 /* IEU0 Group */
203 add %sp, STACK_SIZE+32, %sp /* IEU1 */
204 andcc %g1, 0xff, %g0 /* IEU1 Group */
206 retl /* CTI+IEU1 Group */
207 move %icc, 0, %o0 /* Single Group */
208 14: add %o0, 1, %o0 /* IEU1 */
209 srlx %o2, 48, %g1 /* IEU0 Group */
211 add %sp, STACK_SIZE+32, %sp /* IEU1 */
212 andcc %g1, 0xff, %g0 /* IEU1 Group */
213 retl /* CTI+IEU1 Group */
214 move %icc, 0, %o0 /* Single Group */
216 13: add %sp, STACK_SIZE+32, %sp /* IEU1 */
217 srlx %o2, 56, %g1 /* IEU0 Group */
218 retl /* CTI+IEU1 Group */
219 movrz %g1, 0, %o0 /* Single Group */
222 12: sub %o0, 1, %o0 /* IEU0 Group */
223 or %o3, %o2, %g1 /* IEU1 */
224 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
225 retl /* CTI+IEU1 Group */
227 movrz %g1, 0, %o0 /* Single Group */
229 libc_hidden_builtin_def (strpbrk)