]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/x86_64/multiarch/ifunc-impl-list.c
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / sysdeps / x86_64 / multiarch / ifunc-impl-list.c
CommitLineData
ac49ecaf 1/* Enumerate available IFUNC implementations of a function. x86-64 version.
6d7e8eda 2 Copyright (C) 2012-2023 Free Software Foundation, Inc.
ac49ecaf
L
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
5a82c748 17 <https://www.gnu.org/licenses/>. */
ac49ecaf
L
18
19#include <assert.h>
20#include <string.h>
21#include <wchar.h>
22#include <ifunc-impl-list.h>
83d776f9 23#include <sysdep.h>
ac49ecaf
L
24#include "init-arch.h"
25
ac49ecaf
L
26/* Fill ARRAY of MAX elements with IFUNC implementations for function
27 NAME supported on target machine and return the number of valid
3edda6a0
NG
28 entries. Each set of implementations for a given function is sorted in
29 descending order by ISA level. */
ac49ecaf
L
30
31size_t
32__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
33 size_t max)
34{
fdaf7865 35 size_t i = max;
ac49ecaf 36
cf4fd28e
NG
37 /* Support sysdeps/x86_64/multiarch/memcmpeq.c. */
38 IFUNC_IMPL (i, name, __memcmpeq,
ae308947
NG
39 X86_IFUNC_IMPL_ADD_V4 (array, i, __memcmpeq,
40 (CPU_FEATURE_USABLE (AVX512VL)
41 && CPU_FEATURE_USABLE (AVX512BW)
42 && CPU_FEATURE_USABLE (BMI2)),
43 __memcmpeq_evex)
44 X86_IFUNC_IMPL_ADD_V3 (array, i, __memcmpeq,
45 (CPU_FEATURE_USABLE (AVX2)
46 && CPU_FEATURE_USABLE (BMI2)),
47 __memcmpeq_avx2)
48 X86_IFUNC_IMPL_ADD_V3 (array, i, __memcmpeq,
49 (CPU_FEATURE_USABLE (AVX2)
50 && CPU_FEATURE_USABLE (BMI2)
51 && CPU_FEATURE_USABLE (RTM)),
52 __memcmpeq_avx2_rtm)
53 /* ISA V2 wrapper for SSE2 implementation because the SSE2
54 implementation is also used at ISA level 2. */
55 X86_IFUNC_IMPL_ADD_V2 (array, i, __memcmpeq,
56 1,
57 __memcmpeq_sse2))
cf4fd28e 58
6b6710e5 59 /* Support sysdeps/x86_64/multiarch/memchr.c. */
2f5d20ac 60 IFUNC_IMPL (i, name, memchr,
3edda6a0 61 X86_IFUNC_IMPL_ADD_V4 (array, i, memchr,
88070acd
L
62 (CPU_FEATURE_USABLE (AVX512VL)
63 && CPU_FEATURE_USABLE (AVX512BW)
64 && CPU_FEATURE_USABLE (BMI2)),
65 __memchr_evex)
451c6e58
SP
66 X86_IFUNC_IMPL_ADD_V4 (array, i, memchr,
67 (CPU_FEATURE_USABLE (AVX512VL)
68 && CPU_FEATURE_USABLE (AVX512BW)
69 && CPU_FEATURE_USABLE (BMI2)),
70 __memchr_evex512)
3edda6a0 71 X86_IFUNC_IMPL_ADD_V4 (array, i, memchr,
88070acd
L
72 (CPU_FEATURE_USABLE (AVX512VL)
73 && CPU_FEATURE_USABLE (AVX512BW)
74 && CPU_FEATURE_USABLE (BMI2)),
75 __memchr_evex_rtm)
3edda6a0 76 X86_IFUNC_IMPL_ADD_V3 (array, i, memchr,
e3e7fab7
AJ
77 (CPU_FEATURE_USABLE (AVX2)
78 && CPU_FEATURE_USABLE (BMI2)),
88070acd 79 __memchr_avx2)
3edda6a0 80 X86_IFUNC_IMPL_ADD_V3 (array, i, memchr,
88070acd 81 (CPU_FEATURE_USABLE (AVX2)
e3e7fab7 82 && CPU_FEATURE_USABLE (BMI2)
88070acd
L
83 && CPU_FEATURE_USABLE (RTM)),
84 __memchr_avx2_rtm)
85 /* ISA V2 wrapper for SSE2 implementation because the SSE2
86 implementation is also used at ISA level 2. */
3edda6a0 87 X86_IFUNC_IMPL_ADD_V2 (array, i, memchr,
88070acd
L
88 1,
89 __memchr_sse2))
2f5d20ac 90
b91a52d0 91 /* Support sysdeps/x86_64/multiarch/memcmp.c. */
ac49ecaf 92 IFUNC_IMPL (i, name, memcmp,
ae308947
NG
93 /* NB: If any of these names change or if any new
94 implementations are added be sure to update
95 sysdeps/x86_64/memcmp-isa-default-impl.h. */
96 X86_IFUNC_IMPL_ADD_V4 (array, i, memcmp,
97 (CPU_FEATURE_USABLE (AVX512VL)
98 && CPU_FEATURE_USABLE (AVX512BW)
99 && CPU_FEATURE_USABLE (BMI2)
100 && CPU_FEATURE_USABLE (MOVBE)),
101 __memcmp_evex_movbe)
102 X86_IFUNC_IMPL_ADD_V3 (array, i, memcmp,
103 (CPU_FEATURE_USABLE (AVX2)
104 && CPU_FEATURE_USABLE (BMI2)
105 && CPU_FEATURE_USABLE (MOVBE)),
106 __memcmp_avx2_movbe)
107 X86_IFUNC_IMPL_ADD_V3 (array, i, memcmp,
108 (CPU_FEATURE_USABLE (AVX2)
109 && CPU_FEATURE_USABLE (BMI2)
110 && CPU_FEATURE_USABLE (MOVBE)
111 && CPU_FEATURE_USABLE (RTM)),
112 __memcmp_avx2_movbe_rtm)
113 /* ISA V2 wrapper for SSE2 implementation because the SSE2
114 implementation is also used at ISA level 2. */
115 X86_IFUNC_IMPL_ADD_V2 (array, i, memcmp,
116 1,
117 __memcmp_sse2))
ac49ecaf 118
7a499756 119#ifdef SHARED
5c3e322d 120 /* Support sysdeps/x86_64/multiarch/memmove_chk.c. */
ac49ecaf 121 IFUNC_IMPL (i, name, __memmove_chk,
88b57b8e 122 IFUNC_IMPL_ADD (array, i, __memmove_chk, 1,
b6a02c36
NG
123 __memmove_chk_erms)
124 X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
125 CPU_FEATURE_USABLE (AVX512F),
126 __memmove_chk_avx512_no_vzeroupper)
127 X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
128 CPU_FEATURE_USABLE (AVX512VL),
129 __memmove_chk_avx512_unaligned)
130 X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
131 CPU_FEATURE_USABLE (AVX512VL),
132 __memmove_chk_avx512_unaligned_erms)
133 X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
134 CPU_FEATURE_USABLE (AVX512VL),
135 __memmove_chk_evex_unaligned)
136 X86_IFUNC_IMPL_ADD_V4 (array, i, __memmove_chk,
137 CPU_FEATURE_USABLE (AVX512VL),
138 __memmove_chk_evex_unaligned_erms)
139 X86_IFUNC_IMPL_ADD_V3 (array, i, __memmove_chk,
140 CPU_FEATURE_USABLE (AVX),
141 __memmove_chk_avx_unaligned)
142 X86_IFUNC_IMPL_ADD_V3 (array, i, __memmove_chk,
143 CPU_FEATURE_USABLE (AVX),
144 __memmove_chk_avx_unaligned_erms)
145 X86_IFUNC_IMPL_ADD_V3 (array, i, __memmove_chk,
146 (CPU_FEATURE_USABLE (AVX)
147 && CPU_FEATURE_USABLE (RTM)),
148 __memmove_chk_avx_unaligned_rtm)
149 X86_IFUNC_IMPL_ADD_V3 (array, i, __memmove_chk,
150 (CPU_FEATURE_USABLE (AVX)
151 && CPU_FEATURE_USABLE (RTM)),
152 __memmove_chk_avx_unaligned_erms_rtm)
153 /* By V3 we assume fast aligned copy. */
154 X86_IFUNC_IMPL_ADD_V2 (array, i, __memmove_chk,
155 CPU_FEATURE_USABLE (SSSE3),
156 __memmove_chk_ssse3)
157 /* ISA V2 wrapper for SSE2 implementation because the SSE2
158 implementation is also used at ISA level 2 (SSSE3 is too
159 optimized around aligned copy to be better as general
160 purpose memmove). */
161 X86_IFUNC_IMPL_ADD_V2 (array, i, __memmove_chk, 1,
162 __memmove_chk_sse2_unaligned)
163 X86_IFUNC_IMPL_ADD_V2 (array, i, __memmove_chk, 1,
164 __memmove_chk_sse2_unaligned_erms))
7a499756 165#endif
ac49ecaf 166
5c3e322d 167 /* Support sysdeps/x86_64/multiarch/memmove.c. */
ac49ecaf 168 IFUNC_IMPL (i, name, memmove,
88b57b8e 169 IFUNC_IMPL_ADD (array, i, memmove, 1,
b6a02c36
NG
170 __memmove_erms)
171 X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
172 CPU_FEATURE_USABLE (AVX512F),
173 __memmove_avx512_no_vzeroupper)
174 X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
175 CPU_FEATURE_USABLE (AVX512VL),
176 __memmove_avx512_unaligned)
177 X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
178 CPU_FEATURE_USABLE (AVX512VL),
179 __memmove_avx512_unaligned_erms)
180 X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
181 CPU_FEATURE_USABLE (AVX512VL),
182 __memmove_evex_unaligned)
183 X86_IFUNC_IMPL_ADD_V4 (array, i, memmove,
184 CPU_FEATURE_USABLE (AVX512VL),
185 __memmove_evex_unaligned_erms)
186 X86_IFUNC_IMPL_ADD_V3 (array, i, memmove,
187 CPU_FEATURE_USABLE (AVX),
188 __memmove_avx_unaligned)
189 X86_IFUNC_IMPL_ADD_V3 (array, i, memmove,
190 CPU_FEATURE_USABLE (AVX),
191 __memmove_avx_unaligned_erms)
192 X86_IFUNC_IMPL_ADD_V3 (array, i, memmove,
193 (CPU_FEATURE_USABLE (AVX)
194 && CPU_FEATURE_USABLE (RTM)),
195 __memmove_avx_unaligned_rtm)
196 X86_IFUNC_IMPL_ADD_V3 (array, i, memmove,
197 (CPU_FEATURE_USABLE (AVX)
198 && CPU_FEATURE_USABLE (RTM)),
199 __memmove_avx_unaligned_erms_rtm)
200 /* By V3 we assume fast aligned copy. */
201 X86_IFUNC_IMPL_ADD_V2 (array, i, memmove,
202 CPU_FEATURE_USABLE (SSSE3),
203 __memmove_ssse3)
204 /* ISA V2 wrapper for SSE2 implementation because the SSE2
205 implementation is also used at ISA level 2 (SSSE3 is too
206 optimized around aligned copy to be better as general
207 purpose memmove). */
208 X86_IFUNC_IMPL_ADD_V2 (array, i, memmove, 1,
209 __memmove_sse2_unaligned)
210 X86_IFUNC_IMPL_ADD_V2 (array, i, memmove, 1,
211 __memmove_sse2_unaligned_erms))
ac49ecaf 212
6b6710e5 213 /* Support sysdeps/x86_64/multiarch/memrchr.c. */
5ac7aa1d 214 IFUNC_IMPL (i, name, memrchr,
ceabdcd1
NG
215 X86_IFUNC_IMPL_ADD_V4 (array, i, memrchr,
216 (CPU_FEATURE_USABLE (AVX512VL)
3c0c78af
AJ
217 && CPU_FEATURE_USABLE (AVX512BW)
218 && CPU_FEATURE_USABLE (BMI2)
219 && CPU_FEATURE_USABLE (LZCNT)),
ceabdcd1
NG
220 __memrchr_evex)
221 X86_IFUNC_IMPL_ADD_V3 (array, i, memrchr,
3c0c78af
AJ
222 (CPU_FEATURE_USABLE (AVX2)
223 && CPU_FEATURE_USABLE (BMI2)
224 && CPU_FEATURE_USABLE (LZCNT)),
ceabdcd1
NG
225 __memrchr_avx2)
226 X86_IFUNC_IMPL_ADD_V3 (array, i, memrchr,
227 (CPU_FEATURE_USABLE (AVX2)
3c0c78af
AJ
228 && CPU_FEATURE_USABLE (BMI2)
229 && CPU_FEATURE_USABLE (LZCNT)
ceabdcd1
NG
230 && CPU_FEATURE_USABLE (RTM)),
231 __memrchr_avx2_rtm)
232 /* ISA V2 wrapper for SSE2 implementation because the SSE2
233 implementation is also used at ISA level 2. */
234 X86_IFUNC_IMPL_ADD_V2 (array, i, memrchr,
235 1,
236 __memrchr_sse2))
5ac7aa1d 237
7a499756 238#ifdef SHARED
93e46f87 239 /* Support sysdeps/x86_64/multiarch/memset_chk.c. */
d92d8f8a 240 IFUNC_IMPL (i, name, __memset_chk,
93e46f87
L
241 IFUNC_IMPL_ADD (array, i, __memset_chk, 1,
242 __memset_chk_erms)
37ecc657
NG
243 X86_IFUNC_IMPL_ADD_V4 (array, i, __memset_chk,
244 (CPU_FEATURE_USABLE (AVX512VL)
245 && CPU_FEATURE_USABLE (AVX512BW)
246 && CPU_FEATURE_USABLE (BMI2)),
247 __memset_chk_avx512_unaligned_erms)
248 X86_IFUNC_IMPL_ADD_V4 (array, i, __memset_chk,
249 (CPU_FEATURE_USABLE (AVX512VL)
250 && CPU_FEATURE_USABLE (AVX512BW)
251 && CPU_FEATURE_USABLE (BMI2)),
252 __memset_chk_avx512_unaligned)
253 X86_IFUNC_IMPL_ADD_V4 (array, i, __memset_chk,
254 CPU_FEATURE_USABLE (AVX512F),
255 __memset_chk_avx512_no_vzeroupper)
256 X86_IFUNC_IMPL_ADD_V4 (array, i, __memset_chk,
257 (CPU_FEATURE_USABLE (AVX512VL)
258 && CPU_FEATURE_USABLE (AVX512BW)
259 && CPU_FEATURE_USABLE (BMI2)),
260 __memset_chk_evex_unaligned)
261 X86_IFUNC_IMPL_ADD_V4 (array, i, __memset_chk,
262 (CPU_FEATURE_USABLE (AVX512VL)
263 && CPU_FEATURE_USABLE (AVX512BW)
264 && CPU_FEATURE_USABLE (BMI2)),
265 __memset_chk_evex_unaligned_erms)
266 X86_IFUNC_IMPL_ADD_V3 (array, i, __memset_chk,
267 CPU_FEATURE_USABLE (AVX2),
268 __memset_chk_avx2_unaligned)
269 X86_IFUNC_IMPL_ADD_V3 (array, i, __memset_chk,
270 CPU_FEATURE_USABLE (AVX2),
271 __memset_chk_avx2_unaligned_erms)
272 X86_IFUNC_IMPL_ADD_V3 (array, i, __memset_chk,
273 (CPU_FEATURE_USABLE (AVX2)
274 && CPU_FEATURE_USABLE (RTM)),
275 __memset_chk_avx2_unaligned_rtm)
276 X86_IFUNC_IMPL_ADD_V3 (array, i, __memset_chk,
277 (CPU_FEATURE_USABLE (AVX2)
278 && CPU_FEATURE_USABLE (RTM)),
279 __memset_chk_avx2_unaligned_erms_rtm)
280 /* ISA V2 wrapper for SSE2 implementation because the SSE2
281 implementation is also used at ISA level 2. */
282 X86_IFUNC_IMPL_ADD_V2 (array, i, __memset_chk, 1,
283 __memset_chk_sse2_unaligned)
284 X86_IFUNC_IMPL_ADD_V2 (array, i, __memset_chk, 1,
285 __memset_chk_sse2_unaligned_erms)
83d776f9 286 )
7a499756 287#endif
d92d8f8a 288
93e46f87 289 /* Support sysdeps/x86_64/multiarch/memset.c. */
d92d8f8a 290 IFUNC_IMPL (i, name, memset,
83056630 291 IFUNC_IMPL_ADD (array, i, memset, 1,
37ecc657
NG
292 __memset_erms)
293 X86_IFUNC_IMPL_ADD_V4 (array, i, memset,
294 (CPU_FEATURE_USABLE (AVX512VL)
295 && CPU_FEATURE_USABLE (AVX512BW)
296 && CPU_FEATURE_USABLE (BMI2)),
297 __memset_avx512_unaligned_erms)
298 X86_IFUNC_IMPL_ADD_V4 (array, i, memset,
299 (CPU_FEATURE_USABLE (AVX512VL)
300 && CPU_FEATURE_USABLE (AVX512BW)
301 && CPU_FEATURE_USABLE (BMI2)),
302 __memset_avx512_unaligned)
303 X86_IFUNC_IMPL_ADD_V4 (array, i, memset,
304 CPU_FEATURE_USABLE (AVX512F),
305 __memset_avx512_no_vzeroupper)
306 X86_IFUNC_IMPL_ADD_V4 (array, i, memset,
307 (CPU_FEATURE_USABLE (AVX512VL)
308 && CPU_FEATURE_USABLE (AVX512BW)
309 && CPU_FEATURE_USABLE (BMI2)),
310 __memset_evex_unaligned)
311 X86_IFUNC_IMPL_ADD_V4 (array, i, memset,
312 (CPU_FEATURE_USABLE (AVX512VL)
313 && CPU_FEATURE_USABLE (AVX512BW)
314 && CPU_FEATURE_USABLE (BMI2)),
315 __memset_evex_unaligned_erms)
316 X86_IFUNC_IMPL_ADD_V3 (array, i, memset,
317 CPU_FEATURE_USABLE (AVX2),
318 __memset_avx2_unaligned)
319 X86_IFUNC_IMPL_ADD_V3 (array, i, memset,
320 CPU_FEATURE_USABLE (AVX2),
321 __memset_avx2_unaligned_erms)
322 X86_IFUNC_IMPL_ADD_V3 (array, i, memset,
323 (CPU_FEATURE_USABLE (AVX2)
324 && CPU_FEATURE_USABLE (RTM)),
325 __memset_avx2_unaligned_rtm)
326 X86_IFUNC_IMPL_ADD_V3 (array, i, memset,
327 (CPU_FEATURE_USABLE (AVX2)
328 && CPU_FEATURE_USABLE (RTM)),
329 __memset_avx2_unaligned_erms_rtm)
330 /* ISA V2 wrapper for SSE2 implementation because the SSE2
331 implementation is also used at ISA level 2. */
332 X86_IFUNC_IMPL_ADD_V2 (array, i, memset, 1,
333 __memset_sse2_unaligned)
334 X86_IFUNC_IMPL_ADD_V2 (array, i, memset, 1,
335 __memset_sse2_unaligned_erms)
83d776f9 336 )
d92d8f8a 337
6b6710e5 338 /* Support sysdeps/x86_64/multiarch/rawmemchr.c. */
2f5d20ac 339 IFUNC_IMPL (i, name, rawmemchr,
3edda6a0 340 X86_IFUNC_IMPL_ADD_V4 (array, i, rawmemchr,
88070acd
L
341 (CPU_FEATURE_USABLE (AVX512VL)
342 && CPU_FEATURE_USABLE (AVX512BW)
343 && CPU_FEATURE_USABLE (BMI2)),
344 __rawmemchr_evex)
451c6e58
SP
345 X86_IFUNC_IMPL_ADD_V4 (array, i, rawmemchr,
346 (CPU_FEATURE_USABLE (AVX512VL)
347 && CPU_FEATURE_USABLE (AVX512BW)
348 && CPU_FEATURE_USABLE (BMI2)),
349 __rawmemchr_evex512)
3edda6a0 350 X86_IFUNC_IMPL_ADD_V4 (array, i, rawmemchr,
88070acd
L
351 (CPU_FEATURE_USABLE (AVX512VL)
352 && CPU_FEATURE_USABLE (AVX512BW)
353 && CPU_FEATURE_USABLE (BMI2)),
354 __rawmemchr_evex_rtm)
3edda6a0 355 X86_IFUNC_IMPL_ADD_V3 (array, i, rawmemchr,
e3e7fab7
AJ
356 (CPU_FEATURE_USABLE (AVX2)
357 && CPU_FEATURE_USABLE (BMI2)),
88070acd 358 __rawmemchr_avx2)
3edda6a0 359 X86_IFUNC_IMPL_ADD_V3 (array, i, rawmemchr,
88070acd 360 (CPU_FEATURE_USABLE (AVX2)
e3e7fab7 361 && CPU_FEATURE_USABLE (BMI2)
88070acd
L
362 && CPU_FEATURE_USABLE (RTM)),
363 __rawmemchr_avx2_rtm)
364 /* ISA V2 wrapper for SSE2 implementation because the SSE2
365 implementation is also used at ISA level 2. */
3edda6a0 366 X86_IFUNC_IMPL_ADD_V2 (array, i, rawmemchr,
88070acd
L
367 1,
368 __rawmemchr_sse2))
2f5d20ac 369
6b6710e5 370 /* Support sysdeps/x86_64/multiarch/strlen.c. */
dc485ceb 371 IFUNC_IMPL (i, name, strlen,
ceabdcd1
NG
372 X86_IFUNC_IMPL_ADD_V4 (array, i, strlen,
373 (CPU_FEATURE_USABLE (AVX512VL)
374 && CPU_FEATURE_USABLE (AVX512BW)
375 && CPU_FEATURE_USABLE (BMI2)),
376 __strlen_evex)
377 X86_IFUNC_IMPL_ADD_V4 (array, i, strlen,
378 (CPU_FEATURE_USABLE (AVX512VL)
379 && CPU_FEATURE_USABLE (AVX512BW)
380 && CPU_FEATURE_USABLE (BMI2)),
381 __strlen_evex512)
382 X86_IFUNC_IMPL_ADD_V3 (array, i, strlen,
383 (CPU_FEATURE_USABLE (AVX2)
384 && CPU_FEATURE_USABLE (BMI2)),
385 __strlen_avx2)
386 X86_IFUNC_IMPL_ADD_V3 (array, i, strlen,
387 (CPU_FEATURE_USABLE (AVX2)
388 && CPU_FEATURE_USABLE (BMI2)
389 && CPU_FEATURE_USABLE (RTM)),
390 __strlen_avx2_rtm)
391 /* ISA V2 wrapper for SSE2 implementation because the SSE2
392 implementation is also used at ISA level 2. */
393 X86_IFUNC_IMPL_ADD_V2 (array, i, strlen,
394 1,
395 __strlen_sse2))
dc485ceb 396
6b6710e5 397 /* Support sysdeps/x86_64/multiarch/strnlen.c. */
dc485ceb 398 IFUNC_IMPL (i, name, strnlen,
ceabdcd1
NG
399 X86_IFUNC_IMPL_ADD_V4 (array, i, strnlen,
400 (CPU_FEATURE_USABLE (AVX512VL)
401 && CPU_FEATURE_USABLE (AVX512BW)
402 && CPU_FEATURE_USABLE (BMI2)),
403 __strnlen_evex)
404 X86_IFUNC_IMPL_ADD_V4 (array, i, strnlen,
405 (CPU_FEATURE_USABLE (AVX512VL)
406 && CPU_FEATURE_USABLE (AVX512BW)
407 && CPU_FEATURE_USABLE (BMI2)),
408 __strnlen_evex512)
409 X86_IFUNC_IMPL_ADD_V3 (array, i, strnlen,
410 (CPU_FEATURE_USABLE (AVX2)
411 && CPU_FEATURE_USABLE (BMI2)),
412 __strnlen_avx2)
413 X86_IFUNC_IMPL_ADD_V3 (array, i, strnlen,
414 (CPU_FEATURE_USABLE (AVX2)
415 && CPU_FEATURE_USABLE (BMI2)
416 && CPU_FEATURE_USABLE (RTM)),
417 __strnlen_avx2_rtm)
418 /* ISA V2 wrapper for SSE2 implementation because the SSE2
419 implementation is also used at ISA level 2. */
420 X86_IFUNC_IMPL_ADD_V2 (array, i, strnlen,
421 1,
422 __strnlen_sse2))
dc485ceb 423
4df54c89 424 /* Support sysdeps/x86_64/multiarch/stpncpy.c. */
ac49ecaf 425 IFUNC_IMPL (i, name, stpncpy,
49889fb2
NG
426 X86_IFUNC_IMPL_ADD_V4 (array, i, stpncpy,
427 (CPU_FEATURE_USABLE (AVX512VL)
428 && CPU_FEATURE_USABLE (AVX512BW)),
429 __stpncpy_evex)
430 X86_IFUNC_IMPL_ADD_V3 (array, i, stpncpy,
431 CPU_FEATURE_USABLE (AVX2),
432 __stpncpy_avx2)
433 X86_IFUNC_IMPL_ADD_V3 (array, i, stpncpy,
434 (CPU_FEATURE_USABLE (AVX2)
435 && CPU_FEATURE_USABLE (RTM)),
436 __stpncpy_avx2_rtm)
437 /* ISA V2 wrapper for sse2_unaligned implementation because
438 the sse2_unaligned implementation is also used at ISA
439 level 2. */
440 X86_IFUNC_IMPL_ADD_V2 (array, i, stpncpy,
441 1,
442 __stpncpy_sse2_unaligned))
ac49ecaf 443
4df54c89 444 /* Support sysdeps/x86_64/multiarch/stpcpy.c. */
ac49ecaf 445 IFUNC_IMPL (i, name, stpcpy,
49889fb2
NG
446 X86_IFUNC_IMPL_ADD_V4 (array, i, stpcpy,
447 (CPU_FEATURE_USABLE (AVX512VL)
448 && CPU_FEATURE_USABLE (AVX512BW)),
449 __stpcpy_evex)
450 X86_IFUNC_IMPL_ADD_V3 (array, i, stpcpy,
451 CPU_FEATURE_USABLE (AVX2),
452 __stpcpy_avx2)
453 X86_IFUNC_IMPL_ADD_V3 (array, i, stpcpy,
454 (CPU_FEATURE_USABLE (AVX2)
455 && CPU_FEATURE_USABLE (RTM)),
456 __stpcpy_avx2_rtm)
457 /* ISA V2 wrapper for sse2_unaligned implementation because
458 the sse2_unaligned implementation is also used at ISA
459 level 2. */
460 X86_IFUNC_IMPL_ADD_V2 (array, i, stpcpy,
461 1,
462 __stpcpy_sse2_unaligned)
463 X86_IFUNC_IMPL_ADD_V1 (array, i, stpcpy,
464 1,
465 __stpcpy_sse2))
ac49ecaf 466
4df54c89 467 /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */
ac49ecaf 468 IFUNC_IMPL (i, name, strcasecmp,
ceabdcd1
NG
469 X86_IFUNC_IMPL_ADD_V4 (array, i, strcasecmp,
470 (CPU_FEATURE_USABLE (AVX512VL)
10f79d36
AJ
471 && CPU_FEATURE_USABLE (AVX512BW)
472 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
473 __strcasecmp_evex)
474 X86_IFUNC_IMPL_ADD_V3 (array, i, strcasecmp,
10f79d36
AJ
475 (CPU_FEATURE_USABLE (AVX2)
476 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
477 __strcasecmp_avx2)
478 X86_IFUNC_IMPL_ADD_V3 (array, i, strcasecmp,
479 (CPU_FEATURE_USABLE (AVX2)
10f79d36 480 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
481 && CPU_FEATURE_USABLE (RTM)),
482 __strcasecmp_avx2_rtm)
483 X86_IFUNC_IMPL_ADD_V2 (array, i, strcasecmp,
484 CPU_FEATURE_USABLE (SSE4_2),
485 __strcasecmp_sse42)
486 /* ISA V2 wrapper for SSE2 implementation because the SSE2
487 implementation is also used at ISA level 2. */
488 X86_IFUNC_IMPL_ADD_V2 (array, i, strcasecmp,
489 1,
490 __strcasecmp_sse2))
ac49ecaf 491
4df54c89 492 /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */
ac49ecaf 493 IFUNC_IMPL (i, name, strcasecmp_l,
ceabdcd1
NG
494 X86_IFUNC_IMPL_ADD_V4 (array, i, strcasecmp,
495 (CPU_FEATURE_USABLE (AVX512VL)
10f79d36
AJ
496 && CPU_FEATURE_USABLE (AVX512BW)
497 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
498 __strcasecmp_l_evex)
499 X86_IFUNC_IMPL_ADD_V3 (array, i, strcasecmp,
10f79d36
AJ
500 (CPU_FEATURE_USABLE (AVX2)
501 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
502 __strcasecmp_l_avx2)
503 X86_IFUNC_IMPL_ADD_V3 (array, i, strcasecmp,
504 (CPU_FEATURE_USABLE (AVX2)
10f79d36 505 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
506 && CPU_FEATURE_USABLE (RTM)),
507 __strcasecmp_l_avx2_rtm)
508 X86_IFUNC_IMPL_ADD_V2 (array, i, strcasecmp_l,
509 CPU_FEATURE_USABLE (SSE4_2),
510 __strcasecmp_l_sse42)
511 /* ISA V2 wrapper for SSE2 implementation because the SSE2
512 implementation is also used at ISA level 2. */
513 X86_IFUNC_IMPL_ADD_V2 (array, i, strcasecmp_l,
514 1,
515 __strcasecmp_l_sse2))
ac49ecaf 516
4df54c89 517 /* Support sysdeps/x86_64/multiarch/strcat.c. */
ac49ecaf 518 IFUNC_IMPL (i, name, strcat,
49889fb2
NG
519 X86_IFUNC_IMPL_ADD_V4 (array, i, strcat,
520 (CPU_FEATURE_USABLE (AVX512VL)
521 && CPU_FEATURE_USABLE (AVX512BW)),
522 __strcat_evex)
523 X86_IFUNC_IMPL_ADD_V3 (array, i, strcat,
524 CPU_FEATURE_USABLE (AVX2),
525 __strcat_avx2)
526 X86_IFUNC_IMPL_ADD_V3 (array, i, strcat,
527 (CPU_FEATURE_USABLE (AVX2)
528 && CPU_FEATURE_USABLE (RTM)),
529 __strcat_avx2_rtm)
530 /* ISA V2 wrapper for sse2_unaligned implementation because
531 the sse2_unaligned implementation is also used at ISA
532 level 2. */
533 X86_IFUNC_IMPL_ADD_V2 (array, i, strcat,
534 1,
535 __strcat_sse2_unaligned)
536 X86_IFUNC_IMPL_ADD_V1 (array, i, strcat,
537 1,
538 __strcat_sse2))
ac49ecaf 539
8fe57365 540 /* Support sysdeps/x86_64/multiarch/strchr.c. */
ac49ecaf 541 IFUNC_IMPL (i, name, strchr,
ceabdcd1
NG
542 X86_IFUNC_IMPL_ADD_V4 (array, i, strchr,
543 (CPU_FEATURE_USABLE (AVX512VL)
544 && CPU_FEATURE_USABLE (AVX512BW)
545 && CPU_FEATURE_USABLE (BMI2)),
546 __strchr_evex)
59e501f2
SP
547 X86_IFUNC_IMPL_ADD_V4 (array, i, strchr,
548 (CPU_FEATURE_USABLE (AVX512VL)
549 && CPU_FEATURE_USABLE (AVX512BW)),
550 __strchr_evex512)
ceabdcd1
NG
551 X86_IFUNC_IMPL_ADD_V3 (array, i, strchr,
552 (CPU_FEATURE_USABLE (AVX2)
553 && CPU_FEATURE_USABLE (BMI2)),
554 __strchr_avx2)
555 X86_IFUNC_IMPL_ADD_V3 (array, i, strchr,
556 (CPU_FEATURE_USABLE (AVX2)
557 && CPU_FEATURE_USABLE (BMI2)
558 && CPU_FEATURE_USABLE (RTM)),
559 __strchr_avx2_rtm)
560 /* ISA V2 wrapper for SSE2 implementation because the SSE2
561 implementation is also used at ISA level 2. */
562 X86_IFUNC_IMPL_ADD_V2 (array, i, strchr,
563 1,
564 __strchr_sse2)
565 X86_IFUNC_IMPL_ADD_V1 (array, i, strchr,
566 1,
567 __strchr_sse2_no_bsf))
ac49ecaf 568
8fe57365
L
569 /* Support sysdeps/x86_64/multiarch/strchrnul.c. */
570 IFUNC_IMPL (i, name, strchrnul,
ceabdcd1
NG
571 X86_IFUNC_IMPL_ADD_V4 (array, i, strchrnul,
572 (CPU_FEATURE_USABLE (AVX512VL)
573 && CPU_FEATURE_USABLE (AVX512BW)
574 && CPU_FEATURE_USABLE (BMI2)),
575 __strchrnul_evex)
59e501f2
SP
576 X86_IFUNC_IMPL_ADD_V4 (array, i, strchrnul,
577 (CPU_FEATURE_USABLE (AVX512VL)
578 && CPU_FEATURE_USABLE (AVX512BW)),
579 __strchrnul_evex512)
ceabdcd1
NG
580 X86_IFUNC_IMPL_ADD_V3 (array, i, strchrnul,
581 (CPU_FEATURE_USABLE (AVX2)
582 && CPU_FEATURE_USABLE (BMI2)),
583 __strchrnul_avx2)
584 X86_IFUNC_IMPL_ADD_V3 (array, i, strchrnul,
585 (CPU_FEATURE_USABLE (AVX2)
586 && CPU_FEATURE_USABLE (BMI2)
587 && CPU_FEATURE_USABLE (RTM)),
588 __strchrnul_avx2_rtm)
589 /* ISA V2 wrapper for SSE2 implementation because the SSE2
590 implementation is also used at ISA level 2. */
591 X86_IFUNC_IMPL_ADD_V2 (array, i, strchrnul,
592 1,
593 __strchrnul_sse2))
8fe57365 594
d2538b91
L
595 /* Support sysdeps/x86_64/multiarch/strrchr.c. */
596 IFUNC_IMPL (i, name, strrchr,
ceabdcd1
NG
597 X86_IFUNC_IMPL_ADD_V4 (array, i, strrchr,
598 (CPU_FEATURE_USABLE (AVX512VL)
7e828317
AJ
599 && CPU_FEATURE_USABLE (AVX512BW)
600 && CPU_FEATURE_USABLE (BMI1)
601 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1 602 __strrchr_evex)
faaf733f
SP
603 X86_IFUNC_IMPL_ADD_V4 (array, i, strrchr,
604 (CPU_FEATURE_USABLE (AVX512VL)
605 && CPU_FEATURE_USABLE (AVX512BW)
606 && CPU_FEATURE_USABLE (BMI2)),
607 __strrchr_evex512)
ceabdcd1 608 X86_IFUNC_IMPL_ADD_V3 (array, i, strrchr,
7e828317
AJ
609 (CPU_FEATURE_USABLE (AVX2)
610 && CPU_FEATURE_USABLE (BMI1)
611 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
612 __strrchr_avx2)
613 X86_IFUNC_IMPL_ADD_V3 (array, i, strrchr,
614 (CPU_FEATURE_USABLE (AVX2)
7e828317
AJ
615 && CPU_FEATURE_USABLE (BMI1)
616 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
617 && CPU_FEATURE_USABLE (RTM)),
618 __strrchr_avx2_rtm)
619 /* ISA V2 wrapper for SSE2 implementation because the SSE2
620 implementation is also used at ISA level 2. */
621 X86_IFUNC_IMPL_ADD_V2 (array, i, strrchr,
622 1,
623 __strrchr_sse2))
d2538b91 624
4df54c89 625 /* Support sysdeps/x86_64/multiarch/strcmp.c. */
ac49ecaf 626 IFUNC_IMPL (i, name, strcmp,
ceabdcd1
NG
627 X86_IFUNC_IMPL_ADD_V4 (array, i, strcmp,
628 (CPU_FEATURE_USABLE (AVX512VL)
629 && CPU_FEATURE_USABLE (AVX512BW)
630 && CPU_FEATURE_USABLE (BMI2)),
631 __strcmp_evex)
632 X86_IFUNC_IMPL_ADD_V3 (array, i, strcmp,
4d64c644
AJ
633 (CPU_FEATURE_USABLE (AVX2)
634 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
635 __strcmp_avx2)
636 X86_IFUNC_IMPL_ADD_V3 (array, i, strcmp,
637 (CPU_FEATURE_USABLE (AVX2)
4d64c644 638 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
639 && CPU_FEATURE_USABLE (RTM)),
640 __strcmp_avx2_rtm)
641 X86_IFUNC_IMPL_ADD_V2 (array, i, strcmp,
642 CPU_FEATURE_USABLE (SSE4_2),
643 __strcmp_sse42)
644 /* ISA V2 wrapper for SSE2 implementations because the SSE2
645 implementations are also used at ISA level 2. */
646 X86_IFUNC_IMPL_ADD_V2 (array, i, strcmp,
647 1,
648 __strcmp_sse2_unaligned)
649 X86_IFUNC_IMPL_ADD_V2 (array, i, strcmp,
650 1,
651 __strcmp_sse2))
ac49ecaf 652
4df54c89 653 /* Support sysdeps/x86_64/multiarch/strcpy.c. */
ac49ecaf 654 IFUNC_IMPL (i, name, strcpy,
49889fb2
NG
655 X86_IFUNC_IMPL_ADD_V4 (array, i, strcpy,
656 (CPU_FEATURE_USABLE (AVX512VL)
657 && CPU_FEATURE_USABLE (AVX512BW)),
658 __strcpy_evex)
659 X86_IFUNC_IMPL_ADD_V3 (array, i, strcpy,
660 CPU_FEATURE_USABLE (AVX2),
661 __strcpy_avx2)
662 X86_IFUNC_IMPL_ADD_V3 (array, i, strcpy,
663 (CPU_FEATURE_USABLE (AVX2)
664 && CPU_FEATURE_USABLE (RTM)),
665 __strcpy_avx2_rtm)
666 /* ISA V2 wrapper for sse2_unaligned implementation because
667 the sse2_unaligned implementation is also used at ISA
668 level 2. */
669 X86_IFUNC_IMPL_ADD_V2 (array, i, strcpy,
670 1,
671 __strcpy_sse2_unaligned)
672 X86_IFUNC_IMPL_ADD_V1 (array, i, strcpy,
673 1,
674 __strcpy_sse2))
ac49ecaf 675
4df54c89 676 /* Support sysdeps/x86_64/multiarch/strcspn.c. */
ac49ecaf 677 IFUNC_IMPL (i, name, strcspn,
c69f960b
NG
678 /* All implementations of strcspn are built at all ISA
679 levels. */
107e6a3c 680 IFUNC_IMPL_ADD (array, i, strcspn, CPU_FEATURE_USABLE (SSE4_2),
ac49ecaf 681 __strcspn_sse42)
c22eb807 682 IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_generic))
ac49ecaf 683
4df54c89 684 /* Support sysdeps/x86_64/multiarch/strncase_l.c. */
ac49ecaf 685 IFUNC_IMPL (i, name, strncasecmp,
ceabdcd1
NG
686 X86_IFUNC_IMPL_ADD_V4 (array, i, strncasecmp,
687 (CPU_FEATURE_USABLE (AVX512VL)
10f79d36
AJ
688 && CPU_FEATURE_USABLE (AVX512BW)
689 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
690 __strncasecmp_evex)
691 X86_IFUNC_IMPL_ADD_V3 (array, i, strncasecmp,
10f79d36
AJ
692 (CPU_FEATURE_USABLE (AVX2)
693 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
694 __strncasecmp_avx2)
695 X86_IFUNC_IMPL_ADD_V3 (array, i, strncasecmp,
696 (CPU_FEATURE_USABLE (AVX2)
10f79d36 697 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
698 && CPU_FEATURE_USABLE (RTM)),
699 __strncasecmp_avx2_rtm)
700 X86_IFUNC_IMPL_ADD_V2 (array, i, strncasecmp,
701 CPU_FEATURE_USABLE (SSE4_2),
702 __strncasecmp_sse42)
703 /* ISA V2 wrapper for SSE2 implementation because the SSE2
704 implementation is also used at ISA level 2. */
705 X86_IFUNC_IMPL_ADD_V2 (array, i, strncasecmp,
706 1,
707 __strncasecmp_sse2))
ac49ecaf 708
4df54c89 709 /* Support sysdeps/x86_64/multiarch/strncase_l.c. */
ac49ecaf 710 IFUNC_IMPL (i, name, strncasecmp_l,
ceabdcd1
NG
711 X86_IFUNC_IMPL_ADD_V4 (array, i, strncasecmp,
712 (CPU_FEATURE_USABLE (AVX512VL)
10f79d36
AJ
713 & CPU_FEATURE_USABLE (AVX512BW)
714 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
715 __strncasecmp_l_evex)
716 X86_IFUNC_IMPL_ADD_V3 (array, i, strncasecmp,
10f79d36
AJ
717 (CPU_FEATURE_USABLE (AVX2)
718 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
719 __strncasecmp_l_avx2)
720 X86_IFUNC_IMPL_ADD_V3 (array, i, strncasecmp,
721 (CPU_FEATURE_USABLE (AVX2)
10f79d36 722 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
723 && CPU_FEATURE_USABLE (RTM)),
724 __strncasecmp_l_avx2_rtm)
725 X86_IFUNC_IMPL_ADD_V2 (array, i, strncasecmp_l,
726 CPU_FEATURE_USABLE (SSE4_2),
727 __strncasecmp_l_sse42)
728 /* ISA V2 wrapper for SSE2 implementation because the SSE2
729 implementation is also used at ISA level 2. */
730 X86_IFUNC_IMPL_ADD_V2 (array, i, strncasecmp_l,
731 1,
732 __strncasecmp_l_sse2))
ac49ecaf 733
4df54c89 734 /* Support sysdeps/x86_64/multiarch/strncat.c. */
ac49ecaf 735 IFUNC_IMPL (i, name, strncat,
49889fb2
NG
736 X86_IFUNC_IMPL_ADD_V4 (array, i, strncat,
737 (CPU_FEATURE_USABLE (AVX512VL)
738 && CPU_FEATURE_USABLE (AVX512BW)),
739 __strncat_evex)
740 X86_IFUNC_IMPL_ADD_V3 (array, i, strncat,
741 CPU_FEATURE_USABLE (AVX2),
742 __strncat_avx2)
743 X86_IFUNC_IMPL_ADD_V3 (array, i, strncat,
744 (CPU_FEATURE_USABLE (AVX2)
745 && CPU_FEATURE_USABLE (RTM)),
746 __strncat_avx2_rtm)
747 /* ISA V2 wrapper for sse2_unaligned implementation because
748 the sse2_unaligned implementation is also used at ISA
749 level 2. */
750 X86_IFUNC_IMPL_ADD_V2 (array, i, strncat,
751 1,
752 __strncat_sse2_unaligned))
ac49ecaf 753
4df54c89 754 /* Support sysdeps/x86_64/multiarch/strncpy.c. */
ac49ecaf 755 IFUNC_IMPL (i, name, strncpy,
49889fb2
NG
756 X86_IFUNC_IMPL_ADD_V4 (array, i, strncpy,
757 (CPU_FEATURE_USABLE (AVX512VL)
758 && CPU_FEATURE_USABLE (AVX512BW)),
759 __strncpy_evex)
760 X86_IFUNC_IMPL_ADD_V3 (array, i, strncpy,
761 CPU_FEATURE_USABLE (AVX2),
762 __strncpy_avx2)
763 X86_IFUNC_IMPL_ADD_V3 (array, i, strncpy,
764 (CPU_FEATURE_USABLE (AVX2)
765 && CPU_FEATURE_USABLE (RTM)),
766 __strncpy_avx2_rtm)
767 /* ISA V2 wrapper for sse2_unaligned implementation because
768 the sse2_unaligned implementation is also used at ISA
769 level 2. */
770 X86_IFUNC_IMPL_ADD_V2 (array, i, strncpy,
771 1,
772 __strncpy_sse2_unaligned))
ac49ecaf 773
4df54c89 774 /* Support sysdeps/x86_64/multiarch/strpbrk.c. */
ac49ecaf 775 IFUNC_IMPL (i, name, strpbrk,
c69f960b
NG
776 /* All implementations of strpbrk are built at all ISA
777 levels. */
107e6a3c 778 IFUNC_IMPL_ADD (array, i, strpbrk, CPU_FEATURE_USABLE (SSE4_2),
ac49ecaf 779 __strpbrk_sse42)
c22eb807 780 IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_generic))
ac49ecaf 781
ac49ecaf 782
4df54c89 783 /* Support sysdeps/x86_64/multiarch/strspn.c. */
ac49ecaf 784 IFUNC_IMPL (i, name, strspn,
c69f960b
NG
785 /* All implementations of strspn are built at all ISA
786 levels. */
107e6a3c 787 IFUNC_IMPL_ADD (array, i, strspn, CPU_FEATURE_USABLE (SSE4_2),
0b5395f0 788 __strspn_sse42)
c22eb807 789 IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_generic))
ac49ecaf 790
6f8e37eb 791 /* Support sysdeps/x86_64/multiarch/strstr.c. */
ac49ecaf 792 IFUNC_IMPL (i, name, strstr,
5082a287
RD
793 IFUNC_IMPL_ADD (array, i, strstr,
794 (CPU_FEATURE_USABLE (AVX512VL)
795 && CPU_FEATURE_USABLE (AVX512BW)
796 && CPU_FEATURE_USABLE (AVX512DQ)
797 && CPU_FEATURE_USABLE (BMI2)),
798 __strstr_avx512)
584b18eb 799 IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_sse2_unaligned)
d912127b 800 IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_generic))
ac49ecaf 801
8fe57365
L
802 /* Support sysdeps/x86_64/multiarch/wcschr.c. */
803 IFUNC_IMPL (i, name, wcschr,
ceabdcd1
NG
804 X86_IFUNC_IMPL_ADD_V4 (array, i, wcschr,
805 (CPU_FEATURE_USABLE (AVX512VL)
806 && CPU_FEATURE_USABLE (AVX512BW)
807 && CPU_FEATURE_USABLE (BMI2)),
808 __wcschr_evex)
59e501f2
SP
809 X86_IFUNC_IMPL_ADD_V4 (array, i, wcschr,
810 (CPU_FEATURE_USABLE (AVX512VL)
811 && CPU_FEATURE_USABLE (AVX512BW)),
812 __wcschr_evex512)
ceabdcd1
NG
813 X86_IFUNC_IMPL_ADD_V3 (array, i, wcschr,
814 (CPU_FEATURE_USABLE (AVX2)
815 && CPU_FEATURE_USABLE (BMI2)),
816 __wcschr_avx2)
817 X86_IFUNC_IMPL_ADD_V3 (array, i, wcschr,
818 (CPU_FEATURE_USABLE (AVX2)
819 && CPU_FEATURE_USABLE (BMI2)
820 && CPU_FEATURE_USABLE (RTM)),
821 __wcschr_avx2_rtm)
822 /* ISA V2 wrapper for SSE2 implementation because the SSE2
823 implementation is also used at ISA level 2. */
824 X86_IFUNC_IMPL_ADD_V2 (array, i, wcschr,
825 1,
826 __wcschr_sse2))
8fe57365 827
d2538b91
L
828 /* Support sysdeps/x86_64/multiarch/wcsrchr.c. */
829 IFUNC_IMPL (i, name, wcsrchr,
ceabdcd1
NG
830 X86_IFUNC_IMPL_ADD_V4 (array, i, wcsrchr,
831 (CPU_FEATURE_USABLE (AVX512VL)
832 && CPU_FEATURE_USABLE (AVX512BW)
7e828317 833 && CPU_FEATURE_USABLE (BMI1)
ceabdcd1
NG
834 && CPU_FEATURE_USABLE (BMI2)),
835 __wcsrchr_evex)
faaf733f
SP
836 X86_IFUNC_IMPL_ADD_V4 (array, i, wcsrchr,
837 (CPU_FEATURE_USABLE (AVX512VL)
838 && CPU_FEATURE_USABLE (AVX512BW)
839 && CPU_FEATURE_USABLE (BMI2)),
840 __wcsrchr_evex512)
ceabdcd1 841 X86_IFUNC_IMPL_ADD_V3 (array, i, wcsrchr,
7e828317
AJ
842 (CPU_FEATURE_USABLE (AVX2)
843 && CPU_FEATURE_USABLE (BMI1)
844 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
845 __wcsrchr_avx2)
846 X86_IFUNC_IMPL_ADD_V3 (array, i, wcsrchr,
847 (CPU_FEATURE_USABLE (AVX2)
7e828317
AJ
848 && CPU_FEATURE_USABLE (BMI1)
849 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
850 && CPU_FEATURE_USABLE (RTM)),
851 __wcsrchr_avx2_rtm)
852 /* ISA V2 wrapper for SSE2 implementation because the SSE2
853 implementation is also used at ISA level 2. */
854 X86_IFUNC_IMPL_ADD_V2 (array, i, wcsrchr,
855 1,
856 __wcsrchr_sse2))
d2538b91 857
14570163
LS
858 /* Support sysdeps/x86_64/multiarch/wcscmp.c. */
859 IFUNC_IMPL (i, name, wcscmp,
ceabdcd1
NG
860 X86_IFUNC_IMPL_ADD_V4 (array, i, wcscmp,
861 (CPU_FEATURE_USABLE (AVX512VL)
862 && CPU_FEATURE_USABLE (AVX512BW)
863 && CPU_FEATURE_USABLE (BMI2)),
864 __wcscmp_evex)
865 X86_IFUNC_IMPL_ADD_V3 (array, i, wcscmp,
f31a5a88
AJ
866 (CPU_FEATURE_USABLE (AVX2)
867 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
868 __wcscmp_avx2)
869 X86_IFUNC_IMPL_ADD_V3 (array, i, wcscmp,
870 (CPU_FEATURE_USABLE (AVX2)
f31a5a88 871 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
872 && CPU_FEATURE_USABLE (RTM)),
873 __wcscmp_avx2_rtm)
874 /* ISA V2 wrapper for SSE2 implementation because the SSE2
875 implementation is also used at ISA level 2. */
876 X86_IFUNC_IMPL_ADD_V2 (array, i, wcscmp,
877 1,
878 __wcscmp_sse2))
14570163
LS
879
880 /* Support sysdeps/x86_64/multiarch/wcsncmp.c. */
881 IFUNC_IMPL (i, name, wcsncmp,
ceabdcd1
NG
882 X86_IFUNC_IMPL_ADD_V4 (array, i, wcsncmp,
883 (CPU_FEATURE_USABLE (AVX512VL)
884 && CPU_FEATURE_USABLE (AVX512BW)
885 && CPU_FEATURE_USABLE (BMI2)),
886 __wcsncmp_evex)
887 X86_IFUNC_IMPL_ADD_V3 (array, i, wcsncmp,
f31a5a88
AJ
888 (CPU_FEATURE_USABLE (AVX2)
889 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
890 __wcsncmp_avx2)
891 X86_IFUNC_IMPL_ADD_V3 (array, i, wcsncmp,
892 (CPU_FEATURE_USABLE (AVX2)
f31a5a88 893 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
894 && CPU_FEATURE_USABLE (RTM)),
895 __wcsncmp_avx2_rtm)
896 /* ISA V2 wrapper for GENERIC implementation because the
897 GENERIC implementation is also used at ISA level 2. */
898 X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncmp,
899 1,
900 __wcsncmp_generic))
14570163 901
4df54c89 902 /* Support sysdeps/x86_64/multiarch/wcscpy.c. */
ac49ecaf 903 IFUNC_IMPL (i, name, wcscpy,
192979ee 904 X86_IFUNC_IMPL_ADD_V4 (array, i, wcscpy,
64b8b651
NG
905 (CPU_FEATURE_USABLE (AVX512VL)
906 && CPU_FEATURE_USABLE (AVX512BW)
907 && CPU_FEATURE_USABLE (BMI2)),
908 __wcscpy_evex)
909 X86_IFUNC_IMPL_ADD_V3 (array, i, wcscpy,
52cf1100
NG
910 (CPU_FEATURE_USABLE (AVX2)
911 && CPU_FEATURE_USABLE (BMI2)),
912 __wcscpy_avx2)
913 X86_IFUNC_IMPL_ADD_V2 (array, i, wcscpy,
192979ee
NG
914 CPU_FEATURE_USABLE (SSSE3),
915 __wcscpy_ssse3)
916 X86_IFUNC_IMPL_ADD_V1 (array, i, wcscpy,
917 1,
918 __wcscpy_generic))
ac49ecaf 919
64b8b651
NG
920 /* Support sysdeps/x86_64/multiarch/wcsncpy.c. */
921 IFUNC_IMPL (i, name, wcsncpy,
922 X86_IFUNC_IMPL_ADD_V4 (array, i, wcsncpy,
923 (CPU_FEATURE_USABLE (AVX512VL)
924 && CPU_FEATURE_USABLE (AVX512BW)
925 && CPU_FEATURE_USABLE (BMI2)),
926 __wcsncpy_evex)
52cf1100
NG
927 X86_IFUNC_IMPL_ADD_V3 (array, i, wcsncpy,
928 (CPU_FEATURE_USABLE (AVX2)
929 && CPU_FEATURE_USABLE (BMI2)),
930 __wcsncpy_avx2)
931 X86_IFUNC_IMPL_ADD_V2 (array, i, wcpncpy,
64b8b651
NG
932 1,
933 __wcsncpy_generic))
934
935 /* Support sysdeps/x86_64/multiarch/wcpcpy.c. */
936 IFUNC_IMPL (i, name, wcpcpy,
937 X86_IFUNC_IMPL_ADD_V4 (array, i, wcpcpy,
938 (CPU_FEATURE_USABLE (AVX512VL)
939 && CPU_FEATURE_USABLE (AVX512BW)
940 && CPU_FEATURE_USABLE (BMI2)),
941 __wcpcpy_evex)
942 X86_IFUNC_IMPL_ADD_V3 (array, i, wcpcpy,
52cf1100
NG
943 (CPU_FEATURE_USABLE (AVX2)
944 && CPU_FEATURE_USABLE (BMI2)),
945 __wcpcpy_avx2)
946 X86_IFUNC_IMPL_ADD_V2 (array, i, wcpcpy,
64b8b651
NG
947 1,
948 __wcpcpy_generic))
949
950 /* Support sysdeps/x86_64/multiarch/wcpncpy.c. */
951 IFUNC_IMPL (i, name, wcpncpy,
952 X86_IFUNC_IMPL_ADD_V4 (array, i, wcpncpy,
953 (CPU_FEATURE_USABLE (AVX512VL)
954 && CPU_FEATURE_USABLE (AVX512BW)
955 && CPU_FEATURE_USABLE (BMI2)),
956 __wcpncpy_evex)
52cf1100
NG
957 X86_IFUNC_IMPL_ADD_V3 (array, i, wcpncpy,
958 (CPU_FEATURE_USABLE (AVX2)
959 && CPU_FEATURE_USABLE (BMI2)),
960 __wcpncpy_avx2)
961 X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncpy,
64b8b651
NG
962 1,
963 __wcpncpy_generic))
964
965 /* Support sysdeps/x86_64/multiarch/wcscat.c. */
966 IFUNC_IMPL (i, name, wcscat,
967 X86_IFUNC_IMPL_ADD_V4 (array, i, wcscat,
968 (CPU_FEATURE_USABLE (AVX512VL)
969 && CPU_FEATURE_USABLE (AVX512BW)
970 && CPU_FEATURE_USABLE (BMI2)),
971 __wcscat_evex)
972 X86_IFUNC_IMPL_ADD_V3 (array, i, wcscat,
52cf1100
NG
973 (CPU_FEATURE_USABLE (AVX2)
974 && CPU_FEATURE_USABLE (BMI2)),
975 __wcscat_avx2)
976 X86_IFUNC_IMPL_ADD_V2 (array, i, wcscat,
64b8b651
NG
977 1,
978 __wcscat_generic))
979
980 /* Support sysdeps/x86_64/multiarch/wcsncat.c. */
981 IFUNC_IMPL (i, name, wcsncat,
982 X86_IFUNC_IMPL_ADD_V4 (array, i, wcsncat,
983 (CPU_FEATURE_USABLE (AVX512VL)
984 && CPU_FEATURE_USABLE (AVX512BW)
985 && CPU_FEATURE_USABLE (BMI2)),
986 __wcsncat_evex)
987 X86_IFUNC_IMPL_ADD_V3 (array, i, wcsncat,
52cf1100
NG
988 (CPU_FEATURE_USABLE (AVX2)
989 && CPU_FEATURE_USABLE (BMI2)),
990 __wcsncat_avx2)
991 X86_IFUNC_IMPL_ADD_V2 (array, i, wcsncat,
64b8b651
NG
992 1,
993 __wcsncat_generic))
994
dc485ceb
L
995 /* Support sysdeps/x86_64/multiarch/wcslen.c. */
996 IFUNC_IMPL (i, name, wcslen,
ceabdcd1
NG
997 X86_IFUNC_IMPL_ADD_V4 (array, i, wcslen,
998 (CPU_FEATURE_USABLE (AVX512VL)
999 && CPU_FEATURE_USABLE (AVX512BW)
1000 && CPU_FEATURE_USABLE (BMI2)),
1001 __wcslen_evex)
1002 X86_IFUNC_IMPL_ADD_V4 (array, i, wcslen,
1003 (CPU_FEATURE_USABLE (AVX512VL)
1004 && CPU_FEATURE_USABLE (AVX512BW)
1005 && CPU_FEATURE_USABLE (BMI2)),
1006 __wcslen_evex512)
1007 X86_IFUNC_IMPL_ADD_V3 (array, i, wcslen,
1008 (CPU_FEATURE_USABLE (AVX2)
1009 && CPU_FEATURE_USABLE (BMI2)),
1010 __wcslen_avx2)
1011 X86_IFUNC_IMPL_ADD_V3 (array, i, wcslen,
1012 (CPU_FEATURE_USABLE (AVX2)
1013 && CPU_FEATURE_USABLE (BMI2)
1014 && CPU_FEATURE_USABLE (RTM)),
1015 __wcslen_avx2_rtm)
1016 X86_IFUNC_IMPL_ADD_V2 (array, i, wcslen,
1017 CPU_FEATURE_USABLE (SSE4_1),
1018 __wcslen_sse4_1)
1019 X86_IFUNC_IMPL_ADD_V1 (array, i, wcslen,
1020 1,
1021 __wcslen_sse2))
dc485ceb 1022
d4cc385c
L
1023 /* Support sysdeps/x86_64/multiarch/wcsnlen.c. */
1024 IFUNC_IMPL (i, name, wcsnlen,
ceabdcd1
NG
1025 X86_IFUNC_IMPL_ADD_V4 (array, i, wcsnlen,
1026 (CPU_FEATURE_USABLE (AVX512VL)
1027 && CPU_FEATURE_USABLE (AVX512BW)
1028 && CPU_FEATURE_USABLE (BMI2)),
1029 __wcsnlen_evex)
1030 X86_IFUNC_IMPL_ADD_V4 (array, i, wcsnlen,
1031 (CPU_FEATURE_USABLE (AVX512VL)
1032 && CPU_FEATURE_USABLE (AVX512BW)
1033 && CPU_FEATURE_USABLE (BMI2)),
1034 __wcsnlen_evex512)
1035 X86_IFUNC_IMPL_ADD_V3 (array, i, wcsnlen,
1036 (CPU_FEATURE_USABLE (AVX2)
1037 && CPU_FEATURE_USABLE (BMI2)),
1038 __wcsnlen_avx2)
1039 X86_IFUNC_IMPL_ADD_V3 (array, i, wcsnlen,
1040 (CPU_FEATURE_USABLE (AVX2)
1041 && CPU_FEATURE_USABLE (BMI2)
1042 && CPU_FEATURE_USABLE (RTM)),
1043 __wcsnlen_avx2_rtm)
1044 X86_IFUNC_IMPL_ADD_V2 (array, i, wcsnlen,
1045 CPU_FEATURE_USABLE (SSE4_1),
1046 __wcsnlen_sse4_1)
1047 X86_IFUNC_IMPL_ADD_V1 (array, i, wcsnlen,
1048 1,
1049 __wcsnlen_generic))
d4cc385c 1050
2f5d20ac
L
1051 /* Support sysdeps/x86_64/multiarch/wmemchr.c. */
1052 IFUNC_IMPL (i, name, wmemchr,
3edda6a0 1053 X86_IFUNC_IMPL_ADD_V4 (array, i, wmemchr,
88070acd
L
1054 (CPU_FEATURE_USABLE (AVX512VL)
1055 && CPU_FEATURE_USABLE (AVX512BW)
1056 && CPU_FEATURE_USABLE (BMI2)),
1057 __wmemchr_evex)
451c6e58
SP
1058 X86_IFUNC_IMPL_ADD_V4 (array, i, wmemchr,
1059 (CPU_FEATURE_USABLE (AVX512VL)
1060 && CPU_FEATURE_USABLE (AVX512BW)
1061 && CPU_FEATURE_USABLE (BMI2)),
1062 __wmemchr_evex512)
3edda6a0 1063 X86_IFUNC_IMPL_ADD_V4 (array, i, wmemchr,
88070acd
L
1064 (CPU_FEATURE_USABLE (AVX512VL)
1065 && CPU_FEATURE_USABLE (AVX512BW)
1066 && CPU_FEATURE_USABLE (BMI2)),
1067 __wmemchr_evex_rtm)
3edda6a0 1068 X86_IFUNC_IMPL_ADD_V3 (array, i, wmemchr,
e3e7fab7
AJ
1069 (CPU_FEATURE_USABLE (AVX2)
1070 && CPU_FEATURE_USABLE (BMI2)),
88070acd 1071 __wmemchr_avx2)
3edda6a0 1072 X86_IFUNC_IMPL_ADD_V3 (array, i, wmemchr,
88070acd 1073 (CPU_FEATURE_USABLE (AVX2)
e3e7fab7 1074 && CPU_FEATURE_USABLE (BMI2)
88070acd
L
1075 && CPU_FEATURE_USABLE (RTM)),
1076 __wmemchr_avx2_rtm)
1077 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1078 implementation is also used at ISA level 2. */
3edda6a0 1079 X86_IFUNC_IMPL_ADD_V2 (array, i, wmemchr,
88070acd
L
1080 1,
1081 __wmemchr_sse2))
2f5d20ac 1082
b91a52d0 1083 /* Support sysdeps/x86_64/multiarch/wmemcmp.c. */
ac49ecaf 1084 IFUNC_IMPL (i, name, wmemcmp,
ae308947
NG
1085 X86_IFUNC_IMPL_ADD_V4 (array, i, wmemcmp,
1086 (CPU_FEATURE_USABLE (AVX512VL)
1087 && CPU_FEATURE_USABLE (AVX512BW)
1088 && CPU_FEATURE_USABLE (BMI2)
1089 && CPU_FEATURE_USABLE (MOVBE)),
1090 __wmemcmp_evex_movbe)
1091 X86_IFUNC_IMPL_ADD_V3 (array, i, wmemcmp,
1092 (CPU_FEATURE_USABLE (AVX2)
1093 && CPU_FEATURE_USABLE (BMI2)
1094 && CPU_FEATURE_USABLE (MOVBE)),
1095 __wmemcmp_avx2_movbe)
1096 X86_IFUNC_IMPL_ADD_V3 (array, i, wmemcmp,
1097 (CPU_FEATURE_USABLE (AVX2)
1098 && CPU_FEATURE_USABLE (BMI2)
1099 && CPU_FEATURE_USABLE (MOVBE)
1100 && CPU_FEATURE_USABLE (RTM)),
1101 __wmemcmp_avx2_movbe_rtm)
1102 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1103 implementation is also used at ISA level 2. */
1104 X86_IFUNC_IMPL_ADD_V2 (array, i, wmemcmp,
1105 1,
1106 __wmemcmp_sse2))
ac49ecaf 1107
5e112282 1108 /* Support sysdeps/x86_64/multiarch/wmemset.c. */
ef9c4cb6 1109 IFUNC_IMPL (i, name, wmemset,
37ecc657
NG
1110 X86_IFUNC_IMPL_ADD_V4 (array, i, wmemset,
1111 (CPU_FEATURE_USABLE (AVX512VL)
1112 && CPU_FEATURE_USABLE (AVX512BW)
1113 && CPU_FEATURE_USABLE (BMI2)),
1114 __wmemset_evex_unaligned)
1115 X86_IFUNC_IMPL_ADD_V4 (array, i, wmemset,
1116 (CPU_FEATURE_USABLE (AVX512VL)
1117 && CPU_FEATURE_USABLE (AVX512BW)
1118 && CPU_FEATURE_USABLE (BMI2)),
1119 __wmemset_avx512_unaligned)
1120 X86_IFUNC_IMPL_ADD_V3 (array, i, wmemset,
1121 CPU_FEATURE_USABLE (AVX2),
1122 __wmemset_avx2_unaligned)
1123 X86_IFUNC_IMPL_ADD_V3 (array, i, wmemset,
1124 (CPU_FEATURE_USABLE (AVX2)
1125 && CPU_FEATURE_USABLE (RTM)),
1126 __wmemset_avx2_unaligned_rtm)
1127 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1128 implementation is also used at ISA level 2. */
1129 X86_IFUNC_IMPL_ADD_V2 (array, i, wmemset, 1,
1130 __wmemset_sse2_unaligned))
ef9c4cb6 1131
ac49ecaf 1132#ifdef SHARED
5c3e322d 1133 /* Support sysdeps/x86_64/multiarch/memcpy_chk.c. */
ac49ecaf 1134 IFUNC_IMPL (i, name, __memcpy_chk,
88b57b8e 1135 IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1,
b6a02c36
NG
1136 __memcpy_chk_erms)
1137 X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
1138 CPU_FEATURE_USABLE (AVX512F),
1139 __memcpy_chk_avx512_no_vzeroupper)
1140 X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
1141 CPU_FEATURE_USABLE (AVX512VL),
1142 __memcpy_chk_avx512_unaligned)
1143 X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
1144 CPU_FEATURE_USABLE (AVX512VL),
1145 __memcpy_chk_avx512_unaligned_erms)
1146 X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
1147 CPU_FEATURE_USABLE (AVX512VL),
1148 __memcpy_chk_evex_unaligned)
1149 X86_IFUNC_IMPL_ADD_V4 (array, i, __memcpy_chk,
1150 CPU_FEATURE_USABLE (AVX512VL),
1151 __memcpy_chk_evex_unaligned_erms)
1152 X86_IFUNC_IMPL_ADD_V3 (array, i, __memcpy_chk,
1153 CPU_FEATURE_USABLE (AVX),
1154 __memcpy_chk_avx_unaligned)
1155 X86_IFUNC_IMPL_ADD_V3 (array, i, __memcpy_chk,
1156 CPU_FEATURE_USABLE (AVX),
1157 __memcpy_chk_avx_unaligned_erms)
1158 X86_IFUNC_IMPL_ADD_V3 (array, i, __memcpy_chk,
1159 (CPU_FEATURE_USABLE (AVX)
1160 && CPU_FEATURE_USABLE (RTM)),
1161 __memcpy_chk_avx_unaligned_rtm)
1162 X86_IFUNC_IMPL_ADD_V3 (array, i, __memcpy_chk,
1163 (CPU_FEATURE_USABLE (AVX)
1164 && CPU_FEATURE_USABLE (RTM)),
1165 __memcpy_chk_avx_unaligned_erms_rtm)
1166 /* By V3 we assume fast aligned copy. */
1167 X86_IFUNC_IMPL_ADD_V2 (array, i, __memcpy_chk,
1168 CPU_FEATURE_USABLE (SSSE3),
1169 __memcpy_chk_ssse3)
1170 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1171 implementation is also used at ISA level 2 (SSSE3 is too
1172 optimized around aligned copy to be better as general
1173 purpose memmove). */
1174 X86_IFUNC_IMPL_ADD_V2 (array, i, __memcpy_chk, 1,
1175 __memcpy_chk_sse2_unaligned)
1176 X86_IFUNC_IMPL_ADD_V2 (array, i, __memcpy_chk, 1,
1177 __memcpy_chk_sse2_unaligned_erms))
fc11ff8d 1178#endif
ac49ecaf 1179
5c3e322d 1180 /* Support sysdeps/x86_64/multiarch/memcpy.c. */
ac49ecaf 1181 IFUNC_IMPL (i, name, memcpy,
88b57b8e 1182 IFUNC_IMPL_ADD (array, i, memcpy, 1,
b6a02c36
NG
1183 __memcpy_erms)
1184 X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
1185 CPU_FEATURE_USABLE (AVX512F),
1186 __memcpy_avx512_no_vzeroupper)
1187 X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
1188 CPU_FEATURE_USABLE (AVX512VL),
1189 __memcpy_avx512_unaligned)
1190 X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
1191 CPU_FEATURE_USABLE (AVX512VL),
1192 __memcpy_avx512_unaligned_erms)
1193 X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
1194 CPU_FEATURE_USABLE (AVX512VL),
1195 __memcpy_evex_unaligned)
1196 X86_IFUNC_IMPL_ADD_V4 (array, i, memcpy,
1197 CPU_FEATURE_USABLE (AVX512VL),
1198 __memcpy_evex_unaligned_erms)
1199 X86_IFUNC_IMPL_ADD_V3 (array, i, memcpy,
1200 CPU_FEATURE_USABLE (AVX),
1201 __memcpy_avx_unaligned)
1202 X86_IFUNC_IMPL_ADD_V3 (array, i, memcpy,
1203 CPU_FEATURE_USABLE (AVX),
1204 __memcpy_avx_unaligned_erms)
1205 X86_IFUNC_IMPL_ADD_V3 (array, i, memcpy,
1206 (CPU_FEATURE_USABLE (AVX)
1207 && CPU_FEATURE_USABLE (RTM)),
1208 __memcpy_avx_unaligned_rtm)
1209 X86_IFUNC_IMPL_ADD_V3 (array, i, memcpy,
1210 (CPU_FEATURE_USABLE (AVX)
1211 && CPU_FEATURE_USABLE (RTM)),
1212 __memcpy_avx_unaligned_erms_rtm)
1213 /* By V3 we assume fast aligned copy. */
1214 X86_IFUNC_IMPL_ADD_V2 (array, i, memcpy,
1215 CPU_FEATURE_USABLE (SSSE3),
1216 __memcpy_ssse3)
1217 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1218 implementation is also used at ISA level 2 (SSSE3 is too
1219 optimized around aligned copy to be better as general
1220 purpose memmove). */
1221 X86_IFUNC_IMPL_ADD_V2 (array, i, memcpy, 1,
1222 __memcpy_sse2_unaligned)
1223 X86_IFUNC_IMPL_ADD_V2 (array, i, memcpy, 1,
1224 __memcpy_sse2_unaligned_erms))
ac49ecaf 1225
fc11ff8d 1226#ifdef SHARED
5c3e322d 1227 /* Support sysdeps/x86_64/multiarch/mempcpy_chk.c. */
ac49ecaf 1228 IFUNC_IMPL (i, name, __mempcpy_chk,
5c3e322d 1229 IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1,
b6a02c36
NG
1230 __mempcpy_chk_erms)
1231 X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
1232 CPU_FEATURE_USABLE (AVX512F),
1233 __mempcpy_chk_avx512_no_vzeroupper)
1234 X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
1235 CPU_FEATURE_USABLE (AVX512VL),
1236 __mempcpy_chk_avx512_unaligned)
1237 X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
1238 CPU_FEATURE_USABLE (AVX512VL),
1239 __mempcpy_chk_avx512_unaligned_erms)
1240 X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
1241 CPU_FEATURE_USABLE (AVX512VL),
1242 __mempcpy_chk_evex_unaligned)
1243 X86_IFUNC_IMPL_ADD_V4 (array, i, __mempcpy_chk,
1244 CPU_FEATURE_USABLE (AVX512VL),
1245 __mempcpy_chk_evex_unaligned_erms)
1246 X86_IFUNC_IMPL_ADD_V3 (array, i, __mempcpy_chk,
1247 CPU_FEATURE_USABLE (AVX),
1248 __mempcpy_chk_avx_unaligned)
1249 X86_IFUNC_IMPL_ADD_V3 (array, i, __mempcpy_chk,
1250 CPU_FEATURE_USABLE (AVX),
1251 __mempcpy_chk_avx_unaligned_erms)
1252 X86_IFUNC_IMPL_ADD_V3 (array, i, __mempcpy_chk,
1253 (CPU_FEATURE_USABLE (AVX)
1254 && CPU_FEATURE_USABLE (RTM)),
1255 __mempcpy_chk_avx_unaligned_rtm)
1256 X86_IFUNC_IMPL_ADD_V3 (array, i, __mempcpy_chk,
1257 (CPU_FEATURE_USABLE (AVX)
1258 && CPU_FEATURE_USABLE (RTM)),
1259 __mempcpy_chk_avx_unaligned_erms_rtm)
1260 /* By V3 we assume fast aligned copy. */
1261 X86_IFUNC_IMPL_ADD_V2 (array, i, __mempcpy_chk,
1262 CPU_FEATURE_USABLE (SSSE3),
1263 __mempcpy_chk_ssse3)
1264 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1265 implementation is also used at ISA level 2 (SSSE3 is too
1266 optimized around aligned copy to be better as general
1267 purpose memmove). */
1268 X86_IFUNC_IMPL_ADD_V2 (array, i, __mempcpy_chk, 1,
1269 __mempcpy_chk_sse2_unaligned)
1270 X86_IFUNC_IMPL_ADD_V2 (array, i, __mempcpy_chk, 1,
1271 __mempcpy_chk_sse2_unaligned_erms))
fc11ff8d 1272#endif
ac49ecaf 1273
5c3e322d 1274 /* Support sysdeps/x86_64/multiarch/mempcpy.c. */
ac49ecaf 1275 IFUNC_IMPL (i, name, mempcpy,
88b57b8e 1276 IFUNC_IMPL_ADD (array, i, mempcpy, 1,
b6a02c36
NG
1277 __mempcpy_erms)
1278 X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
1279 CPU_FEATURE_USABLE (AVX512F),
1280 __mempcpy_avx512_no_vzeroupper)
1281 X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
1282 CPU_FEATURE_USABLE (AVX512VL),
1283 __mempcpy_avx512_unaligned)
1284 X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
1285 CPU_FEATURE_USABLE (AVX512VL),
1286 __mempcpy_avx512_unaligned_erms)
1287 X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
1288 CPU_FEATURE_USABLE (AVX512VL),
1289 __mempcpy_evex_unaligned)
1290 X86_IFUNC_IMPL_ADD_V4 (array, i, mempcpy,
1291 CPU_FEATURE_USABLE (AVX512VL),
1292 __mempcpy_evex_unaligned_erms)
1293 X86_IFUNC_IMPL_ADD_V3 (array, i, mempcpy,
1294 CPU_FEATURE_USABLE (AVX),
1295 __mempcpy_avx_unaligned)
1296 X86_IFUNC_IMPL_ADD_V3 (array, i, mempcpy,
1297 CPU_FEATURE_USABLE (AVX),
1298 __mempcpy_avx_unaligned_erms)
1299 X86_IFUNC_IMPL_ADD_V3 (array, i, mempcpy,
1300 (CPU_FEATURE_USABLE (AVX)
1301 && CPU_FEATURE_USABLE (RTM)),
1302 __mempcpy_avx_unaligned_rtm)
1303 X86_IFUNC_IMPL_ADD_V3 (array, i, mempcpy,
1304 (CPU_FEATURE_USABLE (AVX)
1305 && CPU_FEATURE_USABLE (RTM)),
1306 __mempcpy_avx_unaligned_erms_rtm)
1307 /* By V3 we assume fast aligned copy. */
1308 X86_IFUNC_IMPL_ADD_V2 (array, i, mempcpy,
1309 CPU_FEATURE_USABLE (SSSE3),
1310 __mempcpy_ssse3)
1311 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1312 implementation is also used at ISA level 2 (SSSE3 is too
1313 optimized around aligned copy to be better as general
1314 purpose memmove). */
1315 X86_IFUNC_IMPL_ADD_V2 (array, i, mempcpy, 1,
1316 __mempcpy_sse2_unaligned)
1317 X86_IFUNC_IMPL_ADD_V2 (array, i, mempcpy, 1,
1318 __mempcpy_sse2_unaligned_erms))
ac49ecaf 1319
4df54c89 1320 /* Support sysdeps/x86_64/multiarch/strncmp.c. */
ac49ecaf 1321 IFUNC_IMPL (i, name, strncmp,
ceabdcd1
NG
1322 X86_IFUNC_IMPL_ADD_V4 (array, i, strncmp,
1323 (CPU_FEATURE_USABLE (AVX512VL)
fc7de1d9
AJ
1324 && CPU_FEATURE_USABLE (AVX512BW)
1325 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
1326 __strncmp_evex)
1327 X86_IFUNC_IMPL_ADD_V3 (array, i, strncmp,
fc7de1d9
AJ
1328 (CPU_FEATURE_USABLE (AVX2)
1329 && CPU_FEATURE_USABLE (BMI2)),
ceabdcd1
NG
1330 __strncmp_avx2)
1331 X86_IFUNC_IMPL_ADD_V3 (array, i, strncmp,
1332 (CPU_FEATURE_USABLE (AVX2)
fc7de1d9 1333 && CPU_FEATURE_USABLE (BMI2)
ceabdcd1
NG
1334 && CPU_FEATURE_USABLE (RTM)),
1335 __strncmp_avx2_rtm)
1336 X86_IFUNC_IMPL_ADD_V2 (array, i, strncmp,
1337 CPU_FEATURE_USABLE (SSE4_2),
1338 __strncmp_sse42)
1339 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1340 implementation is also used at ISA level 2. */
1341 X86_IFUNC_IMPL_ADD_V2 (array, i, strncmp,
1342 1,
1343 __strncmp_sse2))
ef9c4cb6 1344
fc11ff8d 1345#ifdef SHARED
5e112282 1346 /* Support sysdeps/x86_64/multiarch/wmemset_chk.c. */
ef9c4cb6 1347 IFUNC_IMPL (i, name, __wmemset_chk,
37ecc657
NG
1348 X86_IFUNC_IMPL_ADD_V4 (array, i, __wmemset_chk,
1349 (CPU_FEATURE_USABLE (AVX512VL)
1350 && CPU_FEATURE_USABLE (AVX512BW)
1351 && CPU_FEATURE_USABLE (BMI2)),
1352 __wmemset_chk_evex_unaligned)
1353 X86_IFUNC_IMPL_ADD_V4 (array, i, __wmemset_chk,
1354 (CPU_FEATURE_USABLE (AVX512VL)
1355 && CPU_FEATURE_USABLE (AVX512BW)
1356 && CPU_FEATURE_USABLE (BMI2)),
1357 __wmemset_chk_avx512_unaligned)
1358 X86_IFUNC_IMPL_ADD_V3 (array, i, __wmemset_chk,
1359 CPU_FEATURE_USABLE (AVX2),
1360 __wmemset_chk_avx2_unaligned)
1361 X86_IFUNC_IMPL_ADD_V3 (array, i, __wmemset_chk,
1362 (CPU_FEATURE_USABLE (AVX2)
1363 && CPU_FEATURE_USABLE (RTM)),
1364 __wmemset_chk_avx2_unaligned_rtm)
1365 /* ISA V2 wrapper for SSE2 implementation because the SSE2
1366 implementation is also used at ISA level 2. */
1367 X86_IFUNC_IMPL_ADD_V2 (array, i, __wmemset_chk, 1,
1368 __wmemset_chk_sse2_unaligned))
ac49ecaf
L
1369#endif
1370
fdaf7865 1371 return 0;
ac49ecaf 1372}