]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/sparc/sparc64/strpbrk.S
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / sparc / sparc64 / strpbrk.S
CommitLineData
ae6b8730
RH
1/* strpbrk (s, accept) -- Find the first occurrence in S of any character in
2 ACCEPT.
3 For SPARC v9.
04277e02 4 Copyright (C) 1999-2019 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 19 License along with the GNU C Library; if not, see
5a82c748 20 <https://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(strpbrk)
37 sub %sp, STACK_SIZE+32, %sp /* IEU0 Group */
38 mov 1, %o4 /* IEU1 */
39 stx %o4, [%sp + STACK_OFFSET] /* Store Group */
40 stx %g0, [%sp + STACK_OFFSET + 8] /* Store Group */
41
42 add %sp, STACK_OFFSET, %o5 /* IEU0 */
43 stx %g0, [%sp + STACK_OFFSET + 16] /* Store Group */
44 stx %g0, [%sp + STACK_OFFSET + 24] /* Store Group */
451: ldub [%o1], %o2 /* Load Group */
46
47 brz,pn %o2, 2f /* CTI+IEU1 Group */
48 srl %o2, 3, %o3 /* IEU0 */
49 and %o3, 0x18, %o3 /* IEU0 Group */
50 and %o2, 0x3f, %o2 /* IEU1 */
51
52 ldx [%o5 + %o3], %g2 /* Load Group */
53 sllx %o4, %o2, %g1 /* IEU0 */
54 add %o1, 1, %o1 /* IEU1 */
55 or %g2, %g1, %g2 /* IEU0 Group */
56
57 ba,pt %xcc, 1b /* CTI */
58 stx %g2, [%o5 + %o3] /* Store */
592: andcc %o0, 7, %g0 /* IEU1 Group */
60 be,a,pt %xcc, 4f /* CTI */
61
62 ldx [%o0], %o2 /* Load */
63 ldub [%o0], %o2 /* Load Group */
643: srl %o2, 3, %o3 /* IEU0 Group */
65 and %o2, 0x3f, %o2 /* IEU1 */
66
67 and %o3, 0x18, %o3 /* IEU0 Group */
68 ldx [%o5 + %o3], %g2 /* Load Group */
69 sllx %o4, %o2, %g1 /* IEU0 */
70 add %o0, 1, %o0 /* IEU1 */
71
72 andcc %g2, %g1, %g0 /* IEU1 Group */
73 bne,pn %xcc, 12f /* CTI */
74 andcc %o0, 7, %g0 /* IEU1 Group */
75 bne,a,pt %icc, 3b /* CTI */
76
77 ldub [%o0], %o2 /* Load */
78 ldx [%o0], %o2 /* Load Group */
794: srlx %o2, 59, %o3 /* IEU0 Group */
8cb079d4 80 srlx %o2, 56, %g4 /* IEU0 Group */
ae6b8730
RH
81
825: and %o3, 0x18, %o3 /* IEU1 */
8cb079d4 83 andcc %g4, 0x3f, %g4 /* IEU1 Group */
ae6b8730
RH
84 ldx [%o5 + %o3], %g2 /* Load */
85 srlx %o2, 51, %o3 /* IEU0 */
86
8cb079d4
UD
87 sllx %o4, %g4, %g1 /* IEU0 Group */
88 srlx %o2, 48, %g4 /* IEU0 Group */
ae6b8730
RH
89 andcc %g2, %g1, %g2 /* IEU1 */
90 bne,pn %xcc, 13f /* CTI */
91
92 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 93 and %g4, 0x3f, %g4 /* IEU1 */
ae6b8730
RH
94 ldx [%o5 + %o3], %g2 /* Load Group */
95 srlx %o2, 43, %o3 /* IEU0 */
96
8cb079d4
UD
97 sllx %o4, %g4, %g1 /* IEU0 Group */
98 srlx %o2, 40, %g4 /* IEU0 Group */
ae6b8730
RH
99 andcc %g2, %g1, %g2 /* IEU1 */
100 bne,pn %xcc, 14f /* CTI */
101
102 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 103 and %g4, 0x3f, %g4 /* IEU1 */
ae6b8730
RH
104 ldx [%o5 + %o3], %g2 /* Load Group */
105 srlx %o2, 35, %o3 /* IEU0 */
106
8cb079d4
UD
107 sllx %o4, %g4, %g1 /* IEU0 Group */
108 srlx %o2, 32, %g4 /* IEU0 Group */
ae6b8730
RH
109 andcc %g2, %g1, %g2 /* IEU1 */
110 bne,pn %xcc, 15f /* CTI */
111
112 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 113 and %g4, 0x3f, %g4 /* IEU1 */
ae6b8730
RH
114 ldx [%o5 + %o3], %g2 /* Load Group */
115 srlx %o2, 27, %o3 /* IEU0 */
116
8cb079d4
UD
117 sllx %o4, %g4, %g1 /* IEU0 Group */
118 srlx %o2, 24, %g4 /* IEU0 Group */
ae6b8730
RH
119 andcc %g2, %g1, %g2 /* IEU1 */
120 bne,pn %xcc, 16f /* CTI */
121
122 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 123 and %g4, 0x3f, %g4 /* IEU1 */
ae6b8730
RH
124 ldx [%o5 + %o3], %g2 /* Load Group */
125 srlx %o2, 19, %o3 /* IEU0 */
126
8cb079d4
UD
127 sllx %o4, %g4, %g1 /* IEU0 Group */
128 srlx %o2, 16, %g4 /* IEU0 Group */
ae6b8730
RH
129 andcc %g2, %g1, %g2 /* IEU1 */
130 bne,pn %xcc, 17f /* CTI */
131
132 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 133 and %g4, 0x3f, %g4 /* IEU1 */
ae6b8730
RH
134 ldx [%o5 + %o3], %g2 /* Load Group */
135 srlx %o2, 11, %o3 /* IEU0 */
136
8cb079d4 137 sllx %o4, %g4, %g1 /* IEU0 Group */
ae6b8730 138 add %o0, 8, %o0 /* IEU1 */
8cb079d4 139 srlx %o2, 8, %g4 /* IEU0 Group */
ae6b8730
RH
140 andcc %g2, %g1, %g2 /* IEU1 */
141
142 bne,pn %xcc, 18f /* CTI */
143 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 144 and %g4, 0x3f, %g4 /* IEU1 */
ae6b8730
RH
145 ldx [%o5 + %o3], %g2 /* Load Group */
146
8cb079d4 147 sllx %o4, %g4, %g1 /* IEU0 */
ae6b8730
RH
148 mov %o2, %g5 /* IEU1 */
149 srlx %o2, 3, %o3 /* IEU0 Group */
150 ldxa [%o0] ASI_PNF, %o2 /* Load */
151
152 andcc %g2, %g1, %g2 /* IEU1 Group */
153 bne,pn %xcc, 19f /* CTI */
154 and %o3, 0x18, %o3 /* IEU0 Group */
8cb079d4 155 and %g5, 0x3f, %g4 /* IEU1 */
ae6b8730
RH
156
157 ldx [%o5 + %o3], %g2 /* Load Group */
8cb079d4 158 sllx %o4, %g4, %g1 /* IEU0 */
ae6b8730
RH
159 srlx %o2, 59, %o3 /* IEU0 Group */
160 andcc %g2, %g1, %g2 /* IEU1 Group */
161
162 be,pt %xcc, 5b /* CTI */
8cb079d4 163 srlx %o2, 56, %g4 /* IEU0 Group */
ae6b8730
RH
164 sub %o0, 1, %o0 /* IEU1 */
165 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
166
167 andcc %g5, 0xff, %g0 /* IEU1 */
168 retl /* CTI+IEU1 Group */
169 move %icc, 0, %o0 /* Single Group */
170
171 .align 16
17219: sub %o0, 2, %o0 /* IEU1 */
173 srl %g5, 8, %g1 /* IEU0 Group */
174 add %sp, STACK_SIZE+32, %sp /* IEU1 */
175 andcc %g1, 0xff, %g0 /* IEU1 Group */
176
177 retl /* CTI+IEU1 Group */
178 move %icc, 0, %o0 /* Single Group */
17918: sub %o0, 3, %o0 /* IEU1 */
180 srl %o2, 16, %g1 /* IEU0 Group */
181
182 add %sp, STACK_SIZE+32, %sp /* IEU1 */
183 andcc %g1, 0xff, %g0 /* IEU1 Group */
184 retl /* CTI+IEU1 Group */
185 move %icc, 0, %o0 /* Single Group */
186
18717: add %o0, 4, %o0 /* IEU1 */
188 srl %o2, 24, %g1 /* IEU0 Group */
189 add %sp, STACK_SIZE+32, %sp /* IEU1 */
190 retl /* CTI+IEU1 Group */
191
192 movrz %g1, 0, %o0 /* Single Group */
19316: add %o0, 3, %o0 /* IEU1 */
194 srlx %o2, 32, %g1 /* IEU0 Group */
195 add %sp, STACK_SIZE+32, %sp /* IEU1 */
196
197 andcc %g1, 0xff, %g0 /* IEU1 Group */
198 retl /* CTI+IEU1 Group */
199 move %icc, 0, %o0 /* Single Group */
200
201 .align 16
20215: add %o0, 2, %o0 /* IEU1 */
203 srlx %o2, 40, %g1 /* IEU0 Group */
204 add %sp, STACK_SIZE+32, %sp /* IEU1 */
205 andcc %g1, 0xff, %g0 /* IEU1 Group */
206
207 retl /* CTI+IEU1 Group */
208 move %icc, 0, %o0 /* Single Group */
20914: add %o0, 1, %o0 /* IEU1 */
210 srlx %o2, 48, %g1 /* IEU0 Group */
211
212 add %sp, STACK_SIZE+32, %sp /* IEU1 */
213 andcc %g1, 0xff, %g0 /* IEU1 Group */
214 retl /* CTI+IEU1 Group */
215 move %icc, 0, %o0 /* Single Group */
216
21713: add %sp, STACK_SIZE+32, %sp /* IEU1 */
218 srlx %o2, 56, %g1 /* IEU0 Group */
219 retl /* CTI+IEU1 Group */
220 movrz %g1, 0, %o0 /* Single Group */
221
222 .align 16
22312: sub %o0, 1, %o0 /* IEU0 Group */
224 or %o3, %o2, %g1 /* IEU1 */
225 add %sp, STACK_SIZE+32, %sp /* IEU0 Group */
226 retl /* CTI+IEU1 Group */
227
228 movrz %g1, 0, %o0 /* Single Group */
229END(strpbrk)
85dd1003 230libc_hidden_builtin_def (strpbrk)