]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/sparc/sparc64/strchr.S
Fix spellings of contributor names in comments and doc
[thirdparty/glibc.git] / sysdeps / sparc / sparc64 / strchr.S
CommitLineData
ae6b8730
RH
1/* strchr (str, ch) -- Return pointer to first occurrence of CH in STR.
2 For SPARC v9.
04277e02 3 Copyright (C) 1998-2019 Free Software Foundation, Inc.
ae6b8730 4 This file is part of the GNU C Library.
e6855a3b 5 Contributed by Jan Vondrák <jvon4518@ss1000.ms.mff.cuni.cz> and
ae6b8730
RH
6 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 USE_BPR
8cb079d4
UD
27 .register %g2, #scratch
28 .register %g3, #scratch
62f29da7 29 .register %g6, #scratch
ae6b8730
RH
30#endif
31
32 /* Normally, this uses
33 ((xword - 0x0101010101010101) & 0x8080808080808080) test
34 to find out if any byte in xword could be zero. This is fast, but
35 also gives false alarm for any byte in range 0x81-0xff. It does
36 not matter for correctness, as if this test tells us there could
37 be some zero byte, we check it byte by byte, but if bytes with
38 high bits set are common in the strings, then this will give poor
39 performance. You can #define EIGHTBIT_NOT_RARE and the algorithm
40 will use one tick slower, but more precise test
41 ((xword - 0x0101010101010101) & (~xword) & 0x8080808080808080),
42 which does not give any false alarms (but if some bits are set,
43 one cannot assume from it which bytes are zero and which are not).
44 It is yet to be measured, what is the correct default for glibc
45 in these days for an average user.
46 */
47
48 .text
49 .align 32
50ENTRY(strchr)
407d26b7
UD
51 andcc %o1, 0xff, %o1 /* IEU1 Group */
52 be,pn %icc, 17f /* CTI */
53 sllx %o1, 8, %g3 /* IEU0 Group */
54 sethi %hi(0x01010101), %g1 /* IEU1 */
ae6b8730 55
407d26b7 56 or %g3, %o1, %g3 /* IEU0 Group */
ae6b8730
RH
57 ldub [%o0], %o3 /* Load */
58 sllx %g3, 16, %g5 /* IEU0 Group */
59 or %g1, %lo(0x01010101), %g1 /* IEU1 */
ae6b8730 60
407d26b7 61 sllx %g1, 32, %g2 /* IEU0 Group */
ae6b8730
RH
62 brz,pn %o3, 5f /* CTI+IEU1 */
63 orcc %g3, %g5, %g3 /* IEU1 Group */
64 sllx %g3, 32, %g5 /* IEU0 */
ae6b8730 65
407d26b7 66 cmp %o3, %o1 /* IEU1 Group */
ae6b8730
RH
67 be,pn %xcc, 14f /* CTI */
68 or %g1, %g2, %g1 /* IEU0 */
69 andcc %o0, 7, %g0 /* IEU1 Group */
ae6b8730 70
407d26b7 71 bne,a,pn %icc, 15f /* CTI */
ae6b8730
RH
72 add %o0, 1, %o0 /* IEU0 */
73 ldx [%o0], %o3 /* Load Group */
741: sllx %g1, 7, %g2 /* IEU0 */
ae6b8730 75
407d26b7 76 or %g3, %g5, %g3 /* IEU1 */
ae6b8730
RH
77 add %o0, 8, %o0 /* IEU0 Group */
78 xor %o3, %g3, %o4 /* IEU1 */
79 /* %g1 = 0101010101010101 *
80 * %g2 = 8080088080808080 *
81 * %g3 = c c c c c c c c *
82 * %o3 = value *
83 * %o4 = value XOR c */
842: sub %o3, %g1, %o2 /* IEU0 Group */
ae6b8730 85
407d26b7 86 sub %o4, %g1, %o5 /* IEU1 */
ae6b8730 87#ifdef EIGHTBIT_NOT_RARE
62f29da7 88 andn %o2, %o3, %g6 /* IEU0 Group */
ae6b8730
RH
89 andn %o5, %o4, %o5 /* IEU1 */
90 ldxa [%o0] ASI_PNF, %o3 /* Load */
62f29da7 91 or %o5, %g6, %o5 /* IEU0 Group */
ae6b8730
RH
92#else
93 ldxa [%o0] ASI_PNF, %o3 /* Load */
94 or %o5, %o2, %o5 /* IEU0 Group */
95#endif
96 add %o0, 8, %o0 /* IEU1 */
ae6b8730 97
407d26b7 98 andcc %o5, %g2, %g0 /* IEU1 Group */
ae6b8730
RH
99 be,a,pt %xcc, 2b /* CTI */
100 xor %o3, %g3, %o4 /* IEU0 */
101 srlx %o5, 32, %g5 /* IEU0 Group */
ae6b8730 102
407d26b7 103 add %o2, %g1, %o2 /* IEU1 */
ae6b8730
RH
1043: andcc %g5, %g2, %g0 /* IEU1 Group */
105 be,pn %xcc, 4f /* CTI */
106 srlx %o2, 56, %g5 /* IEU0 */
ae6b8730 107
407d26b7 108 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
109 be,pn %icc, 5f /* CTI */
110 srlx %o4, 56, %g5 /* IEU0 */
111 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730 112
407d26b7 113 be,pn %icc, 6f /* CTI */
ae6b8730
RH
114 srlx %o2, 48, %g5 /* IEU0 */
115 andcc %g5, 0xff, %g0 /* IEU1 Group */
116 be,pn %icc, 5f /* CTI */
ae6b8730 117
407d26b7 118 srlx %o4, 48, %g5 /* IEU0 */
ae6b8730
RH
119 andcc %g5, 0xff, %g0 /* IEU1 Group */
120 be,pn %icc, 7f /* CTI */
121 srlx %o2, 40, %g5 /* IEU0 */
ae6b8730 122
407d26b7 123 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
124 be,pn %icc, 5f /* CTI */
125 srlx %o4, 40, %g5 /* IEU0 */
126 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730 127
407d26b7 128 be,pn %icc, 8f /* CTI */
ae6b8730
RH
129 srlx %o2, 32, %g5 /* IEU0 */
130 andcc %g5, 0xff, %g0 /* IEU1 Group */
131 be,pn %icc, 5f /* CTI */
ae6b8730 132
407d26b7 133 srlx %o4, 32, %g5 /* IEU0 */
ae6b8730
RH
134 andcc %g5, 0xff, %g0 /* IEU1 Group */
135 be,pn %icc, 9f /* CTI */
1364: srlx %o2, 24, %g5 /* IEU0 */
ae6b8730 137
407d26b7 138 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
139 be,pn %icc, 5f /* CTI */
140 srlx %o4, 24, %g5 /* IEU0 */
141 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730 142
407d26b7 143 be,pn %icc, 10f /* CTI */
ae6b8730
RH
144 srlx %o2, 16, %g5 /* IEU0 */
145 andcc %g5, 0xff, %g0 /* IEU1 Group */
146 be,pn %icc, 5f /* CTI */
ae6b8730 147
407d26b7 148 srlx %o4, 16, %g5 /* IEU0 */
ae6b8730
RH
149 andcc %g5, 0xff, %g0 /* IEU1 Group */
150 be,pn %icc, 11f /* CTI */
151 srlx %o2, 8, %g5 /* IEU0 */
ae6b8730 152
407d26b7 153 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
154 be,pn %icc, 5f /* CTI */
155 srlx %o4, 8, %g5 /* IEU0 */
156 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730 157
407d26b7 158 be,pn %icc, 12f /* CTI */
ae6b8730
RH
159 andcc %o2, 0xff, %g0 /* IEU1 Group */
160 be,pn %icc, 5f /* CTI */
161 sub %o3, %g1, %o2 /* IEU0 */
ae6b8730 162
407d26b7 163 andcc %o4, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
164 be,pn %icc, 13f /* CTI */
165 xor %o3, %g3, %o4 /* IEU0 */
166 ldxa [%o0] ASI_PNF, %o3 /* Load Group */
ae6b8730 167
407d26b7 168 sub %o4, %g1, %o5 /* IEU0 */
ae6b8730
RH
169 or %o5, %o2, %o5 /* IEU1 */
170 add %o0, 8, %o0 /* IEU0 Group */
171 andcc %o5, %g2, %g0 /* IEU1 */
ae6b8730 172
407d26b7 173 be,a,pt %xcc, 2b /* CTI */
ae6b8730
RH
174 xor %o3, %g3, %o4 /* IEU0 Group */
175 srlx %o5, 32, %g5 /* IEU0 Group */
176 ba,pt %xcc, 3b /* CTI */
407d26b7 177
ae6b8730
RH
178 add %o2, %g1, %o2 /* IEU1 */
179
180 .align 16
1815: retl /* CTI+IEU1 Group */
182 clr %o0 /* IEU0 */
1836: retl /* CTI+IEU1 Group */
184 add %o0, -16, %o0 /* IEU0 */
185
1867: retl /* CTI+IEU1 Group */
187 add %o0, -15, %o0 /* IEU0 */
1888: retl /* CTI+IEU1 Group */
189 add %o0, -14, %o0 /* IEU0 */
190
1919: retl /* CTI+IEU1 Group */
192 add %o0, -13, %o0 /* IEU0 */
19310: retl /* CTI+IEU1 Group */
194 add %o0, -12, %o0 /* IEU0 */
195
19611: retl /* CTI+IEU1 Group */
197 add %o0, -11, %o0 /* IEU0 */
19812: retl /* CTI+IEU1 Group */
199 add %o0, -10, %o0 /* IEU0 */
200
20113: retl /* CTI+IEU1 Group */
202 add %o0, -9, %o0 /* IEU0 */
20314: retl /* CTI+IEU1 Group */
204 nop /* IEU0 */
205
206 .align 16
20715: ldub [%o0], %o3 /* Load Group */
20816: andcc %o0, 7, %g0 /* IEU1 */
209 be,a,pn %icc, 1b /* CTI */
210 ldx [%o0], %o3 /* Load Group */
211
212 andcc %o3, 0xff, %g0 /* IEU1 Group */
213 be,pn %icc, 5b /* CTI */
214 add %o0, 1, %o0 /* IEU0 */
215 cmp %o3, %o1 /* IEU1 Group */
216
217 bne,a,pn %icc, 16b /* CTI */
218 ldub [%o0], %o3 /* Load */
219 retl /* CTI+IEU1 Group */
220 add %o0, -1, %o0 /* IEU0 */
221
222 /* strchr (str, 0) */
223 .align 32
224 nop
225 .align 16
22617: sethi %hi(0x01010101), %g1 /* IEU0 Group */
227 ldub [%o0], %o3 /* Load */
228 or %g1, %lo(0x01010101), %g1 /* IEU0 Group */
229 sllx %g1, 32, %g2 /* IEU0 Group */
230
231 andcc %o0, 7, %g0 /* IEU1 */
232 or %g1, %g2, %g1 /* IEU0 Group */
233 bne,pn %icc, 32f /* CTI */
234 sllx %g1, 7, %g2 /* IEU0 Group */
235
236 brz,pn %o3, 30f /* CTI+IEU1 */
237 ldx [%o0], %o3 /* Load */
23818: add %o0, 8, %o0 /* IEU0 Group */
23919: sub %o3, %g1, %o2 /* IEU0 Group */
240
241#ifdef EIGHTBIT_NOT_RARE
62f29da7 242 andn %o2, %o3, %g6 /* IEU0 Group */
ae6b8730 243 ldxa [%o0] ASI_PNF, %o3 /* Load */
62f29da7 244 andcc %g6, %g2, %g0 /* IEU1 Group */
ae6b8730
RH
245#else
246 ldxa [%o0] ASI_PNF, %o3 /* Load */
247 andcc %o2, %g2, %g0 /* IEU1 Group */
248#endif
249 be,pt %xcc, 19b /* CTI */
250 add %o0, 8, %o0 /* IEU0 */
251
252 addcc %o2, %g1, %g3 /* IEU1 Group */
253 srlx %o2, 32, %o2 /* IEU0 */
25420: andcc %o2, %g2, %g0 /* IEU1 Group */
255 be,pn %xcc, 21f /* CTI */
256
257 srlx %g3, 56, %o2 /* IEU0 */
258 andcc %o2, 0xff, %g0 /* IEU1 Group */
259 be,pn %icc, 29f /* CTI */
260 srlx %g3, 48, %o2 /* IEU0 */
261
262 andcc %o2, 0xff, %g0 /* IEU1 Group */
263 be,pn %icc, 28f /* CTI */
264 srlx %g3, 40, %o2 /* IEU0 */
265 andcc %o2, 0xff, %g0 /* IEU1 Group */
266
267 be,pn %icc, 27f /* CTI */
268 srlx %g3, 32, %o2 /* IEU0 */
269 andcc %o2, 0xff, %g0 /* IEU1 Group */
270 be,pn %icc, 26f /* CTI */
271
27221: srlx %g3, 24, %o2 /* IEU0 */
273 andcc %o2, 0xff, %g0 /* IEU1 Group */
274 be,pn %icc, 25f /* CTI */
275 srlx %g3, 16, %o2 /* IEU0 */
276
277 andcc %o2, 0xff, %g0 /* IEU1 Group */
278 be,pn %icc, 24f /* CTI */
279 srlx %g3, 8, %o2 /* IEU0 */
280 andcc %o2, 0xff, %g0 /* IEU1 Group */
281
282 be,pn %icc, 23f /* CTI */
283 sub %o3, %g1, %o2 /* IEU0 */
284 andcc %g3, 0xff, %g0 /* IEU1 Group */
285 be,pn %icc, 22f /* CTI */
286
287 ldxa [%o0] ASI_PNF, %o3 /* Load */
288 andcc %o2, %g2, %g0 /* IEU1 Group */
289 be,pt %xcc, 19b /* CTI */
290 add %o0, 8, %o0 /* IEU0 */
291
292 addcc %o2, %g1, %g3 /* IEU1 Group */
293 ba,pt %xcc, 20b /* CTI */
294 srlx %o2, 32, %o2 /* IEU0 */
295
296 .align 16
29722: retl /* CTI+IEU1 Group */
298 add %o0, -9, %o0 /* IEU0 */
29923: retl /* CTI+IEU1 Group */
300 add %o0, -10, %o0 /* IEU0 */
301
30224: retl /* CTI+IEU1 Group */
303 add %o0, -11, %o0 /* IEU0 */
30425: retl /* CTI+IEU1 Group */
305 add %o0, -12, %o0 /* IEU0 */
306
30726: retl /* CTI+IEU1 Group */
308 add %o0, -13, %o0 /* IEU0 */
30927: retl /* CTI+IEU1 Group */
310 add %o0, -14, %o0 /* IEU0 */
311
31228: retl /* CTI+IEU1 Group */
313 add %o0, -15, %o0 /* IEU0 */
31429: retl /* CTI+IEU1 Group */
315 add %o0, -16, %o0 /* IEU0 */
316
31730: retl /* CTI+IEU1 Group */
318 nop /* IEU0 */
319
320 .align 16
32132: andcc %o0, 7, %g0 /* IEU1 Group */
322 be,a,pn %icc, 18b /* CTI */
323 ldx [%o0], %o3 /* Load */
324 add %o0, 1, %o0 /* IEU0 Group */
325
326 brnz,a,pt %o3, 32b /* CTI+IEU1 */
327 lduba [%o0] ASI_PNF, %o3 /* Load */
328 retl /* CTI+IEU1 Group */
329 add %o0, -1, %o0 /* IEU0 */
330END(strchr)
331
332 .align 32
333ENTRY(strrchr)
407d26b7
UD
334 andcc %o1, 0xff, %o1 /* IEU1 Group */
335 be,pn %icc, 17b /* CTI */
ae6b8730
RH
336 clr %g4 /* IEU0 */
337 andcc %o0, 7, %g0 /* IEU1 Group */
ae6b8730 338
407d26b7 339 bne,pn %icc, 13f /* CTI */
ae6b8730
RH
340 sllx %o1, 8, %g3 /* IEU0 */
341 ldx [%o0], %o3 /* Load Group */
3421: sethi %hi(0x01010101), %g1 /* IEU0 */
ae6b8730 343
407d26b7 344 or %g3, %o1, %g3 /* IEU1 */
ae6b8730
RH
345 sllx %g3, 16, %g5 /* IEU0 Group */
346 or %g1, %lo(0x01010101), %g1 /* IEU1 */
347 sllx %g1, 32, %g2 /* IEU0 Group */
ae6b8730 348
407d26b7 349 or %g3, %g5, %g3 /* IEU1 */
ae6b8730
RH
350 sllx %g3, 32, %g5 /* IEU0 Group */
351 or %g1, %g2, %g1 /* IEU1 */
352 sllx %g1, 7, %g2 /* IEU0 Group */
ae6b8730 353
407d26b7 354 or %g3, %g5, %g3 /* IEU1 */
ae6b8730
RH
355 add %o0, 8, %o0 /* IEU0 Group */
356 xor %o3, %g3, %o4 /* IEU1 */
357 /* %g1 = 0101010101010101 *
358 * %g2 = 8080088080808080 *
359 * %g3 = c c c c c c c c *
360 * %o3 = value *
361 * %o4 = value XOR c */
3622: sub %o3, %g1, %o2 /* IEU0 Group */
407d26b7 363
ae6b8730
RH
3643: sub %o4, %g1, %o5 /* IEU1 */
365#ifdef EIGHTBIT_NOT_RARE
62f29da7 366 andn %o2, %o3, %g6 /* IEU0 Group */
ae6b8730
RH
367 andn %o5, %o4, %o5 /* IEU1 */
368 ldxa [%o0] ASI_PNF, %o3 /* Load */
407d26b7 369
62f29da7 370 or %o5, %g6, %o5 /* IEU0 Group */
ae6b8730
RH
371#else
372 ldxa [%o0] ASI_PNF, %o3 /* Load */
407d26b7 373
ae6b8730
RH
374 or %o5, %o2, %o5 /* IEU0 Group */
375#endif
ae6b8730
RH
376 add %o0, 8, %o0 /* IEU1 */
377 andcc %o5, %g2, %g0 /* IEU1 Group */
378 be,a,pt %xcc, 2b /* CTI */
ae6b8730 379
407d26b7 380 xor %o3, %g3, %o4 /* IEU0 */
ae6b8730
RH
381 srlx %o5, 32, %g5 /* IEU0 Group */
382 add %o2, %g1, %o2 /* IEU1 */
383 andcc %g5, %g2, %g0 /* IEU1 Group */
ae6b8730 384
407d26b7 385 be,pn %xcc, 7f /* CTI */
ae6b8730
RH
386 srlx %o2, 56, %g5 /* IEU0 */
387 andcc %g5, 0xff, %g0 /* IEU1 Group */
388 be,pn %icc, 12f /* CTI */
ae6b8730 389
407d26b7 390 srlx %o4, 56, %g5 /* IEU0 */
ae6b8730
RH
391 andcc %g5, 0xff, %g0 /* IEU1 Group */
392 srlx %o2, 48, %g5 /* IEU0 */
393 be,a,pn %icc, 4f /* CTI */
ae6b8730 394
407d26b7 395 add %o0, -16, %g4 /* IEU0 Group */
ae6b8730
RH
3964: andcc %g5, 0xff, %g0 /* IEU1 Group */
397 be,pn %icc, 12f /* CTI */
398 srlx %o4, 48, %g5 /* IEU0 */
ae6b8730 399
407d26b7 400 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
401 srlx %o2, 40, %g5 /* IEU0 */
402 be,a,pn %icc, 5f /* CTI */
403 add %o0, -15, %g4 /* IEU0 Group */
ae6b8730 404
407d26b7 4055: andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
406 be,pn %icc, 12f /* CTI */
407 srlx %o4, 40, %g5 /* IEU0 */
408 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730 409
407d26b7 410 srlx %o2, 32, %g5 /* IEU0 */
ae6b8730
RH
411 be,a,pn %icc, 6f /* CTI */
412 add %o0, -14, %g4 /* IEU0 Group */
4136: andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730 414
407d26b7 415 be,pn %icc, 12f /* CTI */
ae6b8730
RH
416 srlx %o4, 32, %g5 /* IEU0 */
417 andcc %g5, 0xff, %g0 /* IEU1 Group */
418 be,a,pn %icc, 7f /* CTI */
ae6b8730 419
407d26b7 420 add %o0, -13, %g4 /* IEU0 */
ae6b8730
RH
4217: srlx %o2, 24, %g5 /* IEU0 */
422 andcc %g5, 0xff, %g0 /* IEU1 Group */
423 be,pn %icc, 12f /* CTI */
ae6b8730 424
407d26b7 425 srlx %o4, 24, %g5 /* IEU0 */
ae6b8730
RH
426 andcc %g5, 0xff, %g0 /* IEU1 Group */
427 srlx %o2, 16, %g5 /* IEU0 */
428 be,a,pn %icc, 8f /* CTI */
ae6b8730 429
407d26b7 430 add %o0, -12, %g4 /* IEU0 Group */
ae6b8730
RH
4318: andcc %g5, 0xff, %g0 /* IEU1 Group */
432 be,pn %icc, 12f /* CTI */
433 srlx %o4, 16, %g5 /* IEU0 */
ae6b8730 434
407d26b7 435 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
436 srlx %o2, 8, %g5 /* IEU0 */
437 be,a,pn %icc, 9f /* CTI */
438 add %o0, -11, %g4 /* IEU0 Group */
ae6b8730 439
407d26b7 4409: andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730
RH
441 be,pn %icc, 12f /* CTI */
442 srlx %o4, 8, %g5 /* IEU0 */
443 andcc %g5, 0xff, %g0 /* IEU1 Group */
ae6b8730 444
407d26b7 445 be,a,pn %icc, 10f /* CTI */
ae6b8730
RH
446 add %o0, -10, %g4 /* IEU0 */
44710: andcc %o2, 0xff, %g0 /* IEU1 Group */
448 be,pn %icc, 12f /* CTI */
ae6b8730 449
407d26b7 450 sub %o3, %g1, %o2 /* IEU0 */
ae6b8730
RH
451 andcc %o4, 0xff, %g0 /* IEU1 Group */
452 be,a,pn %icc, 11f /* CTI */
453 add %o0, -9, %g4 /* IEU0 */
ae6b8730 454
407d26b7 45511: ba,pt %xcc, 3b /* CTI Group */
ae6b8730
RH
456 xor %o3, %g3, %o4 /* IEU0 Group */
45712: retl /* CTI+IEU1 Group */
458 mov %g4, %o0 /* IEU0 */
459
460 .align 16
46113: ldub [%o0], %o3 /* Load Group */
462 add %o0, 1, %o0 /* IEU0 */
46314: andcc %o3, 0xff, %g0 /* IEU1 Group */
464 be,pn %icc, 12b /* CTI */
465
466 cmp %o3, %o1 /* IEU1 Group */
467 ldub [%o0], %o3 /* Load */
468 be,a,pn %icc, 15f /* CTI */
469 add %o0, -1, %g4 /* IEU0 Group */
470
47115: andcc %o0, 7, %g0 /* IEU1 Group */
472 bne,a,pt %icc, 14b /* CTI */
473 add %o0, 1, %o0 /* IEU0 */
474 ba,pt %xcc, 1b /* CTI Group */
475
476 ldx [%o0], %o3 /* Load */
477END(strrchr)
478
479weak_alias (strchr, index)
480weak_alias (strrchr, rindex)
85dd1003
UD
481libc_hidden_builtin_def (strchr)
482libc_hidden_builtin_def (strrchr)