1 | /* Enumerate available IFUNC implementations of a function. x86-64 version. |
2 | Copyright (C) 2012-2021 Free Software Foundation, Inc. |
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 |
17 | <https://www.gnu.org/licenses/>. */ |
18 | |
19 | #include <assert.h> |
20 | #include <string.h> |
21 | #include <wchar.h> |
22 | #include <ifunc-impl-list.h> |
23 | #include <sysdep.h> |
24 | #include "init-arch.h" |
25 | |
26 | /* Maximum number of IFUNC implementations. */ |
27 | #define MAX_IFUNC 5 |
28 | |
29 | /* Fill ARRAY of MAX elements with IFUNC implementations for function |
30 | NAME supported on target machine and return the number of valid |
31 | entries. */ |
32 | |
33 | size_t |
34 | __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, |
35 | size_t max) |
36 | { |
37 | assert (max >= MAX_IFUNC); |
38 | |
39 | size_t i = 0; |
40 | |
41 | /* Support sysdeps/x86_64/multiarch/memchr.c. */ |
42 | IFUNC_IMPL (i, name, memchr, |
43 | IFUNC_IMPL_ADD (array, i, memchr, |
44 | CPU_FEATURE_USABLE (AVX2), |
45 | __memchr_avx2) |
46 | IFUNC_IMPL_ADD (array, i, memchr, |
47 | (CPU_FEATURE_USABLE (AVX2) |
48 | && CPU_FEATURE_USABLE (RTM)), |
49 | __memchr_avx2_rtm) |
50 | IFUNC_IMPL_ADD (array, i, memchr, |
51 | (CPU_FEATURE_USABLE (AVX512VL) |
52 | && CPU_FEATURE_USABLE (AVX512BW) |
53 | && CPU_FEATURE_USABLE (BMI2)), |
54 | __memchr_evex) |
55 | IFUNC_IMPL_ADD (array, i, memchr, |
56 | (CPU_FEATURE_USABLE (AVX512VL) |
57 | && CPU_FEATURE_USABLE (AVX512BW) |
58 | && CPU_FEATURE_USABLE (BMI2)), |
59 | __memchr_evex_rtm) |
60 | IFUNC_IMPL_ADD (array, i, memchr, 1, __memchr_sse2)) |
61 | |
62 | /* Support sysdeps/x86_64/multiarch/memcmp.c. */ |
63 | IFUNC_IMPL (i, name, memcmp, |
64 | IFUNC_IMPL_ADD (array, i, memcmp, |
65 | (CPU_FEATURE_USABLE (AVX2) |
66 | && CPU_FEATURE_USABLE (BMI2) |
67 | && CPU_FEATURE_USABLE (MOVBE)), |
68 | __memcmp_avx2_movbe) |
69 | IFUNC_IMPL_ADD (array, i, memcmp, |
70 | (CPU_FEATURE_USABLE (AVX2) |
71 | && CPU_FEATURE_USABLE (BMI2) |
72 | && CPU_FEATURE_USABLE (MOVBE) |
73 | && CPU_FEATURE_USABLE (RTM)), |
74 | __memcmp_avx2_movbe_rtm) |
75 | IFUNC_IMPL_ADD (array, i, memcmp, |
76 | (CPU_FEATURE_USABLE (AVX512VL) |
77 | && CPU_FEATURE_USABLE (AVX512BW) |
78 | && CPU_FEATURE_USABLE (BMI2) |
79 | && CPU_FEATURE_USABLE (MOVBE)), |
80 | __memcmp_evex_movbe) |
81 | IFUNC_IMPL_ADD (array, i, memcmp, CPU_FEATURE_USABLE (SSE4_1), |
82 | __memcmp_sse4_1) |
83 | IFUNC_IMPL_ADD (array, i, memcmp, CPU_FEATURE_USABLE (SSSE3), |
84 | __memcmp_ssse3) |
85 | IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_sse2)) |
86 | |
87 | #ifdef SHARED |
88 | /* Support sysdeps/x86_64/multiarch/memmove_chk.c. */ |
89 | IFUNC_IMPL (i, name, __memmove_chk, |
90 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
91 | CPU_FEATURE_USABLE (AVX512F), |
92 | __memmove_chk_avx512_no_vzeroupper) |
93 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
94 | CPU_FEATURE_USABLE (AVX512VL), |
95 | __memmove_chk_avx512_unaligned) |
96 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
97 | CPU_FEATURE_USABLE (AVX512VL), |
98 | __memmove_chk_avx512_unaligned_erms) |
99 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
100 | CPU_FEATURE_USABLE (AVX), |
101 | __memmove_chk_avx_unaligned) |
102 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
103 | CPU_FEATURE_USABLE (AVX), |
104 | __memmove_chk_avx_unaligned_erms) |
105 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
106 | (CPU_FEATURE_USABLE (AVX) |
107 | && CPU_FEATURE_USABLE (RTM)), |
108 | __memmove_chk_avx_unaligned_rtm) |
109 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
110 | (CPU_FEATURE_USABLE (AVX) |
111 | && CPU_FEATURE_USABLE (RTM)), |
112 | __memmove_chk_avx_unaligned_erms_rtm) |
113 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
114 | CPU_FEATURE_USABLE (AVX512VL), |
115 | __memmove_chk_evex_unaligned) |
116 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
117 | CPU_FEATURE_USABLE (AVX512VL), |
118 | __memmove_chk_evex_unaligned_erms) |
119 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
120 | CPU_FEATURE_USABLE (SSSE3), |
121 | __memmove_chk_ssse3_back) |
122 | IFUNC_IMPL_ADD (array, i, __memmove_chk, |
123 | CPU_FEATURE_USABLE (SSSE3), |
124 | __memmove_chk_ssse3) |
125 | IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, |
126 | __memmove_chk_sse2_unaligned) |
127 | IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, |
128 | __memmove_chk_sse2_unaligned_erms) |
129 | IFUNC_IMPL_ADD (array, i, __memmove_chk, 1, |
130 | __memmove_chk_erms)) |
131 | #endif |
132 | |
133 | /* Support sysdeps/x86_64/multiarch/memmove.c. */ |
134 | IFUNC_IMPL (i, name, memmove, |
135 | IFUNC_IMPL_ADD (array, i, memmove, |
136 | CPU_FEATURE_USABLE (AVX), |
137 | __memmove_avx_unaligned) |
138 | IFUNC_IMPL_ADD (array, i, memmove, |
139 | CPU_FEATURE_USABLE (AVX), |
140 | __memmove_avx_unaligned_erms) |
141 | IFUNC_IMPL_ADD (array, i, memmove, |
142 | (CPU_FEATURE_USABLE (AVX) |
143 | && CPU_FEATURE_USABLE (RTM)), |
144 | __memmove_avx_unaligned_rtm) |
145 | IFUNC_IMPL_ADD (array, i, memmove, |
146 | (CPU_FEATURE_USABLE (AVX) |
147 | && CPU_FEATURE_USABLE (RTM)), |
148 | __memmove_avx_unaligned_erms_rtm) |
149 | IFUNC_IMPL_ADD (array, i, memmove, |
150 | CPU_FEATURE_USABLE (AVX512VL), |
151 | __memmove_evex_unaligned) |
152 | IFUNC_IMPL_ADD (array, i, memmove, |
153 | CPU_FEATURE_USABLE (AVX512VL), |
154 | __memmove_evex_unaligned_erms) |
155 | IFUNC_IMPL_ADD (array, i, memmove, |
156 | CPU_FEATURE_USABLE (AVX512F), |
157 | __memmove_avx512_no_vzeroupper) |
158 | IFUNC_IMPL_ADD (array, i, memmove, |
159 | CPU_FEATURE_USABLE (AVX512VL), |
160 | __memmove_avx512_unaligned) |
161 | IFUNC_IMPL_ADD (array, i, memmove, |
162 | CPU_FEATURE_USABLE (AVX512VL), |
163 | __memmove_avx512_unaligned_erms) |
164 | IFUNC_IMPL_ADD (array, i, memmove, CPU_FEATURE_USABLE (SSSE3), |
165 | __memmove_ssse3_back) |
166 | IFUNC_IMPL_ADD (array, i, memmove, CPU_FEATURE_USABLE (SSSE3), |
167 | __memmove_ssse3) |
168 | IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_erms) |
169 | IFUNC_IMPL_ADD (array, i, memmove, 1, |
170 | __memmove_sse2_unaligned) |
171 | IFUNC_IMPL_ADD (array, i, memmove, 1, |
172 | __memmove_sse2_unaligned_erms)) |
173 | |
174 | /* Support sysdeps/x86_64/multiarch/memrchr.c. */ |
175 | IFUNC_IMPL (i, name, memrchr, |
176 | IFUNC_IMPL_ADD (array, i, memrchr, |
177 | CPU_FEATURE_USABLE (AVX2), |
178 | __memrchr_avx2) |
179 | IFUNC_IMPL_ADD (array, i, memrchr, |
180 | (CPU_FEATURE_USABLE (AVX2) |
181 | && CPU_FEATURE_USABLE (RTM)), |
182 | __memrchr_avx2_rtm) |
183 | IFUNC_IMPL_ADD (array, i, memrchr, |
184 | (CPU_FEATURE_USABLE (AVX512VL) |
185 | && CPU_FEATURE_USABLE (AVX512BW)), |
186 | __memrchr_evex) |
187 | |
188 | IFUNC_IMPL_ADD (array, i, memrchr, 1, __memrchr_sse2)) |
189 | |
190 | #ifdef SHARED |
191 | /* Support sysdeps/x86_64/multiarch/memset_chk.c. */ |
192 | IFUNC_IMPL (i, name, __memset_chk, |
193 | IFUNC_IMPL_ADD (array, i, __memset_chk, 1, |
194 | __memset_chk_erms) |
195 | IFUNC_IMPL_ADD (array, i, __memset_chk, 1, |
196 | __memset_chk_sse2_unaligned) |
197 | IFUNC_IMPL_ADD (array, i, __memset_chk, 1, |
198 | __memset_chk_sse2_unaligned_erms) |
199 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
200 | CPU_FEATURE_USABLE (AVX2), |
201 | __memset_chk_avx2_unaligned) |
202 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
203 | CPU_FEATURE_USABLE (AVX2), |
204 | __memset_chk_avx2_unaligned_erms) |
205 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
206 | (CPU_FEATURE_USABLE (AVX2) |
207 | && CPU_FEATURE_USABLE (RTM)), |
208 | __memset_chk_avx2_unaligned_rtm) |
209 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
210 | (CPU_FEATURE_USABLE (AVX2) |
211 | && CPU_FEATURE_USABLE (RTM)), |
212 | __memset_chk_avx2_unaligned_erms_rtm) |
213 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
214 | (CPU_FEATURE_USABLE (AVX512VL) |
215 | && CPU_FEATURE_USABLE (AVX512BW) |
216 | && CPU_FEATURE_USABLE (BMI2)), |
217 | __memset_chk_evex_unaligned) |
218 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
219 | (CPU_FEATURE_USABLE (AVX512VL) |
220 | && CPU_FEATURE_USABLE (AVX512BW) |
221 | && CPU_FEATURE_USABLE (BMI2)), |
222 | __memset_chk_evex_unaligned_erms) |
223 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
224 | (CPU_FEATURE_USABLE (AVX512VL) |
225 | && CPU_FEATURE_USABLE (AVX512BW) |
226 | && CPU_FEATURE_USABLE (BMI2)), |
227 | __memset_chk_avx512_unaligned_erms) |
228 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
229 | (CPU_FEATURE_USABLE (AVX512VL) |
230 | && CPU_FEATURE_USABLE (AVX512BW) |
231 | && CPU_FEATURE_USABLE (BMI2)), |
232 | __memset_chk_avx512_unaligned) |
233 | IFUNC_IMPL_ADD (array, i, __memset_chk, |
234 | CPU_FEATURE_USABLE (AVX512F), |
235 | __memset_chk_avx512_no_vzeroupper) |
236 | ) |
237 | #endif |
238 | |
239 | /* Support sysdeps/x86_64/multiarch/memset.c. */ |
240 | IFUNC_IMPL (i, name, memset, |
241 | IFUNC_IMPL_ADD (array, i, memset, 1, |
242 | __memset_sse2_unaligned) |
243 | IFUNC_IMPL_ADD (array, i, memset, 1, |
244 | __memset_sse2_unaligned_erms) |
245 | IFUNC_IMPL_ADD (array, i, memset, 1, __memset_erms) |
246 | IFUNC_IMPL_ADD (array, i, memset, |
247 | CPU_FEATURE_USABLE (AVX2), |
248 | __memset_avx2_unaligned) |
249 | IFUNC_IMPL_ADD (array, i, memset, |
250 | CPU_FEATURE_USABLE (AVX2), |
251 | __memset_avx2_unaligned_erms) |
252 | IFUNC_IMPL_ADD (array, i, memset, |
253 | (CPU_FEATURE_USABLE (AVX2) |
254 | && CPU_FEATURE_USABLE (RTM)), |
255 | __memset_avx2_unaligned_rtm) |
256 | IFUNC_IMPL_ADD (array, i, memset, |
257 | (CPU_FEATURE_USABLE (AVX2) |
258 | && CPU_FEATURE_USABLE (RTM)), |
259 | __memset_avx2_unaligned_erms_rtm) |
260 | IFUNC_IMPL_ADD (array, i, memset, |
261 | (CPU_FEATURE_USABLE (AVX512VL) |
262 | && CPU_FEATURE_USABLE (AVX512BW) |
263 | && CPU_FEATURE_USABLE (BMI2)), |
264 | __memset_evex_unaligned) |
265 | IFUNC_IMPL_ADD (array, i, memset, |
266 | (CPU_FEATURE_USABLE (AVX512VL) |
267 | && CPU_FEATURE_USABLE (AVX512BW) |
268 | && CPU_FEATURE_USABLE (BMI2)), |
269 | __memset_evex_unaligned_erms) |
270 | IFUNC_IMPL_ADD (array, i, memset, |
271 | (CPU_FEATURE_USABLE (AVX512VL) |
272 | && CPU_FEATURE_USABLE (AVX512BW) |
273 | && CPU_FEATURE_USABLE (BMI2)), |
274 | __memset_avx512_unaligned_erms) |
275 | IFUNC_IMPL_ADD (array, i, memset, |
276 | (CPU_FEATURE_USABLE (AVX512VL) |
277 | && CPU_FEATURE_USABLE (AVX512BW) |
278 | && CPU_FEATURE_USABLE (BMI2)), |
279 | __memset_avx512_unaligned) |
280 | IFUNC_IMPL_ADD (array, i, memset, |
281 | CPU_FEATURE_USABLE (AVX512F), |
282 | __memset_avx512_no_vzeroupper) |
283 | ) |
284 | |
285 | /* Support sysdeps/x86_64/multiarch/rawmemchr.c. */ |
286 | IFUNC_IMPL (i, name, rawmemchr, |
287 | IFUNC_IMPL_ADD (array, i, rawmemchr, |
288 | CPU_FEATURE_USABLE (AVX2), |
289 | __rawmemchr_avx2) |
290 | IFUNC_IMPL_ADD (array, i, rawmemchr, |
291 | (CPU_FEATURE_USABLE (AVX2) |
292 | && CPU_FEATURE_USABLE (RTM)), |
293 | __rawmemchr_avx2_rtm) |
294 | IFUNC_IMPL_ADD (array, i, rawmemchr, |
295 | (CPU_FEATURE_USABLE (AVX512VL) |
296 | && CPU_FEATURE_USABLE (AVX512BW) |
297 | && CPU_FEATURE_USABLE (BMI2)), |
298 | __rawmemchr_evex) |
299 | IFUNC_IMPL_ADD (array, i, rawmemchr, |
300 | (CPU_FEATURE_USABLE (AVX512VL) |
301 | && CPU_FEATURE_USABLE (AVX512BW) |
302 | && CPU_FEATURE_USABLE (BMI2)), |
303 | __rawmemchr_evex_rtm) |
304 | IFUNC_IMPL_ADD (array, i, rawmemchr, 1, __rawmemchr_sse2)) |
305 | |
306 | /* Support sysdeps/x86_64/multiarch/strlen.c. */ |
307 | IFUNC_IMPL (i, name, strlen, |
308 | IFUNC_IMPL_ADD (array, i, strlen, |
309 | (CPU_FEATURE_USABLE (AVX2) |
310 | && CPU_FEATURE_USABLE (BMI2)), |
311 | __strlen_avx2) |
312 | IFUNC_IMPL_ADD (array, i, strlen, |
313 | (CPU_FEATURE_USABLE (AVX2) |
314 | && CPU_FEATURE_USABLE (BMI2) |
315 | && CPU_FEATURE_USABLE (RTM)), |
316 | __strlen_avx2_rtm) |
317 | IFUNC_IMPL_ADD (array, i, strlen, |
318 | (CPU_FEATURE_USABLE (AVX512VL) |
319 | && CPU_FEATURE_USABLE (AVX512BW) |
320 | && CPU_FEATURE_USABLE (BMI2)), |
321 | __strlen_evex) |
322 | IFUNC_IMPL_ADD (array, i, strlen, 1, __strlen_sse2)) |
323 | |
324 | /* Support sysdeps/x86_64/multiarch/strnlen.c. */ |
325 | IFUNC_IMPL (i, name, strnlen, |
326 | IFUNC_IMPL_ADD (array, i, strnlen, |
327 | (CPU_FEATURE_USABLE (AVX2) |
328 | && CPU_FEATURE_USABLE (BMI2)), |
329 | __strnlen_avx2) |
330 | IFUNC_IMPL_ADD (array, i, strnlen, |
331 | (CPU_FEATURE_USABLE (AVX2) |
332 | && CPU_FEATURE_USABLE (BMI2) |
333 | && CPU_FEATURE_USABLE (RTM)), |
334 | __strnlen_avx2_rtm) |
335 | IFUNC_IMPL_ADD (array, i, strnlen, |
336 | (CPU_FEATURE_USABLE (AVX512VL) |
337 | && CPU_FEATURE_USABLE (AVX512BW) |
338 | && CPU_FEATURE_USABLE (BMI2)), |
339 | __strnlen_evex) |
340 | IFUNC_IMPL_ADD (array, i, strnlen, 1, __strnlen_sse2)) |
341 | |
342 | /* Support sysdeps/x86_64/multiarch/stpncpy.c. */ |
343 | IFUNC_IMPL (i, name, stpncpy, |
344 | IFUNC_IMPL_ADD (array, i, stpncpy, CPU_FEATURE_USABLE (SSSE3), |
345 | __stpncpy_ssse3) |
346 | IFUNC_IMPL_ADD (array, i, stpncpy, CPU_FEATURE_USABLE (AVX2), |
347 | __stpncpy_avx2) |
348 | IFUNC_IMPL_ADD (array, i, stpncpy, |
349 | (CPU_FEATURE_USABLE (AVX2) |
350 | && CPU_FEATURE_USABLE (RTM)), |
351 | __stpncpy_avx2_rtm) |
352 | IFUNC_IMPL_ADD (array, i, stpncpy, |
353 | (CPU_FEATURE_USABLE (AVX512VL) |
354 | && CPU_FEATURE_USABLE (AVX512BW)), |
355 | __stpncpy_evex) |
356 | IFUNC_IMPL_ADD (array, i, stpncpy, 1, |
357 | __stpncpy_sse2_unaligned) |
358 | IFUNC_IMPL_ADD (array, i, stpncpy, 1, __stpncpy_sse2)) |
359 | |
360 | /* Support sysdeps/x86_64/multiarch/stpcpy.c. */ |
361 | IFUNC_IMPL (i, name, stpcpy, |
362 | IFUNC_IMPL_ADD (array, i, stpcpy, CPU_FEATURE_USABLE (SSSE3), |
363 | __stpcpy_ssse3) |
364 | IFUNC_IMPL_ADD (array, i, stpcpy, CPU_FEATURE_USABLE (AVX2), |
365 | __stpcpy_avx2) |
366 | IFUNC_IMPL_ADD (array, i, stpcpy, |
367 | (CPU_FEATURE_USABLE (AVX2) |
368 | && CPU_FEATURE_USABLE (RTM)), |
369 | __stpcpy_avx2_rtm) |
370 | IFUNC_IMPL_ADD (array, i, stpcpy, |
371 | (CPU_FEATURE_USABLE (AVX512VL) |
372 | && CPU_FEATURE_USABLE (AVX512BW)), |
373 | __stpcpy_evex) |
374 | IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_sse2_unaligned) |
375 | IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_sse2)) |
376 | |
377 | /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */ |
378 | IFUNC_IMPL (i, name, strcasecmp, |
379 | IFUNC_IMPL_ADD (array, i, strcasecmp, |
380 | CPU_FEATURE_USABLE (AVX), |
381 | __strcasecmp_avx) |
382 | IFUNC_IMPL_ADD (array, i, strcasecmp, |
383 | CPU_FEATURE_USABLE (SSE4_2), |
384 | __strcasecmp_sse42) |
385 | IFUNC_IMPL_ADD (array, i, strcasecmp, |
386 | CPU_FEATURE_USABLE (SSSE3), |
387 | __strcasecmp_ssse3) |
388 | IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_sse2)) |
389 | |
390 | /* Support sysdeps/x86_64/multiarch/strcasecmp_l.c. */ |
391 | IFUNC_IMPL (i, name, strcasecmp_l, |
392 | IFUNC_IMPL_ADD (array, i, strcasecmp_l, |
393 | CPU_FEATURE_USABLE (AVX), |
394 | __strcasecmp_l_avx) |
395 | IFUNC_IMPL_ADD (array, i, strcasecmp_l, |
396 | CPU_FEATURE_USABLE (SSE4_2), |
397 | __strcasecmp_l_sse42) |
398 | IFUNC_IMPL_ADD (array, i, strcasecmp_l, |
399 | CPU_FEATURE_USABLE (SSSE3), |
400 | __strcasecmp_l_ssse3) |
401 | IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1, |
402 | __strcasecmp_l_sse2)) |
403 | |
404 | /* Support sysdeps/x86_64/multiarch/strcat.c. */ |
405 | IFUNC_IMPL (i, name, strcat, |
406 | IFUNC_IMPL_ADD (array, i, strcat, CPU_FEATURE_USABLE (AVX2), |
407 | __strcat_avx2) |
408 | IFUNC_IMPL_ADD (array, i, strcat, |
409 | (CPU_FEATURE_USABLE (AVX2) |
410 | && CPU_FEATURE_USABLE (RTM)), |
411 | __strcat_avx2_rtm) |
412 | IFUNC_IMPL_ADD (array, i, strcat, |
413 | (CPU_FEATURE_USABLE (AVX512VL) |
414 | && CPU_FEATURE_USABLE (AVX512BW)), |
415 | __strcat_evex) |
416 | IFUNC_IMPL_ADD (array, i, strcat, CPU_FEATURE_USABLE (SSSE3), |
417 | __strcat_ssse3) |
418 | IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_sse2_unaligned) |
419 | IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_sse2)) |
420 | |
421 | /* Support sysdeps/x86_64/multiarch/strchr.c. */ |
422 | IFUNC_IMPL (i, name, strchr, |
423 | IFUNC_IMPL_ADD (array, i, strchr, |
424 | (CPU_FEATURE_USABLE (AVX2) |
425 | && CPU_FEATURE_USABLE (BMI2)), |
426 | __strchr_avx2) |
427 | IFUNC_IMPL_ADD (array, i, strchr, |
428 | (CPU_FEATURE_USABLE (AVX2) |
429 | && CPU_FEATURE_USABLE (BMI2) |
430 | && CPU_FEATURE_USABLE (RTM)), |
431 | __strchr_avx2_rtm) |
432 | IFUNC_IMPL_ADD (array, i, strchr, |
433 | (CPU_FEATURE_USABLE (AVX512VL) |
434 | && CPU_FEATURE_USABLE (AVX512BW) |
435 | && CPU_FEATURE_USABLE (BMI2)), |
436 | __strchr_evex) |
437 | IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_sse2_no_bsf) |
438 | IFUNC_IMPL_ADD (array, i, strchr, 1, __strchr_sse2)) |
439 | |
440 | /* Support sysdeps/x86_64/multiarch/strchrnul.c. */ |
441 | IFUNC_IMPL (i, name, strchrnul, |
442 | IFUNC_IMPL_ADD (array, i, strchrnul, |
443 | (CPU_FEATURE_USABLE (AVX2) |
444 | && CPU_FEATURE_USABLE (BMI2)), |
445 | __strchrnul_avx2) |
446 | IFUNC_IMPL_ADD (array, i, strchrnul, |
447 | (CPU_FEATURE_USABLE (AVX2) |
448 | && CPU_FEATURE_USABLE (BMI2) |
449 | && CPU_FEATURE_USABLE (RTM)), |
450 | __strchrnul_avx2_rtm) |
451 | IFUNC_IMPL_ADD (array, i, strchrnul, |
452 | (CPU_FEATURE_USABLE (AVX512VL) |
453 | && CPU_FEATURE_USABLE (AVX512BW) |
454 | && CPU_FEATURE_USABLE (BMI2)), |
455 | __strchrnul_evex) |
456 | IFUNC_IMPL_ADD (array, i, strchrnul, 1, __strchrnul_sse2)) |
457 | |
458 | /* Support sysdeps/x86_64/multiarch/strrchr.c. */ |
459 | IFUNC_IMPL (i, name, strrchr, |
460 | IFUNC_IMPL_ADD (array, i, strrchr, |
461 | CPU_FEATURE_USABLE (AVX2), |
462 | __strrchr_avx2) |
463 | IFUNC_IMPL_ADD (array, i, strrchr, |
464 | (CPU_FEATURE_USABLE (AVX2) |
465 | && CPU_FEATURE_USABLE (RTM)), |
466 | __strrchr_avx2_rtm) |
467 | IFUNC_IMPL_ADD (array, i, strrchr, |
468 | (CPU_FEATURE_USABLE (AVX512VL) |
469 | && CPU_FEATURE_USABLE (AVX512BW)), |
470 | __strrchr_evex) |
471 | IFUNC_IMPL_ADD (array, i, strrchr, 1, __strrchr_sse2)) |
472 | |
473 | /* Support sysdeps/x86_64/multiarch/strcmp.c. */ |
474 | IFUNC_IMPL (i, name, strcmp, |
475 | IFUNC_IMPL_ADD (array, i, strcmp, |
476 | CPU_FEATURE_USABLE (AVX2), |
477 | __strcmp_avx2) |
478 | IFUNC_IMPL_ADD (array, i, strcmp, |
479 | (CPU_FEATURE_USABLE (AVX2) |
480 | && CPU_FEATURE_USABLE (RTM)), |
481 | __strcmp_avx2_rtm) |
482 | IFUNC_IMPL_ADD (array, i, strcmp, |
483 | (CPU_FEATURE_USABLE (AVX512VL) |
484 | && CPU_FEATURE_USABLE (AVX512BW) |
485 | && CPU_FEATURE_USABLE (BMI2)), |
486 | __strcmp_evex) |
487 | IFUNC_IMPL_ADD (array, i, strcmp, CPU_FEATURE_USABLE (SSE4_2), |
488 | __strcmp_sse42) |
489 | IFUNC_IMPL_ADD (array, i, strcmp, CPU_FEATURE_USABLE (SSSE3), |
490 | __strcmp_ssse3) |
491 | IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_sse2_unaligned) |
492 | IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_sse2)) |
493 | |
494 | /* Support sysdeps/x86_64/multiarch/strcpy.c. */ |
495 | IFUNC_IMPL (i, name, strcpy, |
496 | IFUNC_IMPL_ADD (array, i, strcpy, CPU_FEATURE_USABLE (AVX2), |
497 | __strcpy_avx2) |
498 | IFUNC_IMPL_ADD (array, i, strcpy, |
499 | (CPU_FEATURE_USABLE (AVX2) |
500 | && CPU_FEATURE_USABLE (RTM)), |
501 | __strcpy_avx2_rtm) |
502 | IFUNC_IMPL_ADD (array, i, strcpy, |
503 | (CPU_FEATURE_USABLE (AVX512VL) |
504 | && CPU_FEATURE_USABLE (AVX512BW)), |
505 | __strcpy_evex) |
506 | IFUNC_IMPL_ADD (array, i, strcpy, CPU_FEATURE_USABLE (SSSE3), |
507 | __strcpy_ssse3) |
508 | IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_sse2_unaligned) |
509 | IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_sse2)) |
510 | |
511 | /* Support sysdeps/x86_64/multiarch/strcspn.c. */ |
512 | IFUNC_IMPL (i, name, strcspn, |
513 | IFUNC_IMPL_ADD (array, i, strcspn, CPU_FEATURE_USABLE (SSE4_2), |
514 | __strcspn_sse42) |
515 | IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_sse2)) |
516 | |
517 | /* Support sysdeps/x86_64/multiarch/strncase_l.c. */ |
518 | IFUNC_IMPL (i, name, strncasecmp, |
519 | IFUNC_IMPL_ADD (array, i, strncasecmp, |
520 | CPU_FEATURE_USABLE (AVX), |
521 | __strncasecmp_avx) |
522 | IFUNC_IMPL_ADD (array, i, strncasecmp, |
523 | CPU_FEATURE_USABLE (SSE4_2), |
524 | __strncasecmp_sse42) |
525 | IFUNC_IMPL_ADD (array, i, strncasecmp, |
526 | CPU_FEATURE_USABLE (SSSE3), |
527 | __strncasecmp_ssse3) |
528 | IFUNC_IMPL_ADD (array, i, strncasecmp, 1, |
529 | __strncasecmp_sse2)) |
530 | |
531 | /* Support sysdeps/x86_64/multiarch/strncase_l.c. */ |
532 | IFUNC_IMPL (i, name, strncasecmp_l, |
533 | IFUNC_IMPL_ADD (array, i, strncasecmp_l, |
534 | CPU_FEATURE_USABLE (AVX), |
535 | __strncasecmp_l_avx) |
536 | IFUNC_IMPL_ADD (array, i, strncasecmp_l, |
537 | CPU_FEATURE_USABLE (SSE4_2), |
538 | __strncasecmp_l_sse42) |
539 | IFUNC_IMPL_ADD (array, i, strncasecmp_l, |
540 | CPU_FEATURE_USABLE (SSSE3), |
541 | __strncasecmp_l_ssse3) |
542 | IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1, |
543 | __strncasecmp_l_sse2)) |
544 | |
545 | /* Support sysdeps/x86_64/multiarch/strncat.c. */ |
546 | IFUNC_IMPL (i, name, strncat, |
547 | IFUNC_IMPL_ADD (array, i, strncat, CPU_FEATURE_USABLE (AVX2), |
548 | __strncat_avx2) |
549 | IFUNC_IMPL_ADD (array, i, strncat, |
550 | (CPU_FEATURE_USABLE (AVX2) |
551 | && CPU_FEATURE_USABLE (RTM)), |
552 | __strncat_avx2_rtm) |
553 | IFUNC_IMPL_ADD (array, i, strncat, |
554 | (CPU_FEATURE_USABLE (AVX512VL) |
555 | && CPU_FEATURE_USABLE (AVX512BW)), |
556 | __strncat_evex) |
557 | IFUNC_IMPL_ADD (array, i, strncat, CPU_FEATURE_USABLE (SSSE3), |
558 | __strncat_ssse3) |
559 | IFUNC_IMPL_ADD (array, i, strncat, 1, |
560 | __strncat_sse2_unaligned) |
561 | IFUNC_IMPL_ADD (array, i, strncat, 1, __strncat_sse2)) |
562 | |
563 | /* Support sysdeps/x86_64/multiarch/strncpy.c. */ |
564 | IFUNC_IMPL (i, name, strncpy, |
565 | IFUNC_IMPL_ADD (array, i, strncpy, CPU_FEATURE_USABLE (AVX2), |
566 | __strncpy_avx2) |
567 | IFUNC_IMPL_ADD (array, i, strncpy, |
568 | (CPU_FEATURE_USABLE (AVX2) |
569 | && CPU_FEATURE_USABLE (RTM)), |
570 | __strncpy_avx2_rtm) |
571 | IFUNC_IMPL_ADD (array, i, strncpy, |
572 | (CPU_FEATURE_USABLE (AVX512VL) |
573 | && CPU_FEATURE_USABLE (AVX512BW)), |
574 | __strncpy_evex) |
575 | IFUNC_IMPL_ADD (array, i, strncpy, CPU_FEATURE_USABLE (SSSE3), |
576 | __strncpy_ssse3) |
577 | IFUNC_IMPL_ADD (array, i, strncpy, 1, |
578 | __strncpy_sse2_unaligned) |
579 | IFUNC_IMPL_ADD (array, i, strncpy, 1, __strncpy_sse2)) |
580 | |
581 | /* Support sysdeps/x86_64/multiarch/strpbrk.c. */ |
582 | IFUNC_IMPL (i, name, strpbrk, |
583 | IFUNC_IMPL_ADD (array, i, strpbrk, CPU_FEATURE_USABLE (SSE4_2), |
584 | __strpbrk_sse42) |
585 | IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_sse2)) |
586 | |
587 | |
588 | /* Support sysdeps/x86_64/multiarch/strspn.c. */ |
589 | IFUNC_IMPL (i, name, strspn, |
590 | IFUNC_IMPL_ADD (array, i, strspn, CPU_FEATURE_USABLE (SSE4_2), |
591 | __strspn_sse42) |
592 | IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_sse2)) |
593 | |
594 | /* Support sysdeps/x86_64/multiarch/strstr.c. */ |
595 | IFUNC_IMPL (i, name, strstr, |
596 | IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_sse2_unaligned) |
597 | IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_sse2)) |
598 | |
599 | /* Support sysdeps/x86_64/multiarch/wcschr.c. */ |
600 | IFUNC_IMPL (i, name, wcschr, |
601 | IFUNC_IMPL_ADD (array, i, wcschr, |
602 | (CPU_FEATURE_USABLE (AVX2) |
603 | && CPU_FEATURE_USABLE (BMI2)), |
604 | __wcschr_avx2) |
605 | IFUNC_IMPL_ADD (array, i, wcschr, |
606 | (CPU_FEATURE_USABLE (AVX2) |
607 | && CPU_FEATURE_USABLE (BMI2) |
608 | && CPU_FEATURE_USABLE (RTM)), |
609 | __wcschr_avx2_rtm) |
610 | IFUNC_IMPL_ADD (array, i, wcschr, |
611 | (CPU_FEATURE_USABLE (AVX512VL) |
612 | && CPU_FEATURE_USABLE (AVX512BW) |
613 | && CPU_FEATURE_USABLE (BMI2)), |
614 | __wcschr_evex) |
615 | IFUNC_IMPL_ADD (array, i, wcschr, 1, __wcschr_sse2)) |
616 | |
617 | /* Support sysdeps/x86_64/multiarch/wcsrchr.c. */ |
618 | IFUNC_IMPL (i, name, wcsrchr, |
619 | IFUNC_IMPL_ADD (array, i, wcsrchr, |
620 | CPU_FEATURE_USABLE (AVX2), |
621 | __wcsrchr_avx2) |
622 | IFUNC_IMPL_ADD (array, i, wcsrchr, |
623 | (CPU_FEATURE_USABLE (AVX2) |
624 | && CPU_FEATURE_USABLE (RTM)), |
625 | __wcsrchr_avx2_rtm) |
626 | IFUNC_IMPL_ADD (array, i, wcsrchr, |
627 | (CPU_FEATURE_USABLE (AVX512VL) |
628 | && CPU_FEATURE_USABLE (AVX512BW) |
629 | && CPU_FEATURE_USABLE (BMI2)), |
630 | __wcsrchr_evex) |
631 | IFUNC_IMPL_ADD (array, i, wcsrchr, 1, __wcsrchr_sse2)) |
632 | |
633 | /* Support sysdeps/x86_64/multiarch/wcscmp.c. */ |
634 | IFUNC_IMPL (i, name, wcscmp, |
635 | IFUNC_IMPL_ADD (array, i, wcscmp, |
636 | CPU_FEATURE_USABLE (AVX2), |
637 | __wcscmp_avx2) |
638 | IFUNC_IMPL_ADD (array, i, wcscmp, |
639 | (CPU_FEATURE_USABLE (AVX2) |
640 | && CPU_FEATURE_USABLE (RTM)), |
641 | __wcscmp_avx2_rtm) |
642 | IFUNC_IMPL_ADD (array, i, wcscmp, |
643 | (CPU_FEATURE_USABLE (AVX512VL) |
644 | && CPU_FEATURE_USABLE (AVX512BW) |
645 | && CPU_FEATURE_USABLE (BMI2)), |
646 | __wcscmp_evex) |
647 | IFUNC_IMPL_ADD (array, i, wcscmp, 1, __wcscmp_sse2)) |
648 | |
649 | /* Support sysdeps/x86_64/multiarch/wcsncmp.c. */ |
650 | IFUNC_IMPL (i, name, wcsncmp, |
651 | IFUNC_IMPL_ADD (array, i, wcsncmp, |
652 | CPU_FEATURE_USABLE (AVX2), |
653 | __wcsncmp_avx2) |
654 | IFUNC_IMPL_ADD (array, i, wcsncmp, |
655 | (CPU_FEATURE_USABLE (AVX2) |
656 | && CPU_FEATURE_USABLE (RTM)), |
657 | __wcsncmp_avx2_rtm) |
658 | IFUNC_IMPL_ADD (array, i, wcsncmp, |
659 | (CPU_FEATURE_USABLE (AVX512VL) |
660 | && CPU_FEATURE_USABLE (AVX512BW) |
661 | && CPU_FEATURE_USABLE (BMI2)), |
662 | __wcsncmp_evex) |
663 | IFUNC_IMPL_ADD (array, i, wcsncmp, 1, __wcsncmp_sse2)) |
664 | |
665 | /* Support sysdeps/x86_64/multiarch/wcscpy.c. */ |
666 | IFUNC_IMPL (i, name, wcscpy, |
667 | IFUNC_IMPL_ADD (array, i, wcscpy, CPU_FEATURE_USABLE (SSSE3), |
668 | __wcscpy_ssse3) |
669 | IFUNC_IMPL_ADD (array, i, wcscpy, 1, __wcscpy_sse2)) |
670 | |
671 | /* Support sysdeps/x86_64/multiarch/wcslen.c. */ |
672 | IFUNC_IMPL (i, name, wcslen, |
673 | IFUNC_IMPL_ADD (array, i, wcslen, |
674 | (CPU_FEATURE_USABLE (AVX2) |
675 | && CPU_FEATURE_USABLE (BMI2)), |
676 | __wcslen_avx2) |
677 | IFUNC_IMPL_ADD (array, i, wcslen, |
678 | (CPU_FEATURE_USABLE (AVX2) |
679 | && CPU_FEATURE_USABLE (BMI2) |
680 | && CPU_FEATURE_USABLE (RTM)), |
681 | __wcslen_avx2_rtm) |
682 | IFUNC_IMPL_ADD (array, i, wcslen, |
683 | (CPU_FEATURE_USABLE (AVX512VL) |
684 | && CPU_FEATURE_USABLE (AVX512BW) |
685 | && CPU_FEATURE_USABLE (BMI2)), |
686 | __wcslen_evex) |
687 | IFUNC_IMPL_ADD (array, i, wcslen, |
688 | CPU_FEATURE_USABLE (SSE4_1), |
689 | __wcslen_sse4_1) |
690 | IFUNC_IMPL_ADD (array, i, wcslen, 1, __wcslen_sse2)) |
691 | |
692 | /* Support sysdeps/x86_64/multiarch/wcsnlen.c. */ |
693 | IFUNC_IMPL (i, name, wcsnlen, |
694 | IFUNC_IMPL_ADD (array, i, wcsnlen, |
695 | (CPU_FEATURE_USABLE (AVX2) |
696 | && CPU_FEATURE_USABLE (BMI2)), |
697 | __wcsnlen_avx2) |
698 | IFUNC_IMPL_ADD (array, i, wcsnlen, |
699 | (CPU_FEATURE_USABLE (AVX2) |
700 | && CPU_FEATURE_USABLE (BMI2) |
701 | && CPU_FEATURE_USABLE (RTM)), |
702 | __wcsnlen_avx2_rtm) |
703 | IFUNC_IMPL_ADD (array, i, wcsnlen, |
704 | (CPU_FEATURE_USABLE (AVX512VL) |
705 | && CPU_FEATURE_USABLE (AVX512BW) |
706 | && CPU_FEATURE_USABLE (BMI2)), |
707 | __wcsnlen_evex) |
708 | IFUNC_IMPL_ADD (array, i, wcsnlen, |
709 | CPU_FEATURE_USABLE (SSE4_1), |
710 | __wcsnlen_sse4_1) |
711 | IFUNC_IMPL_ADD (array, i, wcsnlen, 1, __wcsnlen_sse2)) |
712 | |
713 | /* Support sysdeps/x86_64/multiarch/wmemchr.c. */ |
714 | IFUNC_IMPL (i, name, wmemchr, |
715 | IFUNC_IMPL_ADD (array, i, wmemchr, |
716 | CPU_FEATURE_USABLE (AVX2), |
717 | __wmemchr_avx2) |
718 | IFUNC_IMPL_ADD (array, i, wmemchr, |
719 | (CPU_FEATURE_USABLE (AVX2) |
720 | && CPU_FEATURE_USABLE (RTM)), |
721 | __wmemchr_avx2_rtm) |
722 | IFUNC_IMPL_ADD (array, i, wmemchr, |
723 | (CPU_FEATURE_USABLE (AVX512VL) |
724 | && CPU_FEATURE_USABLE (AVX512BW) |
725 | && CPU_FEATURE_USABLE (BMI2)), |
726 | __wmemchr_evex) |
727 | IFUNC_IMPL_ADD (array, i, wmemchr, |
728 | (CPU_FEATURE_USABLE (AVX512VL) |
729 | && CPU_FEATURE_USABLE (AVX512BW) |
730 | && CPU_FEATURE_USABLE (BMI2)), |
731 | __wmemchr_evex_rtm) |
732 | IFUNC_IMPL_ADD (array, i, wmemchr, 1, __wmemchr_sse2)) |
733 | |
734 | /* Support sysdeps/x86_64/multiarch/wmemcmp.c. */ |
735 | IFUNC_IMPL (i, name, wmemcmp, |
736 | IFUNC_IMPL_ADD (array, i, wmemcmp, |
737 | (CPU_FEATURE_USABLE (AVX2) |
738 | && CPU_FEATURE_USABLE (BMI2) |
739 | && CPU_FEATURE_USABLE (MOVBE)), |
740 | __wmemcmp_avx2_movbe) |
741 | IFUNC_IMPL_ADD (array, i, wmemcmp, |
742 | (CPU_FEATURE_USABLE (AVX2) |
743 | && CPU_FEATURE_USABLE (BMI2) |
744 | && CPU_FEATURE_USABLE (MOVBE) |
745 | && CPU_FEATURE_USABLE (RTM)), |
746 | __wmemcmp_avx2_movbe_rtm) |
747 | IFUNC_IMPL_ADD (array, i, wmemcmp, |
748 | (CPU_FEATURE_USABLE (AVX512VL) |
749 | && CPU_FEATURE_USABLE (AVX512BW) |
750 | && CPU_FEATURE_USABLE (BMI2) |
751 | && CPU_FEATURE_USABLE (MOVBE)), |
752 | __wmemcmp_evex_movbe) |
753 | IFUNC_IMPL_ADD (array, i, wmemcmp, CPU_FEATURE_USABLE (SSE4_1), |
754 | __wmemcmp_sse4_1) |
755 | IFUNC_IMPL_ADD (array, i, wmemcmp, CPU_FEATURE_USABLE (SSSE3), |
756 | __wmemcmp_ssse3) |
757 | IFUNC_IMPL_ADD (array, i, wmemcmp, 1, __wmemcmp_sse2)) |
758 | |
759 | /* Support sysdeps/x86_64/multiarch/wmemset.c. */ |
760 | IFUNC_IMPL (i, name, wmemset, |
761 | IFUNC_IMPL_ADD (array, i, wmemset, 1, |
762 | __wmemset_sse2_unaligned) |
763 | IFUNC_IMPL_ADD (array, i, wmemset, |
764 | CPU_FEATURE_USABLE (AVX2), |
765 | __wmemset_avx2_unaligned) |
766 | IFUNC_IMPL_ADD (array, i, wmemset, |
767 | (CPU_FEATURE_USABLE (AVX2) |
768 | && CPU_FEATURE_USABLE (RTM)), |
769 | __wmemset_avx2_unaligned_rtm) |
770 | IFUNC_IMPL_ADD (array, i, wmemset, |
771 | (CPU_FEATURE_USABLE (AVX512VL) |
772 | && CPU_FEATURE_USABLE (AVX512BW) |
773 | && CPU_FEATURE_USABLE (BMI2)), |
774 | __wmemset_evex_unaligned) |
775 | IFUNC_IMPL_ADD (array, i, wmemset, |
776 | (CPU_FEATURE_USABLE (AVX512VL) |
777 | && CPU_FEATURE_USABLE (AVX512BW) |
778 | && CPU_FEATURE_USABLE (BMI2)), |
779 | __wmemset_avx512_unaligned)) |
780 | |
781 | #ifdef SHARED |
782 | /* Support sysdeps/x86_64/multiarch/memcpy_chk.c. */ |
783 | IFUNC_IMPL (i, name, __memcpy_chk, |
784 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
785 | CPU_FEATURE_USABLE (AVX512F), |
786 | __memcpy_chk_avx512_no_vzeroupper) |
787 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
788 | CPU_FEATURE_USABLE (AVX512VL), |
789 | __memcpy_chk_avx512_unaligned) |
790 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
791 | CPU_FEATURE_USABLE (AVX512VL), |
792 | __memcpy_chk_avx512_unaligned_erms) |
793 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
794 | CPU_FEATURE_USABLE (AVX), |
795 | __memcpy_chk_avx_unaligned) |
796 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
797 | CPU_FEATURE_USABLE (AVX), |
798 | __memcpy_chk_avx_unaligned_erms) |
799 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
800 | (CPU_FEATURE_USABLE (AVX) |
801 | && CPU_FEATURE_USABLE (RTM)), |
802 | __memcpy_chk_avx_unaligned_rtm) |
803 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
804 | (CPU_FEATURE_USABLE (AVX) |
805 | && CPU_FEATURE_USABLE (RTM)), |
806 | __memcpy_chk_avx_unaligned_erms_rtm) |
807 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
808 | CPU_FEATURE_USABLE (AVX512VL), |
809 | __memcpy_chk_evex_unaligned) |
810 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
811 | CPU_FEATURE_USABLE (AVX512VL), |
812 | __memcpy_chk_evex_unaligned_erms) |
813 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
814 | CPU_FEATURE_USABLE (SSSE3), |
815 | __memcpy_chk_ssse3_back) |
816 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, |
817 | CPU_FEATURE_USABLE (SSSE3), |
818 | __memcpy_chk_ssse3) |
819 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, |
820 | __memcpy_chk_sse2_unaligned) |
821 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, |
822 | __memcpy_chk_sse2_unaligned_erms) |
823 | IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1, |
824 | __memcpy_chk_erms)) |
825 | #endif |
826 | |
827 | /* Support sysdeps/x86_64/multiarch/memcpy.c. */ |
828 | IFUNC_IMPL (i, name, memcpy, |
829 | IFUNC_IMPL_ADD (array, i, memcpy, |
830 | CPU_FEATURE_USABLE (AVX), |
831 | __memcpy_avx_unaligned) |
832 | IFUNC_IMPL_ADD (array, i, memcpy, |
833 | CPU_FEATURE_USABLE (AVX), |
834 | __memcpy_avx_unaligned_erms) |
835 | IFUNC_IMPL_ADD (array, i, memcpy, |
836 | (CPU_FEATURE_USABLE (AVX) |
837 | && CPU_FEATURE_USABLE (RTM)), |
838 | __memcpy_avx_unaligned_rtm) |
839 | IFUNC_IMPL_ADD (array, i, memcpy, |
840 | (CPU_FEATURE_USABLE (AVX) |
841 | && CPU_FEATURE_USABLE (RTM)), |
842 | __memcpy_avx_unaligned_erms_rtm) |
843 | IFUNC_IMPL_ADD (array, i, memcpy, |
844 | CPU_FEATURE_USABLE (AVX512VL), |
845 | __memcpy_evex_unaligned) |
846 | IFUNC_IMPL_ADD (array, i, memcpy, |
847 | CPU_FEATURE_USABLE (AVX512VL), |
848 | __memcpy_evex_unaligned_erms) |
849 | IFUNC_IMPL_ADD (array, i, memcpy, CPU_FEATURE_USABLE (SSSE3), |
850 | __memcpy_ssse3_back) |
851 | IFUNC_IMPL_ADD (array, i, memcpy, CPU_FEATURE_USABLE (SSSE3), |
852 | __memcpy_ssse3) |
853 | IFUNC_IMPL_ADD (array, i, memcpy, |
854 | CPU_FEATURE_USABLE (AVX512F), |
855 | __memcpy_avx512_no_vzeroupper) |
856 | IFUNC_IMPL_ADD (array, i, memcpy, |
857 | CPU_FEATURE_USABLE (AVX512VL), |
858 | __memcpy_avx512_unaligned) |
859 | IFUNC_IMPL_ADD (array, i, memcpy, |
860 | CPU_FEATURE_USABLE (AVX512VL), |
861 | __memcpy_avx512_unaligned_erms) |
862 | IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_sse2_unaligned) |
863 | IFUNC_IMPL_ADD (array, i, memcpy, 1, |
864 | __memcpy_sse2_unaligned_erms) |
865 | IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_erms)) |
866 | |
867 | #ifdef SHARED |
868 | /* Support sysdeps/x86_64/multiarch/mempcpy_chk.c. */ |
869 | IFUNC_IMPL (i, name, __mempcpy_chk, |
870 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
871 | CPU_FEATURE_USABLE (AVX512F), |
872 | __mempcpy_chk_avx512_no_vzeroupper) |
873 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
874 | CPU_FEATURE_USABLE (AVX512VL), |
875 | __mempcpy_chk_avx512_unaligned) |
876 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
877 | CPU_FEATURE_USABLE (AVX512VL), |
878 | __mempcpy_chk_avx512_unaligned_erms) |
879 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
880 | CPU_FEATURE_USABLE (AVX), |
881 | __mempcpy_chk_avx_unaligned) |
882 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
883 | CPU_FEATURE_USABLE (AVX), |
884 | __mempcpy_chk_avx_unaligned_erms) |
885 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
886 | (CPU_FEATURE_USABLE (AVX) |
887 | && CPU_FEATURE_USABLE (RTM)), |
888 | __mempcpy_chk_avx_unaligned_rtm) |
889 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
890 | (CPU_FEATURE_USABLE (AVX) |
891 | && CPU_FEATURE_USABLE (RTM)), |
892 | __mempcpy_chk_avx_unaligned_erms_rtm) |
893 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
894 | CPU_FEATURE_USABLE (AVX512VL), |
895 | __mempcpy_chk_evex_unaligned) |
896 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
897 | CPU_FEATURE_USABLE (AVX512VL), |
898 | __mempcpy_chk_evex_unaligned_erms) |
899 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
900 | CPU_FEATURE_USABLE (SSSE3), |
901 | __mempcpy_chk_ssse3_back) |
902 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, |
903 | CPU_FEATURE_USABLE (SSSE3), |
904 | __mempcpy_chk_ssse3) |
905 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, |
906 | __mempcpy_chk_sse2_unaligned) |
907 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, |
908 | __mempcpy_chk_sse2_unaligned_erms) |
909 | IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1, |
910 | __mempcpy_chk_erms)) |
911 | #endif |
912 | |
913 | /* Support sysdeps/x86_64/multiarch/mempcpy.c. */ |
914 | IFUNC_IMPL (i, name, mempcpy, |
915 | IFUNC_IMPL_ADD (array, i, mempcpy, |
916 | CPU_FEATURE_USABLE (AVX512F), |
917 | __mempcpy_avx512_no_vzeroupper) |
918 | IFUNC_IMPL_ADD (array, i, mempcpy, |
919 | CPU_FEATURE_USABLE (AVX512VL), |
920 | __mempcpy_avx512_unaligned) |
921 | IFUNC_IMPL_ADD (array, i, mempcpy, |
922 | CPU_FEATURE_USABLE (AVX512VL), |
923 | __mempcpy_avx512_unaligned_erms) |
924 | IFUNC_IMPL_ADD (array, i, mempcpy, |
925 | CPU_FEATURE_USABLE (AVX), |
926 | __mempcpy_avx_unaligned) |
927 | IFUNC_IMPL_ADD (array, i, mempcpy, |
928 | CPU_FEATURE_USABLE (AVX), |
929 | __mempcpy_avx_unaligned_erms) |
930 | IFUNC_IMPL_ADD (array, i, mempcpy, |
931 | (CPU_FEATURE_USABLE (AVX) |
932 | && CPU_FEATURE_USABLE (RTM)), |
933 | __mempcpy_avx_unaligned_rtm) |
934 | IFUNC_IMPL_ADD (array, i, mempcpy, |
935 | (CPU_FEATURE_USABLE (AVX) |
936 | && CPU_FEATURE_USABLE (RTM)), |
937 | __mempcpy_avx_unaligned_erms_rtm) |
938 | IFUNC_IMPL_ADD (array, i, mempcpy, |
939 | CPU_FEATURE_USABLE (AVX512VL), |
940 | __mempcpy_evex_unaligned) |
941 | IFUNC_IMPL_ADD (array, i, mempcpy, |
942 | CPU_FEATURE_USABLE (AVX512VL), |
943 | __mempcpy_evex_unaligned_erms) |
944 | IFUNC_IMPL_ADD (array, i, mempcpy, CPU_FEATURE_USABLE (SSSE3), |
945 | __mempcpy_ssse3_back) |
946 | IFUNC_IMPL_ADD (array, i, mempcpy, CPU_FEATURE_USABLE (SSSE3), |
947 | __mempcpy_ssse3) |
948 | IFUNC_IMPL_ADD (array, i, mempcpy, 1, |
949 | __mempcpy_sse2_unaligned) |
950 | IFUNC_IMPL_ADD (array, i, mempcpy, 1, |
951 | __mempcpy_sse2_unaligned_erms) |
952 | IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_erms)) |
953 | |
954 | /* Support sysdeps/x86_64/multiarch/strncmp.c. */ |
955 | IFUNC_IMPL (i, name, strncmp, |
956 | IFUNC_IMPL_ADD (array, i, strncmp, |
957 | CPU_FEATURE_USABLE (AVX2), |
958 | __strncmp_avx2) |
959 | IFUNC_IMPL_ADD (array, i, strncmp, |
960 | (CPU_FEATURE_USABLE (AVX2) |
961 | && CPU_FEATURE_USABLE (RTM)), |
962 | __strncmp_avx2_rtm) |
963 | IFUNC_IMPL_ADD (array, i, strncmp, |
964 | (CPU_FEATURE_USABLE (AVX512VL) |
965 | && CPU_FEATURE_USABLE (AVX512BW)), |
966 | __strncmp_evex) |
967 | IFUNC_IMPL_ADD (array, i, strncmp, CPU_FEATURE_USABLE (SSE4_2), |
968 | __strncmp_sse42) |
969 | IFUNC_IMPL_ADD (array, i, strncmp, CPU_FEATURE_USABLE (SSSE3), |
970 | __strncmp_ssse3) |
971 | IFUNC_IMPL_ADD (array, i, strncmp, 1, __strncmp_sse2)) |
972 | |
973 | #ifdef SHARED |
974 | /* Support sysdeps/x86_64/multiarch/wmemset_chk.c. */ |
975 | IFUNC_IMPL (i, name, __wmemset_chk, |
976 | IFUNC_IMPL_ADD (array, i, __wmemset_chk, 1, |
977 | __wmemset_chk_sse2_unaligned) |
978 | IFUNC_IMPL_ADD (array, i, __wmemset_chk, |
979 | CPU_FEATURE_USABLE (AVX2), |
980 | __wmemset_chk_avx2_unaligned) |
981 | IFUNC_IMPL_ADD (array, i, __wmemset_chk, |
982 | (CPU_FEATURE_USABLE (AVX512VL) |
983 | && CPU_FEATURE_USABLE (AVX512BW) |
984 | && CPU_FEATURE_USABLE (BMI2)), |
985 | __wmemset_chk_evex_unaligned) |
986 | IFUNC_IMPL_ADD (array, i, __wmemset_chk, |
987 | (CPU_FEATURE_USABLE (AVX512VL) |
988 | && CPU_FEATURE_USABLE (AVX512BW) |
989 | && CPU_FEATURE_USABLE (BMI2)), |
990 | __wmemset_chk_avx512_unaligned)) |
991 | #endif |
992 | |
993 | return i; |
994 | } |
995 | |