1
/* Enumerate available IFUNC implementations of a function. PowerPC64 version.
2
Copyright (C) 2013-2014 Free Software Foundation, Inc.
3
This file is part of the GNU C Library.
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.
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.
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
<http://www.gnu.org/licenses/>. */
23
#include <ifunc-impl-list.h>
25
/* Maximum number of IFUNC implementations. */
29
__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
32
assert (max >= MAX_IFUNC);
36
unsigned long int hwcap = GLRO(dl_hwcap);
37
/* hwcap contains only the latest supported ISA, the code checks which is
38
and fills the previous supported ones. */
39
if (hwcap & PPC_FEATURE_ARCH_2_06)
40
hwcap |= PPC_FEATURE_ARCH_2_05 | PPC_FEATURE_POWER5_PLUS |
41
PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4;
42
else if (hwcap & PPC_FEATURE_ARCH_2_05)
43
hwcap |= PPC_FEATURE_POWER5_PLUS | PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4;
44
else if (hwcap & PPC_FEATURE_POWER5_PLUS)
45
hwcap |= PPC_FEATURE_POWER5 | PPC_FEATURE_POWER4;
46
else if (hwcap & PPC_FEATURE_POWER5)
47
hwcap |= PPC_FEATURE_POWER4;
50
/* Support sysdeps/powerpc/powerpc64/multiarch/memcpy.c. */
51
IFUNC_IMPL (i, name, memcpy,
52
IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_HAS_VSX,
54
IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_06,
56
IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_ARCH_2_05,
58
IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_CELL_BE,
60
IFUNC_IMPL_ADD (array, i, memcpy, hwcap & PPC_FEATURE_POWER4,
62
IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ppc))
64
/* Support sysdeps/powerpc/powerpc64/multiarch/memset.c. */
65
IFUNC_IMPL (i, name, memset,
66
IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_HAS_VSX,
68
IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_ARCH_2_05,
70
IFUNC_IMPL_ADD (array, i, memset, hwcap & PPC_FEATURE_POWER4,
72
IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ppc))
74
/* Support sysdeps/powerpc/powerpc64/multiarch/strcpy.c. */
75
IFUNC_IMPL (i, name, strcpy,
76
IFUNC_IMPL_ADD (array, i, strcpy, hwcap & PPC_FEATURE_HAS_VSX,
78
IFUNC_IMPL_ADD (array, i, strcpy, 1,
81
/* Support sysdeps/powerpc/powerpc64/multiarch/stpcpy.c. */
82
IFUNC_IMPL (i, name, stpcpy,
83
IFUNC_IMPL_ADD (array, i, stpcpy, hwcap & PPC_FEATURE_HAS_VSX,
85
IFUNC_IMPL_ADD (array, i, stpcpy, 1,
88
/* Support sysdeps/powerpc/powerpc64/multiarch/strlen.c. */
89
IFUNC_IMPL (i, name, strlen,
90
IFUNC_IMPL_ADD (array, i, strlen, hwcap & PPC_FEATURE_HAS_VSX,
92
IFUNC_IMPL_ADD (array, i, strlen, 1,
95
/* Support sysdeps/powerpc/powerpc64/multiarch/strncmp.c. */
96
IFUNC_IMPL (i, name, strncmp,
97
IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_HAS_VSX,
99
IFUNC_IMPL_ADD (array, i, strncmp, hwcap & PPC_FEATURE_POWER4,
101
IFUNC_IMPL_ADD (array, i, strncmp, 1,
104
/* Support sysdeps/powerpc/powerpc64/multiarch/strchr.c. */
105
IFUNC_IMPL (i, name, strchr,
106
IFUNC_IMPL_ADD (array, i, strchr,
107
hwcap & PPC_FEATURE_HAS_VSX,
109
IFUNC_IMPL_ADD (array, i, strchr, 1,
112
/* Support sysdeps/powerpc/powerpc64/multiarch/strchrnul.c. */
113
IFUNC_IMPL (i, name, strchrnul,
114
IFUNC_IMPL_ADD (array, i, strchrnul,
115
hwcap & PPC_FEATURE_HAS_VSX,
117
IFUNC_IMPL_ADD (array, i, strchrnul, 1,
121
/* Support sysdeps/powerpc/powerpc64/multiarch/memcmp.c. */
122
IFUNC_IMPL (i, name, memcmp,
123
IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_HAS_VSX,
125
IFUNC_IMPL_ADD (array, i, memcmp, hwcap & PPC_FEATURE_POWER4,
127
IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_ppc))
129
/* Support sysdeps/powerpc/powerpc64/multiarch/bzero.c. */
130
IFUNC_IMPL (i, name, bzero,
131
IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_HAS_VSX,
133
IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_ARCH_2_05,
135
IFUNC_IMPL_ADD (array, i, bzero, hwcap & PPC_FEATURE_POWER4,
137
IFUNC_IMPL_ADD (array, i, bzero, 1, __bzero_ppc))
139
/* Support sysdeps/powerpc/powerpc64/multiarch/mempcpy.c. */
140
IFUNC_IMPL (i, name, mempcpy,
141
IFUNC_IMPL_ADD (array, i, mempcpy,
142
hwcap & PPC_FEATURE_HAS_VSX,
144
IFUNC_IMPL_ADD (array, i, mempcpy, 1,
147
/* Support sysdeps/powerpc/powerpc64/multiarch/memchr.c. */
148
IFUNC_IMPL (i, name, memchr,
149
IFUNC_IMPL_ADD (array, i, memchr,
150
hwcap & PPC_FEATURE_HAS_VSX,
152
IFUNC_IMPL_ADD (array, i, memchr, 1,
155
/* Support sysdeps/powerpc/powerpc64/multiarch/memrchr.c. */
156
IFUNC_IMPL (i, name, memrchr,
157
IFUNC_IMPL_ADD (array, i, memrchr,
158
hwcap & PPC_FEATURE_HAS_VSX,
160
IFUNC_IMPL_ADD (array, i, memrchr, 1,
163
/* Support sysdeps/powerpc/powerpc64/multiarch/rawmemchr.c. */
164
IFUNC_IMPL (i, name, rawmemchr,
165
IFUNC_IMPL_ADD (array, i, rawmemchr,
166
hwcap & PPC_FEATURE_HAS_VSX,
168
IFUNC_IMPL_ADD (array, i, rawmemchr, 1,
171
/* Support sysdeps/powerpc/powerpc64/multiarch/strnlen.c. */
172
IFUNC_IMPL (i, name, strnlen,
173
IFUNC_IMPL_ADD (array, i, strnlen, hwcap & PPC_FEATURE_HAS_VSX,
175
IFUNC_IMPL_ADD (array, i, strnlen, 1,
178
/* Support sysdeps/powerpc/powerpc64/multiarch/strcasecmp.c. */
179
IFUNC_IMPL (i, name, strcasecmp,
180
IFUNC_IMPL_ADD (array, i, strcasecmp,
181
hwcap & PPC_FEATURE_HAS_VSX,
183
IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_ppc))
185
/* Support sysdeps/powerpc/powerpc64/multiarch/strcasecmp_l.c. */
186
IFUNC_IMPL (i, name, strcasecmp_l,
187
IFUNC_IMPL_ADD (array, i, strcasecmp_l,
188
hwcap & PPC_FEATURE_HAS_VSX,
189
__strcasecmp_l_power7)
190
IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1,
193
/* Support sysdeps/powerpc/powerpc64/multiarch/strncase.c. */
194
IFUNC_IMPL (i, name, strncasecmp,
195
IFUNC_IMPL_ADD (array, i, strncasecmp,
196
hwcap & PPC_FEATURE_HAS_VSX,
197
__strncasecmp_power7)
198
IFUNC_IMPL_ADD (array, i, strncasecmp, 1, __strncasecmp_ppc))
200
/* Support sysdeps/powerpc/powerpc64/multiarch/strncase_l.c. */
201
IFUNC_IMPL (i, name, strncasecmp_l,
202
IFUNC_IMPL_ADD (array, i, strncasecmp_l,
203
hwcap & PPC_FEATURE_HAS_VSX,
204
__strncasecmp_l_power7)
205
IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1,
206
__strncasecmp_l_ppc))
208
/* Support sysdeps/powerpc/powerpc64/multiarch/wcschr.c. */
209
IFUNC_IMPL (i, name, wcschr,
210
IFUNC_IMPL_ADD (array, i, wcschr,
211
hwcap & PPC_FEATURE_HAS_VSX,
213
IFUNC_IMPL_ADD (array, i, wcschr,
214
hwcap & PPC_FEATURE_ARCH_2_05,
216
IFUNC_IMPL_ADD (array, i, wcschr, 1,
219
/* Support sysdeps/powerpc/powerpc64/multiarch/wcschr.c. */
220
IFUNC_IMPL (i, name, wcsrchr,
221
IFUNC_IMPL_ADD (array, i, wcsrchr,
222
hwcap & PPC_FEATURE_HAS_VSX,
224
IFUNC_IMPL_ADD (array, i, wcsrchr,
225
hwcap & PPC_FEATURE_ARCH_2_05,
227
IFUNC_IMPL_ADD (array, i, wcsrchr, 1,
230
/* Support sysdeps/powerpc/powerpc64/multiarch/wcscpy.c. */
231
IFUNC_IMPL (i, name, wcscpy,
232
IFUNC_IMPL_ADD (array, i, wcscpy,
233
hwcap & PPC_FEATURE_HAS_VSX,
235
IFUNC_IMPL_ADD (array, i, wcscpy,
236
hwcap & PPC_FEATURE_ARCH_2_05,
238
IFUNC_IMPL_ADD (array, i, wcscpy, 1,