cpuid.h: Define signature_*_e[bcd]x macros for matching results of level 0 calls to...
gcc/ * config/i386/cpuid.h: Define signature_*_e[bcd]x macros for matching results of level 0 calls to __cpuid to processor manufacturers. * config/i386/driver-i386.c (vendor_signatures): Removed. (processor_signatures): Removed. (host_detect_local_cpu): Replace uses of now-removed SIG_* constants with the new signature_*_ebx constants. libstdc++-v3/ * src/c++11/random.cc (random_device::_M_init): Use new macro signature_INTEL_ebx to check for Intel processors. From-SVN: r191109
This commit is contained in:
parent
7b99cca478
commit
ef64d158fb
@ -1,3 +1,13 @@
|
||||
2012-09-09 Ulrich Drepper <drepper@gmail.com>
|
||||
|
||||
* config/i386/cpuid.h: Define signature_*_e[bcd]x macros for
|
||||
matching results of level 0 calls to __cpuid to processor
|
||||
manufacturers.
|
||||
* config/i386/driver-i386.c (vendor_signatures): Removed.
|
||||
(processor_signatures): Removed.
|
||||
(host_detect_local_cpu): Replace uses of now-removed SIG_*
|
||||
constants with the new signature_*_ebx constants.
|
||||
|
||||
2012-09-08 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
Replace cgraph_node_set and varpool_node_set by symtab_node_encoder
|
||||
|
@ -75,6 +75,60 @@
|
||||
#define bit_RDSEED (1 << 18)
|
||||
#define bit_ADX (1 << 19)
|
||||
|
||||
/* Signatures for different CPU implementations as returned in uses
|
||||
of cpuid with level 0. */
|
||||
#define signature_AMD_ebx 0x68747541
|
||||
#define signature_AMD_ecx 0x444d4163
|
||||
#define signature_AMD_edx 0x69746e65
|
||||
|
||||
#define signature_CENTAUR_ebx 0x746e6543
|
||||
#define signature_CENTAUR_ecx 0x736c7561
|
||||
#define signature_CENTAUR_edx 0x48727561
|
||||
|
||||
#define signature_CYRIX_ebx 0x69727943
|
||||
#define signature_CYRIX_ecx 0x64616574
|
||||
#define signature_CYRIX_edx 0x736e4978
|
||||
|
||||
#define signature_INTEL_ebx 0x756e6547
|
||||
#define signature_INTEL_ecx 0x6c65746e
|
||||
#define signature_INTEL_edx 0x49656e69
|
||||
|
||||
#define signature_TM1_ebx 0x6e617254
|
||||
#define signature_TM1_ecx 0x55504361
|
||||
#define signature_TM1_edx 0x74656d73
|
||||
|
||||
#define signature_TM2_ebx 0x756e6547
|
||||
#define signature_TM2_ecx 0x3638784d
|
||||
#define signature_TM2_edx 0x54656e69
|
||||
|
||||
#define signature_NSC_ebx 0x646f6547
|
||||
#define signature_NSC_ecx 0x43534e20
|
||||
#define signature_NSC_edx 0x79622065
|
||||
|
||||
#define signature_NEXGEN_ebx 0x4778654e
|
||||
#define signature_NEXGEN_ecx 0x6e657669
|
||||
#define signature_NEXGEN_edx 0x72446e65
|
||||
|
||||
#define signature_RISE_ebx 0x65736952
|
||||
#define signature_RISE_ecx 0x65736952
|
||||
#define signature_RISE_edx 0x65736952
|
||||
|
||||
#define signature_SIS_ebx 0x20536953
|
||||
#define signature_SIS_ecx 0x20536953
|
||||
#define signature_SIS_edx 0x20536953
|
||||
|
||||
#define signature_UMC_ebx 0x20434d55
|
||||
#define signature_UMC_ecx 0x20434d55
|
||||
#define signature_UMC_edx 0x20434d55
|
||||
|
||||
#define signature_VIA_ebx 0x20414956
|
||||
#define signature_VIA_ecx 0x20414956
|
||||
#define signature_VIA_edx 0x20414956
|
||||
|
||||
#define signature_VORTEX_ebx 0x74726f56
|
||||
#define signature_VORTEX_ecx 0x436f5320
|
||||
#define signature_VORTEX_edx 0x36387865
|
||||
|
||||
#if defined(__i386__) && defined(__PIC__)
|
||||
/* %ebx may be the PIC register. */
|
||||
#if __GNUC__ >= 3
|
||||
|
@ -348,17 +348,6 @@ detect_caches_intel (bool xeon_mp, unsigned max_level,
|
||||
return describe_cache (level1, level2);
|
||||
}
|
||||
|
||||
enum vendor_signatures
|
||||
{
|
||||
SIG_INTEL = 0x756e6547 /* Genu */,
|
||||
SIG_AMD = 0x68747541 /* Auth */
|
||||
};
|
||||
|
||||
enum processor_signatures
|
||||
{
|
||||
SIG_GEODE = 0x646f6547 /* Geod */
|
||||
};
|
||||
|
||||
/* This will be called by the spec parser in gcc.c when it sees
|
||||
a %:local_cpu_detect(args) construct. Currently it will be called
|
||||
with either "arch" or "tune" as argument depending on if -march=native
|
||||
@ -422,7 +411,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
|
||||
|
||||
model = (eax >> 4) & 0x0f;
|
||||
family = (eax >> 8) & 0x0f;
|
||||
if (vendor == SIG_INTEL)
|
||||
if (vendor == signature_INTEL_ebx)
|
||||
{
|
||||
unsigned int extended_model, extended_family;
|
||||
|
||||
@ -483,7 +472,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
|
||||
has_abm = ecx & bit_ABM;
|
||||
has_lwp = ecx & bit_LWP;
|
||||
has_fma4 = ecx & bit_FMA4;
|
||||
if (vendor == SIG_AMD && has_fma4 && has_fma)
|
||||
if (vendor == signature_AMD_ebx && has_fma4 && has_fma)
|
||||
has_fma4 = 0;
|
||||
has_xop = ecx & bit_XOP;
|
||||
has_tbm = ecx & bit_TBM;
|
||||
@ -497,9 +486,9 @@ const char *host_detect_local_cpu (int argc, const char **argv)
|
||||
|
||||
if (!arch)
|
||||
{
|
||||
if (vendor == SIG_AMD)
|
||||
if (vendor == signature_AMD_ebx)
|
||||
cache = detect_caches_amd (ext_level);
|
||||
else if (vendor == SIG_INTEL)
|
||||
else if (vendor == signature_INTEL_ebx)
|
||||
{
|
||||
bool xeon_mp = (family == 15 && model == 6);
|
||||
cache = detect_caches_intel (xeon_mp, max_level,
|
||||
@ -507,7 +496,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (vendor == SIG_AMD)
|
||||
if (vendor == signature_AMD_ebx)
|
||||
{
|
||||
unsigned int name;
|
||||
|
||||
@ -517,7 +506,7 @@ const char *host_detect_local_cpu (int argc, const char **argv)
|
||||
else
|
||||
name = 0;
|
||||
|
||||
if (name == SIG_GEODE)
|
||||
if (name == signature_NSC_ebx)
|
||||
processor = PROCESSOR_GEODE;
|
||||
else if (has_movbe)
|
||||
processor = PROCESSOR_BTVER2;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2012-09-09 Ulrich Drepper <drepper@gmail.com>
|
||||
|
||||
* src/c++11/random.cc (random_device::_M_init): Use new macro
|
||||
signature_INTEL_ebx to check for Intel processors.
|
||||
|
||||
2012-09-06 Thiago Macieira <thiago.macieira@intel.com>
|
||||
|
||||
PR libstdc++/54172
|
||||
|
@ -79,7 +79,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
// Check availability of cpuid and, for now at least, also the
|
||||
// CPU signature for Intel's
|
||||
if (__get_cpuid_max(0, &ebx) > 0 && ebx == 0x756e6547)
|
||||
if (__get_cpuid_max(0, &ebx) > 0 && ebx == signature_INTEL_ebx)
|
||||
{
|
||||
__cpuid(1, eax, ebx, ecx, edx);
|
||||
if (ecx & bit_RDRND)
|
||||
|
Loading…
x
Reference in New Issue
Block a user