Add new target builtins __builtin_cpu_is_intel_corei7 and __builtin_cpu_is_amdfam10.
* config/i386/i386-cpuinfo.c (__processor_model): Add new members __cpu_is_intel_corei7 and __cpu_is_amdfam10. (get_amd_cpu): Set __cpu_is_amdfam10. (get_intel_cpu): Set __cpu_is_intel_corei7. * gcc/config/i386/i386.c (IX86_BUILTIN_CPU_IS_INTEL_COREI7): New enum value. (IX86_BUILTIN_CPU_IS_AMDFAM10): New enum value. (fold_builtin_cpu): Fold the new builtins. (ix86_init_platform_type_builtins): Make new buitins __builtin_cpu_is_intel_corei7 and __builtin_cpu_is_amdfam10. * testsuite/gcc.target/i386/builtin_target.c (fn1): Call the new builtins. Index: libgcc/config/i386/i386-cpuinfo.c =================================================================== --- libgcc/config/i386/i386-cpuinfo.c (revision 182428) +++ libgcc/config/i386/i386-cpuinfo.c (working copy) @@ -55,9 +55,11 @@ struct __processor_model /* CPU type. */ unsigned int __cpu_is_intel_atom : 1; unsigned int __cpu_is_intel_core2 : 1; + unsigned int __cpu_is_intel_corei7 : 1; unsigned int __cpu_is_intel_corei7_nehalem : 1; unsigned int __cpu_is_intel_corei7_westmere : 1; unsigned int __cpu_is_intel_corei7_sandybridge : 1; + unsigned int __cpu_is_amdfam10 : 1; unsigned int __cpu_is_amdfam10_barcelona : 1; unsigned int __cpu_is_amdfam10_shanghai : 1; unsigned int __cpu_is_amdfam10_istanbul : 1; @@ -74,12 +76,15 @@ get_amd_cpu (unsigned int family, unsigned int mod switch (model) { case 0x2: + __cpu_model.__cpu_is_amdfam10 = 1; __cpu_model.__cpu_is_amdfam10_barcelona = 1; break; case 0x4: + __cpu_model.__cpu_is_amdfam10 = 1; __cpu_model.__cpu_is_amdfam10_shanghai = 1; break; case 0x8: + __cpu_model.__cpu_is_amdfam10 = 1; __cpu_model.__cpu_is_amdfam10_istanbul = 1; break; default: @@ -117,16 +122,19 @@ get_intel_cpu (unsigned int family, unsigned int m case 0x1f: case 0x2e: /* Nehalem. */ + __cpu_model.__cpu_is_intel_corei7 = 1; __cpu_model.__cpu_is_intel_corei7_nehalem = 1; break; case 0x25: case 0x2c: case 0x2f: /* Westmere. */ + __cpu_model.__cpu_is_intel_corei7 = 1; __cpu_model.__cpu_is_intel_corei7_westmere = 1; break; case 0x2a: /* Sandy Bridge. */ + __cpu_model.__cpu_is_intel_corei7 = 1; __cpu_model.__cpu_is_intel_corei7_sandybridge = 1; break; case 0x17: Index: gcc/testsuite/gcc.target/i386/builtin_target.c =================================================================== --- gcc/testsuite/gcc.target/i386/builtin_target.c (revision 182428) +++ gcc/testsuite/gcc.target/i386/builtin_target.c (working copy) @@ -31,12 +31,16 @@ fn1 () return -1; if (__builtin_cpu_is_intel_core2 () < 0) return -1; + if (__builtin_cpu_is_intel_corei7 () < 0) + return -1; if (__builtin_cpu_is_intel_corei7_nehalem () < 0) return -1; if (__builtin_cpu_is_intel_corei7_westmere () < 0) return -1; if (__builtin_cpu_is_intel_corei7_sandybridge () < 0) return -1; + if (__builtin_cpu_is_amdfam10 () < 0) + return -1; if (__builtin_cpu_is_amdfam10_barcelona () < 0) return -1; if (__builtin_cpu_is_amdfam10_shanghai () < 0) Index: gcc/config/i386/i386.c =================================================================== --- gcc/config/i386/i386.c (revision 182428) +++ gcc/config/i386/i386.c (working copy) @@ -24500,9 +24500,11 @@ enum ix86_builtins IX86_BUILTIN_CPU_IS_INTEL, IX86_BUILTIN_CPU_IS_INTEL_ATOM, IX86_BUILTIN_CPU_IS_INTEL_CORE2, + IX86_BUILTIN_CPU_IS_INTEL_COREI7, IX86_BUILTIN_CPU_IS_INTEL_COREI7_NEHALEM, IX86_BUILTIN_CPU_IS_INTEL_COREI7_WESTMERE, IX86_BUILTIN_CPU_IS_INTEL_COREI7_SANDYBRIDGE, + IX86_BUILTIN_CPU_IS_AMDFAM10, IX86_BUILTIN_CPU_IS_AMDFAM10_BARCELONA, IX86_BUILTIN_CPU_IS_AMDFAM10_SHANGHAI, IX86_BUILTIN_CPU_IS_AMDFAM10_ISTANBUL, @@ -25981,9 +25983,11 @@ fold_builtin_cpu (enum ix86_builtins fn_code) M_INTEL, M_INTEL_ATOM, M_INTEL_CORE2, + M_INTEL_COREI7, M_INTEL_COREI7_NEHALEM, M_INTEL_COREI7_WESTMERE, M_INTEL_COREI7_SANDYBRIDGE, + M_AMDFAM10, M_AMDFAM10_BARCELONA, M_AMDFAM10_SHANGHAI, M_AMDFAM10_ISTANBUL, @@ -26068,6 +26072,11 @@ fold_builtin_cpu (enum ix86_builtins fn_code) field = get_field_from_struct (__processor_model_type, M_INTEL_CORE2); which_struct = __cpu_model_var; break; + case IX86_BUILTIN_CPU_IS_INTEL_COREI7: + field = get_field_from_struct (__processor_model_type, + M_INTEL_COREI7); + which_struct = __cpu_model_var; + break; case IX86_BUILTIN_CPU_IS_INTEL_COREI7_NEHALEM: field = get_field_from_struct (__processor_model_type, M_INTEL_COREI7_NEHALEM); @@ -26083,6 +26092,11 @@ fold_builtin_cpu (enum ix86_builtins fn_code) M_INTEL_COREI7_SANDYBRIDGE); which_struct = __cpu_model_var; break; + case IX86_BUILTIN_CPU_IS_AMDFAM10: + field = get_field_from_struct (__processor_model_type, + M_AMDFAM10); + which_struct = __cpu_model_var; + break; case IX86_BUILTIN_CPU_IS_AMDFAM10_BARCELONA: field = get_field_from_struct (__processor_model_type, M_AMDFAM10_BARCELONA); @@ -26171,12 +26185,16 @@ ix86_init_platform_type_builtins (void) IX86_BUILTIN_CPU_IS_INTEL_CORE2, 1); make_platform_builtin ("__builtin_cpu_is_intel", IX86_BUILTIN_CPU_IS_INTEL, 1); + make_platform_builtin ("__builtin_cpu_is_intel_corei7", + IX86_BUILTIN_CPU_IS_INTEL_COREI7, 1); make_platform_builtin ("__builtin_cpu_is_intel_corei7_nehalem", IX86_BUILTIN_CPU_IS_INTEL_COREI7_NEHALEM, 1); make_platform_builtin ("__builtin_cpu_is_intel_corei7_westmere", IX86_BUILTIN_CPU_IS_INTEL_COREI7_WESTMERE, 1); make_platform_builtin ("__builtin_cpu_is_intel_corei7_sandybridge", IX86_BUILTIN_CPU_IS_INTEL_COREI7_SANDYBRIDGE, 1); + make_platform_builtin ("__builtin_cpu_is_amdfam10", + IX86_BUILTIN_CPU_IS_AMDFAM10, 1); make_platform_builtin ("__builtin_cpu_is_amdfam10_barcelona", IX86_BUILTIN_CPU_IS_AMDFAM10_BARCELONA, 1); make_platform_builtin ("__builtin_cpu_is_amdfam10_shanghai", @@ -27761,9 +27779,11 @@ ix86_expand_builtin (tree exp, rtx target, rtx sub case IX86_BUILTIN_CPU_IS_INTEL: case IX86_BUILTIN_CPU_IS_INTEL_ATOM: case IX86_BUILTIN_CPU_IS_INTEL_CORE2: + case IX86_BUILTIN_CPU_IS_INTEL_COREI7: case IX86_BUILTIN_CPU_IS_INTEL_COREI7_NEHALEM: case IX86_BUILTIN_CPU_IS_INTEL_COREI7_WESTMERE: case IX86_BUILTIN_CPU_IS_INTEL_COREI7_SANDYBRIDGE: + case IX86_BUILTIN_CPU_IS_AMDFAM10: case IX86_BUILTIN_CPU_IS_AMDFAM10_BARCELONA: case IX86_BUILTIN_CPU_IS_AMDFAM10_SHANGHAI: case IX86_BUILTIN_CPU_IS_AMDFAM10_ISTANBUL: -- This patch is available for review at http://codereview.appspot.com/5495075