From f303f97c2934288f6314c59564e6630925731f41 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Thu, 25 Oct 2012 15:51:43 -0700 Subject: [PATCH] Add IFUNC test lists for memcpy/mempcpy/memset on sparc. * sysdeps/sparc/sparc64/multiarch/memcpy.S: Add comments for ifunc-impl-list.c * sysdeps/sparc/sparc64/multiarch/memset.S: Likewise. * sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c: New file. * sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c: New file. --- ChangeLog | 7 ++ .../sparcv9/multiarch/ifunc-impl-list.c | 1 + .../sparc/sparc64/multiarch/ifunc-impl-list.c | 75 +++++++++++++++++++ sysdeps/sparc/sparc64/multiarch/memcpy.S | 1 + sysdeps/sparc/sparc64/multiarch/memset.S | 1 + 5 files changed, 85 insertions(+) create mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c create mode 100644 sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c diff --git a/ChangeLog b/ChangeLog index f8127842b4a..a43b5831690 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,13 @@ (__get_clockfreq_via_proc_openprom): Use strtoumax instead of strtoull. + * sysdeps/sparc/sparc64/multiarch/memcpy.S: Add comments for + ifunc-impl-list.c + * sysdeps/sparc/sparc64/multiarch/memset.S: Likewise. + * sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c: New file. + * sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c: New + file. + 2012-10-25 Roland McGrath * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c new file mode 100644 index 00000000000..a04aa0f674a --- /dev/null +++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/ifunc-impl-list.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c b/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c new file mode 100644 index 00000000000..65a8a9ae8a4 --- /dev/null +++ b/sysdeps/sparc/sparc64/multiarch/ifunc-impl-list.c @@ -0,0 +1,75 @@ +/* Enumerate available IFUNC implementations of a function. sparc version. + Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include +#include +#include + +/* Fill ARRAY of MAX elements with IFUNC implementations for function + NAME and return the number of valid entries. */ + +size_t +__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array, + size_t max) +{ + size_t i = 0; + int hwcap; + + hwcap = GLRO(dl_hwcap); + + IFUNC_IMPL (i, name, memcpy, + IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_CRYPTO, + __memcpy_niagara4) + IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_N2, + __memcpy_niagara2) + IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_BLKINIT, + __memcpy_niagara1) + IFUNC_IMPL_ADD (array, i, memcpy, hwcap & HWCAP_SPARC_ULTRA3, + __memcpy_ultra3) + IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_ultra1)); + + IFUNC_IMPL (i, name, mempcpy, + IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_CRYPTO, + __mempcpy_niagara4) + IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_N2, + __mempcpy_niagara2) + IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_BLKINIT, + __mempcpy_niagara1) + IFUNC_IMPL_ADD (array, i, mempcpy, hwcap & HWCAP_SPARC_ULTRA3, + __mempcpy_ultra3) + IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_ultra1)); + + IFUNC_IMPL (i, name, bzero, + IFUNC_IMPL_ADD (array, i, bzero, hwcap & HWCAP_SPARC_CRYPTO, + __bzero_niagara4) + IFUNC_IMPL_ADD (array, i, bzero, hwcap & HWCAP_SPARC_BLKINIT, + __bzero_niagara1) + IFUNC_IMPL_ADD (array, i, bzero, 1, __bzero_ultra1)); + + IFUNC_IMPL (i, name, memset, + IFUNC_IMPL_ADD (array, i, memset, hwcap & HWCAP_SPARC_CRYPTO, + __memset_niagara4) + IFUNC_IMPL_ADD (array, i, memset, hwcap & HWCAP_SPARC_BLKINIT, + __memset_niagara1) + IFUNC_IMPL_ADD (array, i, memset, 1, __memset_ultra1)); + + return i; +} diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S index 50a40883c0c..51cb88c39d7 100644 --- a/sysdeps/sparc/sparc64/multiarch/memcpy.S +++ b/sysdeps/sparc/sparc64/multiarch/memcpy.S @@ -1,4 +1,5 @@ /* Multiple versions of memcpy + All versions must be listed in ifunc-impl-list.c. Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by David S. Miller (davem@davemloft.net) This file is part of the GNU C Library. diff --git a/sysdeps/sparc/sparc64/multiarch/memset.S b/sysdeps/sparc/sparc64/multiarch/memset.S index 8b3faee915a..3a637c707b0 100644 --- a/sysdeps/sparc/sparc64/multiarch/memset.S +++ b/sysdeps/sparc/sparc64/multiarch/memset.S @@ -1,4 +1,5 @@ /* Multiple versions of memset and bzero + All versions must be listed in ifunc-impl-list.c. Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by David S. Miller (davem@davemloft.net) This file is part of the GNU C Library. -- 2.39.2