aarch64-builtins.c (aarch64_builtin_decls): New.
authorJames Greenhalgh <james.greenhalgh@arm.com>
Mon, 26 Nov 2012 17:48:13 +0000 (17:48 +0000)
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>
Mon, 26 Nov 2012 17:48:13 +0000 (17:48 +0000)
gcc/
* config/aarch64/aarch64-builtins.c (aarch64_builtin_decls): New.
(aarch64_init_simd_builtins): Store declaration after builtin
initialisation.
(aarch64_builtin_decl): New.
* config/aarch64/aarch64-protos.h (aarch64_builtin_decl): New.
* config/aarch64/aarch64.c (TARGET_BUILTIN_DECL): Define.

From-SVN: r193823

gcc/ChangeLog
gcc/config/aarch64/aarch64-builtins.c
gcc/config/aarch64/aarch64-protos.h
gcc/config/aarch64/aarch64.c

index 80f9b03d45f2f23e6c77b0b5313120464d4397a3..51240799139b987d36bcf2e5a2eb6d34d1ef9a24 100644 (file)
@@ -1,3 +1,12 @@
+2012-11-26  James Greenhalgh  <james.greenhalgh@arm.com>
+
+       * config/aarch64/aarch64-builtins.c (aarch64_builtin_decls): New.
+       (aarch64_init_simd_builtins): Store declaration after builtin
+       initialisation.
+       (aarch64_builtin_decl): New.
+       * config/aarch64/aarch64-protos.h (aarch64_builtin_decl): New.
+       * config/aarch64/aarch64.c (TARGET_BUILTIN_DECL): Define.
+
 2012-11-26  Steven Bosscher  <steven@gcc.gnu.org>
 
        * doc/invoke.texi: Remove -dv documentation.  Fix up graph dump related
index 0ce57d311f60a77591e7e3002a7d6c1b0f947b4c..2cdda0fc03c41bb0ada98cce0c0931324bc02064 100644 (file)
@@ -304,6 +304,8 @@ enum aarch64_builtins
 #undef VAR10
 #undef VAR11
 
+static GTY(()) tree aarch64_builtin_decls[AARCH64_BUILTIN_MAX];
+
 #define NUM_DREG_TYPES 6
 #define NUM_QREG_TYPES 6
 
@@ -611,6 +613,7 @@ aarch64_init_simd_builtins (void)
       };
       char namebuf[60];
       tree ftype = NULL;
+      tree fndecl = NULL;
       int is_load = 0;
       int is_store = 0;
 
@@ -951,8 +954,9 @@ aarch64_init_simd_builtins (void)
       snprintf (namebuf, sizeof (namebuf), "__builtin_aarch64_%s%s",
                d->name, modenames[d->mode]);
 
-      add_builtin_function (namebuf, ftype, fcode, BUILT_IN_MD, NULL,
-                           NULL_TREE);
+      fndecl = add_builtin_function (namebuf, ftype, fcode, BUILT_IN_MD,
+                                    NULL, NULL_TREE);
+      aarch64_builtin_decls[fcode] = fndecl;
     }
 }
 
@@ -963,6 +967,15 @@ aarch64_init_builtins (void)
     aarch64_init_simd_builtins ();
 }
 
+tree
+aarch64_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
+{
+  if (code >= AARCH64_BUILTIN_MAX)
+    return error_mark_node;
+
+  return aarch64_builtin_decls[code];
+}
+
 typedef enum
 {
   SIMD_ARG_COPY_TO_REG,
index b5a32b39cf129f193e07ee5552d3012a1a023769..ab84257d54c3ff99d8e636a62f7ea2acd638c666 100644 (file)
@@ -234,5 +234,6 @@ rtx aarch64_expand_builtin (tree exp,
                            rtx subtarget ATTRIBUTE_UNUSED,
                            enum machine_mode mode ATTRIBUTE_UNUSED,
                            int ignore ATTRIBUTE_UNUSED);
+tree aarch64_builtin_decl (unsigned, bool ATTRIBUTE_UNUSED);
 
 #endif /* GCC_AARCH64_PROTOS_H */
index d4708bfa6760dce0a094f5c7bbba68218d2fad8f..6241ba549a4997eedd36cf0f0480fd65e5f9906b 100644 (file)
@@ -6736,6 +6736,9 @@ aarch64_c_mode_for_suffix (char suffix)
 #undef TARGET_CLASS_MAX_NREGS
 #define TARGET_CLASS_MAX_NREGS aarch64_class_max_nregs
 
+#undef TARGET_BUILTIN_DECL
+#define TARGET_BUILTIN_DECL aarch64_builtin_decl
+
 #undef  TARGET_EXPAND_BUILTIN
 #define TARGET_EXPAND_BUILTIN aarch64_expand_builtin