Mercurial > hg > CbC > CbC_gcc
diff gcc/config/i386/cpuid.h @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line diff
--- a/gcc/config/i386/cpuid.h Thu Oct 25 07:37:49 2018 +0900 +++ b/gcc/config/i386/cpuid.h Thu Feb 13 11:34:05 2020 +0900 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2018 Free Software Foundation, Inc. + * Copyright (C) 2007-2020 Free Software Foundation, Inc. * * This file is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -21,6 +21,9 @@ * <http://www.gnu.org/licenses/>. */ +/* %eax */ +#define bit_AVX512BF16 (1 << 5) + /* %ecx */ #define bit_SSE3 (1 << 0) #define bit_PCLMUL (1 << 1) @@ -110,11 +113,13 @@ #define bit_RDPID (1 << 22) #define bit_MOVDIRI (1 << 27) #define bit_MOVDIR64B (1 << 28) +#define bit_ENQCMD (1 << 29) #define bit_CLDEMOTE (1 << 25) /* %edx */ #define bit_AVX5124VNNIW (1 << 2) #define bit_AVX5124FMAPS (1 << 3) +#define bit_AVX512VP2INTERSECT (1 << 8) #define bit_IBT (1 << 20) #define bit_PCONFIG (1 << 18) /* XFEATURE_ENABLED_MASK register bits (%eax == 13, %ecx == 0) */ @@ -126,6 +131,10 @@ #define bit_XSAVEC (1 << 1) #define bit_XSAVES (1 << 3) +/* PT sub leaf (%eax == 14, %ecx == 0) */ +/* %ebx */ +#define bit_PTWRITE (1 << 4) + /* Signatures for different CPU implementations as returned in uses of cpuid with level 0. */ #define signature_AMD_ebx 0x68747541 @@ -180,10 +189,27 @@ #define signature_VORTEX_ecx 0x436f5320 #define signature_VORTEX_edx 0x36387865 +#ifndef __x86_64__ +/* At least one cpu (Winchip 2) does not set %ebx and %ecx + for cpuid leaf 1. Forcibly zero the two registers before + calling cpuid as a precaution. */ +#define __cpuid(level, a, b, c, d) \ + do { \ + if (__builtin_constant_p (level) && (level) != 1) \ + __asm__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level)); \ + else \ + __asm__ ("cpuid\n\t" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ + : "0" (level), "1" (0), "2" (0)); \ + } while (0) +#else #define __cpuid(level, a, b, c, d) \ __asm__ ("cpuid\n\t" \ : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \ : "0" (level)) +#endif #define __cpuid_count(level, count, a, b, c, d) \ __asm__ ("cpuid\n\t" \