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

Reply via email to