From patchwork Wed Mar 9 01:54:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Piotr Henryk Dabrowski X-Patchwork-Id: 11280 Received: (qmail 108673 invoked by alias); 9 Mar 2016 01:55:13 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 107936 invoked by uid 89); 9 Mar 2016 01:55:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f47.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fe+d66ccVRpR2KdNbYa6U8uChdummHCn4PUxb91isnk=; b=fJDw2mhl9AiN8LjUdYKP+WVuu9FTRL1bZVm6VZ4ZBZvbRoL57L/Mo2Eh+l+BLe5emW j8QZ24Uv+s+26NsECy7wuBKf8yYEbpOVaHaaUluwRPUONgdrNZBx8ZBe4hunI1v+6Xsr 5Blqx37ancovLHVl42WKymKfvbbVpy8sHK8br9zb4TUmRcZF86+DkQVBzyO9VooVrKZO sRWmoNIMhCPiZkInSgHKF5YkghXGe44ca2tPpvVywEaBmLs+Ly+YwnsO7xQp7NumhoYJ AqQZmdbeWIMZmb++Oe1q55+33Fsle3Cvrw+hmIbw7sukbJBf+BeqLwHHIcNt4cfc52ut SBCA== X-Gm-Message-State: AD7BkJKcdFQ+pAzFre5ylvpdCU4HoIB2oGbBrJSMcv1d0JCWBvysG73PYUixPgJCFbRDCA== X-Received: by 10.28.87.139 with SMTP id l133mr21441782wmb.38.1457488499474; Tue, 08 Mar 2016 17:54:59 -0800 (PST) Date: Wed, 9 Mar 2016 02:54:55 +0100 From: Piotr Henryk Dabrowski To: libc-alpha@sourceware.org Cc: Piotr Henryk Dabrowski Subject: Re: [PATCH] Common cpuid wrappers, use SYS_cpuid when available Message-ID: <20160309025455.786115eb@ultra.tux-net> In-Reply-To: <20160309022443.3e3530f6@ultra.tux-net> References: <20160309022443.3e3530f6@ultra.tux-net> MIME-Version: 1.0 Sorry for the malformed patch in the first post. Here is a working one. * config.h.in: Check for SYS_cpuid and define HAVE_SYS_CPUID * configure: Check for SYS_cpuid and define HAVE_SYS_CPUID * configure.ac: Check for SYS_cpuid and define HAVE_SYS_CPUID * misc/cpuid.h: Common cpuid wrappers, use SYS_cpuid when available * sysdeps/x86/cpu-features.c: Use misc/cpuid.h wrappers * sysdeps/x86/fpu/test-fenv-clear-sse.c: Use misc/cpuid.h wrappers * sysdeps/x86/fpu/test-fenv-sse-2.c: Use misc/cpuid.h wrappers * sysdeps/x86/fpu/test-fenv-sse.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/cacheinfo.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/tst-audit10.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/tst-audit4.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/tst-audit6.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/tst-auditmod10b.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/tst-auditmod4b.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/tst-auditmod6b.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/tst-auditmod6c.c: Use misc/cpuid.h wrappers * sysdeps/x86_64/tst-auditmod7b.c: Use misc/cpuid.h wrappers --- ChangeLog | 20 +++++++++ config.h.in | 3 ++ configure | 37 ++++++++++++++++ configure.ac | 18 ++++++++ misc/cpuid.h | 82 +++++++++++++++++++++++++++++++++++ sysdeps/x86/cpu-features.c | 37 ++++++++-------- sysdeps/x86/fpu/test-fenv-clear-sse.c | 4 +- sysdeps/x86/fpu/test-fenv-sse-2.c | 4 +- sysdeps/x86/fpu/test-fenv-sse.c | 4 +- sysdeps/x86_64/cacheinfo.c | 24 +++++----- sysdeps/x86_64/tst-audit10.c | 6 +-- sysdeps/x86_64/tst-audit4.c | 4 +- sysdeps/x86_64/tst-audit6.c | 4 +- sysdeps/x86_64/tst-auditmod10b.c | 6 +-- sysdeps/x86_64/tst-auditmod4b.c | 4 +- sysdeps/x86_64/tst-auditmod6b.c | 4 +- sysdeps/x86_64/tst-auditmod6c.c | 4 +- sysdeps/x86_64/tst-auditmod7b.c | 4 +- 18 files changed, 215 insertions(+), 54 deletions(-) create mode 100644 misc/cpuid.h diff --git a/ChangeLog b/ChangeLog index a6be762..3c67632 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2016-03-07 Piotr Henryk Dabrowski + + * config.h.in: Check for SYS_cpuid and define HAVE_SYS_CPUID + * configure: Check for SYS_cpuid and define HAVE_SYS_CPUID + * configure.ac: Check for SYS_cpuid and define HAVE_SYS_CPUID + * misc/cpuid.h: Common cpuid wrappers, use SYS_cpuid when available + * sysdeps/x86/cpu-features.c: Use misc/cpuid.h wrappers + * sysdeps/x86/fpu/test-fenv-clear-sse.c: Use misc/cpuid.h wrappers + * sysdeps/x86/fpu/test-fenv-sse-2.c: Use misc/cpuid.h wrappers + * sysdeps/x86/fpu/test-fenv-sse.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/cacheinfo.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/tst-audit10.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/tst-audit4.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/tst-audit6.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/tst-auditmod10b.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/tst-auditmod4b.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/tst-auditmod6b.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/tst-auditmod6c.c: Use misc/cpuid.h wrappers + * sysdeps/x86_64/tst-auditmod7b.c: Use misc/cpuid.h wrappers + 2016-03-09 Joseph Myers [BZ #19790] diff --git a/config.h.in b/config.h.in index 0147ba3..0f2231a 100644 --- a/config.h.in +++ b/config.h.in @@ -121,6 +121,9 @@ /* Mach/i386 specific: define if the `i386_set_gdt' RPC is available. */ #undef HAVE_I386_SET_GDT +/* Define if the x86 kernel supports SYS_cpuid syscall. */ +#undef HAVE_SYS_CPUID + /* Defined of libidn is available. */ #undef HAVE_LIBIDN diff --git a/configure b/configure index 8fe5937..1138642 100755 --- a/configure +++ b/configure @@ -6420,6 +6420,43 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu +# SYS_cpuid syscall +libc_cv_sys_cpuid=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 kernel with SYS_cpuid support" >&5 +$as_echo_n "checking for x86 kernel with SYS_cpuid support... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if (defined(__i386__) || defined(__x86_64__)) && defined(__linux__) + #include + #if !defined(SYS_cpuid) || !defined(__NR_cpuid) + #error SYS_cpuid not defined + #endif + #else + #error Not a x86 Linux + #endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libc_cv_sys_cpuid=yes +else + libc_cv_sys_cpuid=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if test "$libc_cv_sys_cpuid" = yes; then + $as_echo "#define HAVE_SYS_CPUID 1" >>confdefs.h + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sys_cpuid" >&5 +$as_echo "$libc_cv_sys_cpuid" >&6; } + ### End of automated tests. ### Now run sysdeps configure fragments. diff --git a/configure.ac b/configure.ac index 3c766b7..89a1779 100644 --- a/configure.ac +++ b/configure.ac @@ -1704,6 +1704,24 @@ AC_SUBST(libc_cv_cxx_thread_local) AC_LANG_POP([C++]) dnl End of C++ feature tests. +# SYS_cpuid syscall +libc_cv_sys_cpuid=no +AC_MSG_CHECKING(for x86 kernel with SYS_cpuid support) +AC_TRY_COMPILE([ + #if (defined(__i386__) || defined(__x86_64__)) && defined(__linux__) + #include + #if !defined(SYS_cpuid) || !defined(__NR_cpuid) + #error SYS_cpuid not defined + #endif + #else + #error Not a x86 Linux + #endif +], [], [libc_cv_sys_cpuid=yes], [libc_cv_sys_cpuid=no]) +if test "$libc_cv_sys_cpuid" = yes; then + AC_DEFINE(HAVE_SYS_CPUID) +fi +AC_MSG_RESULT($libc_cv_sys_cpuid) + ### End of automated tests. ### Now run sysdeps configure fragments. diff --git a/misc/cpuid.h b/misc/cpuid.h new file mode 100644 index 0000000..6caea13 --- /dev/null +++ b/misc/cpuid.h @@ -0,0 +1,82 @@ +/* CPUID wrapper functions. + This file is part of the GNU C Library. + Copyright (C) 2016 Piotr Henryk Dabrowski + + 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 + . */ + +#ifndef _CPUID_H +#define _CPUID_H 1 + +/* NOTE: for new Linux kernels these functions try to use kernel-adjusted + values for cpuid returned by the SYS_cpuid sys call. + Otherwise they fallback to native cpuid implementation. */ + +#include + +#include +#include +#include + +#ifdef HAVE_SYS_CPUID +#include +#include +#endif + +#define get_cpuid_max __get_cpuid_max + +/* Return cpuid data for requested cpuid level (eax) and count register (ecx), + as found in returned eax, ebx, ecx and edx registers. + All pointers are required to be non-null. */ +static inline void +cpuid_count (unsigned int level, unsigned int count, + unsigned int *eax, unsigned int *ebx, + unsigned int *ecx, unsigned int *edx) +{ +#ifdef HAVE_SYS_CPUID + if (INLINE_SYSCALL(cpuid, 6, level, count, eax, ebx, ecx, edx) == 0) + return; +#endif + __cpuid_count(level, count, *eax, *ebx, *ecx, *edx); +} + +/* Return cpuid data for requested cpuid level (eax), + as found in returned eax, ebx, ecx and edx registers. + All pointers are required to be non-null. */ +static inline void +cpuid (unsigned int level, + unsigned int *eax, unsigned int *ebx, + unsigned int *ecx, unsigned int *edx) +{ + cpuid_count(level, 0, eax, ebx, ecx, edx); +} + +/* Return cpuid data for requested cpuid level (eax), + as found in returned eax, ebx, ecx and edx registers. + The function checks if cpuid is supported and returns 1 for valid cpuid + information or 0 for unsupported cpuid level. + All pointers are required to be non-null. */ +static inline int +get_cpuid (unsigned int level, + unsigned int *eax, unsigned int *ebx, + unsigned int *ecx, unsigned int *edx) +{ + unsigned int ext = level & 0x80000000; + if (get_cpuid_max (ext, 0) < level) + return 0; + cpuid (level, eax, ebx, ecx, edx); + return 1; +} + +#endif /* cpuid.h */ diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c index 218ff2b..a71c701 100644 --- a/sysdeps/x86/cpu-features.c +++ b/sysdeps/x86/cpu-features.c @@ -16,7 +16,7 @@ License along with the GNU C Library; if not, see . */ -#include +#include #include static inline void @@ -25,9 +25,9 @@ get_common_indeces (struct cpu_features *cpu_features, unsigned int *extended_model) { unsigned int eax; - __cpuid (1, eax, cpu_features->cpuid[COMMON_CPUID_INDEX_1].ebx, - cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx, - cpu_features->cpuid[COMMON_CPUID_INDEX_1].edx); + cpuid (1, &eax, &(cpu_features->cpuid[COMMON_CPUID_INDEX_1].ebx), + &(cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx), + &(cpu_features->cpuid[COMMON_CPUID_INDEX_1].edx)); GLRO(dl_x86_cpu_features).cpuid[COMMON_CPUID_INDEX_1].eax = eax; *family = (eax >> 8) & 0x0f; *model = (eax >> 4) & 0x0f; @@ -42,20 +42,21 @@ get_common_indeces (struct cpu_features *cpu_features, static inline void init_cpu_features (struct cpu_features *cpu_features) { - unsigned int ebx, ecx, edx; + unsigned int eax, ebx, ecx, edx; unsigned int family = 0; unsigned int model = 0; enum cpu_features_kind kind; #if !HAS_CPUID - if (__get_cpuid_max (0, 0) == 0) + if (get_cpuid_max (0, 0) == 0) { kind = arch_kind_other; goto no_cpuid; } #endif - __cpuid (0, cpu_features->max_cpuid, ebx, ecx, edx); + cpuid (0, &eax, &ebx, &ecx, &edx); + cpu_features->max_cpuid = eax; /* This spells out "GenuineIntel". */ if (ebx == 0x756e6547 && ecx == 0x6c65746e && edx == 0x49656e69) @@ -147,13 +148,13 @@ init_cpu_features (struct cpu_features *cpu_features) ecx = cpu_features->cpuid[COMMON_CPUID_INDEX_1].ecx; unsigned int eax; - __cpuid (0x80000000, eax, ebx, ecx, edx); + cpuid (0x80000000, &eax, &ebx, &ecx, &edx); if (eax >= 0x80000001) - __cpuid (0x80000001, - cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].eax, - cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ebx, - cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ecx, - cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].edx); + cpuid (0x80000001, + &(cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].eax), + &(cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ebx), + &(cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].ecx), + &(cpu_features->cpuid[COMMON_CPUID_INDEX_80000001].edx)); if (family == 0x15) { @@ -175,11 +176,11 @@ init_cpu_features (struct cpu_features *cpu_features) cpu_features->feature[index_I686] |= bit_I686; if (cpu_features->max_cpuid >= 7) - __cpuid_count (7, 0, - cpu_features->cpuid[COMMON_CPUID_INDEX_7].eax, - cpu_features->cpuid[COMMON_CPUID_INDEX_7].ebx, - cpu_features->cpuid[COMMON_CPUID_INDEX_7].ecx, - cpu_features->cpuid[COMMON_CPUID_INDEX_7].edx); + cpuid_count (7, 0, + &(cpu_features->cpuid[COMMON_CPUID_INDEX_7].eax), + &(cpu_features->cpuid[COMMON_CPUID_INDEX_7].ebx), + &(cpu_features->cpuid[COMMON_CPUID_INDEX_7].ecx), + &(cpu_features->cpuid[COMMON_CPUID_INDEX_7].edx)); /* Can we call xgetbv? */ if (HAS_CPU_FEATURE (OSXSAVE)) diff --git a/sysdeps/x86/fpu/test-fenv-clear-sse.c b/sysdeps/x86/fpu/test-fenv-clear-sse.c index cc4b3f0..816470b 100644 --- a/sysdeps/x86/fpu/test-fenv-clear-sse.c +++ b/sysdeps/x86/fpu/test-fenv-clear-sse.c @@ -17,7 +17,7 @@ License along with the GNU C Library; if not, see . */ -#include +#include #include static bool @@ -25,7 +25,7 @@ have_sse2 (void) { unsigned int eax, ebx, ecx, edx; - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) + if (!get_cpuid (1, &eax, &ebx, &ecx, &edx)) return false; return (edx & bit_SSE2) != 0; diff --git a/sysdeps/x86/fpu/test-fenv-sse-2.c b/sysdeps/x86/fpu/test-fenv-sse-2.c index d3197c3..c72d5ad 100644 --- a/sysdeps/x86/fpu/test-fenv-sse-2.c +++ b/sysdeps/x86/fpu/test-fenv-sse-2.c @@ -16,7 +16,7 @@ License along with the GNU C Library; if not, see . */ -#include +#include #include #include #include @@ -28,7 +28,7 @@ have_sse2 (void) { unsigned int eax, ebx, ecx, edx; - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) + if (!get_cpuid (1, &eax, &ebx, &ecx, &edx)) return false; return (edx & bit_SSE2) != 0; diff --git a/sysdeps/x86/fpu/test-fenv-sse.c b/sysdeps/x86/fpu/test-fenv-sse.c index 4f4ff6a..c8f1497 100644 --- a/sysdeps/x86/fpu/test-fenv-sse.c +++ b/sysdeps/x86/fpu/test-fenv-sse.c @@ -16,7 +16,7 @@ License along with the GNU C Library; if not, see . */ -#include +#include #include #include #include @@ -27,7 +27,7 @@ have_sse2 (void) { unsigned int eax, ebx, ecx, edx; - if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) + if (!get_cpuid (1, &eax, &ebx, &ecx, &edx)) return false; return (edx & bit_SSE2) != 0; diff --git a/sysdeps/x86_64/cacheinfo.c b/sysdeps/x86_64/cacheinfo.c index 96463df..76cd03d 100644 --- a/sysdeps/x86_64/cacheinfo.c +++ b/sysdeps/x86_64/cacheinfo.c @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #define is_intel GLRO(dl_x86_cpu_features).kind == arch_kind_intel @@ -162,7 +162,7 @@ intel_check_word (int name, unsigned int value, bool *has_level_2, unsigned int round = 0; while (1) { - __cpuid_count (4, round, eax, ebx, ecx, edx); + cpuid_count (4, round, &eax, &ebx, &ecx, &edx); enum { null = 0, data = 1, inst = 2, uni = 3 } type = eax & 0x1f; if (type == null) @@ -275,7 +275,7 @@ handle_intel (int name, unsigned int maxidx) unsigned int ebx; unsigned int ecx; unsigned int edx; - __cpuid (2, eax, ebx, ecx, edx); + cpuid (2, &eax, &ebx, &ecx, &edx); /* The low byte of EAX in the first round contain the number of rounds we have to make. At least one, the one we are already @@ -319,7 +319,7 @@ handle_amd (int name) unsigned int ebx; unsigned int ecx; unsigned int edx; - __cpuid (0x80000000, eax, ebx, ecx, edx); + cpuid (0x80000000, &eax, &ebx, &ecx, &edx); /* No level 4 cache (yet). */ if (name > _SC_LEVEL3_CACHE_LINESIZE) @@ -329,7 +329,7 @@ handle_amd (int name) if (eax < fn) return 0; - __cpuid (fn, eax, ebx, ecx, edx); + cpuid (fn, &eax, &ebx, &ecx, &edx); if (name < _SC_LEVEL1_DCACHE_SIZE) { @@ -479,7 +479,7 @@ init_cacheinfo (void) unsigned int ebx; unsigned int ecx; unsigned int edx; - int max_cpuid_ex; + unsigned int max_cpuid_ex; long int data = -1; long int shared = -1; unsigned int level; @@ -512,7 +512,7 @@ init_cacheinfo (void) /* Query until desired cache level is enumerated. */ do { - __cpuid_count (4, i++, eax, ebx, ecx, edx); + cpuid_count (4, i++, &eax, &ebx, &ecx, &edx); /* There seems to be a bug in at least some Pentium Ds which sometimes fail to iterate all cache parameters. @@ -536,7 +536,7 @@ init_cacheinfo (void) i = 0; while (1) { - __cpuid_count (11, i++, eax, ebx, ecx, edx); + cpuid_count (11, i++, &eax, &ebx, &ecx, &edx); int shipped = ebx & 0xff; int type = ecx & 0xff0; @@ -598,7 +598,7 @@ init_cacheinfo (void) shared = handle_amd (_SC_LEVEL3_CACHE_SIZE); /* Get maximum extended function. */ - __cpuid (0x80000000, max_cpuid_ex, ebx, ecx, edx); + cpuid (0x80000000, &max_cpuid_ex, &ebx, &ecx, &edx); if (shared <= 0) /* No shared L3 cache. All we have is the L2 cache. */ @@ -609,7 +609,7 @@ init_cacheinfo (void) if (max_cpuid_ex >= 0x80000008) { /* Get width of APIC ID. */ - __cpuid (0x80000008, max_cpuid_ex, ebx, ecx, edx); + cpuid (0x80000008, &max_cpuid_ex, &ebx, &ecx, &edx); threads = 1 << ((ecx >> 12) & 0x0f); } @@ -617,7 +617,7 @@ init_cacheinfo (void) { /* If APIC ID width is not available, use logical processor count. */ - __cpuid (0x00000001, max_cpuid_ex, ebx, ecx, edx); + cpuid (0x00000001, &max_cpuid_ex, &ebx, &ecx, &edx); if ((edx & (1 << 28)) != 0) threads = (ebx >> 16) & 0xff; @@ -635,7 +635,7 @@ init_cacheinfo (void) #ifndef DISABLE_PREFETCHW if (max_cpuid_ex >= 0x80000001) { - __cpuid (0x80000001, eax, ebx, ecx, edx); + cpuid (0x80000001, &eax, &ebx, &ecx, &edx); /* PREFETCHW || 3DNow! */ if ((ecx & 0x100) || (edx & 0x80000000)) __x86_prefetchw = -1; diff --git a/sysdeps/x86_64/tst-audit10.c b/sysdeps/x86_64/tst-audit10.c index a487b40..7442f46 100644 --- a/sysdeps/x86_64/tst-audit10.c +++ b/sysdeps/x86_64/tst-audit10.c @@ -16,7 +16,7 @@ License along with the GNU C Library; if not, see . */ -#include +#include #include int tst_audit10_aux (void); @@ -26,11 +26,11 @@ avx512_enabled (void) { unsigned int eax, ebx, ecx, edx; - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 + if (get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) return 0; - __cpuid_count (7, 0, eax, ebx, ecx, edx); + cpuid_count (7, 0, &eax, &ebx, &ecx, &edx); if (!(ebx & bit_AVX512F)) return 0; diff --git a/sysdeps/x86_64/tst-audit4.c b/sysdeps/x86_64/tst-audit4.c index d8e2ab1..5aeaebf 100644 --- a/sysdeps/x86_64/tst-audit4.c +++ b/sysdeps/x86_64/tst-audit4.c @@ -16,7 +16,7 @@ License along with the GNU C Library; if not, see . */ -#include +#include int tst_audit4_aux (void); @@ -25,7 +25,7 @@ avx_enabled (void) { unsigned int eax, ebx, ecx, edx; - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 + if (get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) return 0; diff --git a/sysdeps/x86_64/tst-audit6.c b/sysdeps/x86_64/tst-audit6.c index f2f6a48..e7cc9d6 100644 --- a/sysdeps/x86_64/tst-audit6.c +++ b/sysdeps/x86_64/tst-audit6.c @@ -2,7 +2,7 @@ #include #include -#include +#include #include extern __m128i audit_test (__m128i, __m128i, __m128i, __m128i, @@ -14,7 +14,7 @@ avx_enabled (void) { unsigned int eax, ebx, ecx, edx; - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 + if (get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) return 0; diff --git a/sysdeps/x86_64/tst-auditmod10b.c b/sysdeps/x86_64/tst-auditmod10b.c index ad6fcaf..3b050d0 100644 --- a/sysdeps/x86_64/tst-auditmod10b.c +++ b/sysdeps/x86_64/tst-auditmod10b.c @@ -125,18 +125,18 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, #ifdef __AVX512F__ #include -#include +#include static int check_avx512 (void) { unsigned int eax, ebx, ecx, edx; - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 + if (get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0 || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE)) return 0; - __cpuid_count (7, 0, eax, ebx, ecx, edx); + cpuid_count (7, 0, &eax, &ebx, &ecx, &edx); if (!(ebx & bit_AVX512F)) return 0; diff --git a/sysdeps/x86_64/tst-auditmod4b.c b/sysdeps/x86_64/tst-auditmod4b.c index 2b0d827..c980887 100644 --- a/sysdeps/x86_64/tst-auditmod4b.c +++ b/sysdeps/x86_64/tst-auditmod4b.c @@ -108,7 +108,7 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, #ifdef __AVX__ #include -#include +#include static int avx = -1; @@ -120,7 +120,7 @@ check_avx (void) { unsigned int eax, ebx, ecx, edx; - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) + if (get_cpuid (1, &eax, &ebx, &ecx, &edx) && (ecx & bit_AVX)) avx = 1; else diff --git a/sysdeps/x86_64/tst-auditmod6b.c b/sysdeps/x86_64/tst-auditmod6b.c index 886fc33..d77d949 100644 --- a/sysdeps/x86_64/tst-auditmod6b.c +++ b/sysdeps/x86_64/tst-auditmod6b.c @@ -108,7 +108,7 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, #ifdef __AVX__ #include -#include +#include static int avx = -1; @@ -120,7 +120,7 @@ check_avx (void) { unsigned int eax, ebx, ecx, edx; - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) + if (get_cpuid (1, &eax, &ebx, &ecx, &edx) && (ecx & bit_AVX)) avx = 1; else diff --git a/sysdeps/x86_64/tst-auditmod6c.c b/sysdeps/x86_64/tst-auditmod6c.c index b2ee24d..0a5f143 100644 --- a/sysdeps/x86_64/tst-auditmod6c.c +++ b/sysdeps/x86_64/tst-auditmod6c.c @@ -108,7 +108,7 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, #ifdef __AVX__ #include -#include +#include static int avx = -1; @@ -120,7 +120,7 @@ check_avx (void) { unsigned int eax, ebx, ecx, edx; - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) + if (get_cpuid (1, &eax, &ebx, &ecx, &edx) && (ecx & bit_AVX)) avx = 1; else diff --git a/sysdeps/x86_64/tst-auditmod7b.c b/sysdeps/x86_64/tst-auditmod7b.c index f27076d..72257cd 100644 --- a/sysdeps/x86_64/tst-auditmod7b.c +++ b/sysdeps/x86_64/tst-auditmod7b.c @@ -108,7 +108,7 @@ la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook, #ifdef __AVX__ #include -#include +#include static int avx = -1; @@ -120,7 +120,7 @@ check_avx (void) { unsigned int eax, ebx, ecx, edx; - if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) + if (get_cpuid (1, &eax, &ebx, &ecx, &edx) && (ecx & bit_AVX)) avx = 1; else