PR target/47822
authormrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Feb 2011 21:38:21 +0000 (21:38 +0000)
committermrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Feb 2011 21:38:21 +0000 (21:38 +0000)
* config/darwin-protos.h (darwin_init_cfstring_builtins): Return a
tree so we can get save the type.
* config/i386/darwin.h (SUBTARGET_INIT_BUILTINS): Reserve builtin slot
for CFString instead of trying to use past the end of the builtins.
* config/i386/i386.c (IX86_BUILTIN_CFSTRING): Likewise.
* config/rs6000/rs6000-builtin.def (RS6000_BUILTIN_CFSTRING): Likewise.
* config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): Likewise.
* config/darwin.c (DARWIN_BUILTIN_CFSTRINGMAKECONSTANTSTRING):
Rename to darwin_builtin_cfstring.
(darwin_init_cfstring_builtins): Return the built type.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170376 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/darwin-protos.h
gcc/config/darwin.c
gcc/config/i386/darwin.h
gcc/config/i386/i386.c
gcc/config/rs6000/darwin.h
gcc/config/rs6000/rs6000-builtin.def

index 89113ff..1bb112f 100644 (file)
@@ -1,3 +1,17 @@
+2011-02-21  Mike Stump  <mikestump@comcast.net>
+
+       PR target/47822
+       * config/darwin-protos.h (darwin_init_cfstring_builtins): Return a
+       tree so we can get save the type.
+       * config/i386/darwin.h (SUBTARGET_INIT_BUILTINS): Reserve builtin slot
+       for CFString instead of trying to use past the end of the builtins.
+       * config/i386/i386.c (IX86_BUILTIN_CFSTRING): Likewise.
+       * config/rs6000/rs6000-builtin.def (RS6000_BUILTIN_CFSTRING): Likewise.
+       * config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): Likewise.
+       * config/darwin.c (DARWIN_BUILTIN_CFSTRINGMAKECONSTANTSTRING):
+       Rename to darwin_builtin_cfstring.
+       (darwin_init_cfstring_builtins): Return the built type.
+
 2011-02-21  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/47840
index 0023099..4a99611 100644 (file)
@@ -110,7 +110,7 @@ extern void darwin_asm_output_aligned_decl_common (FILE *, tree, const char *,
 extern bool darwin_binds_local_p (const_tree);
 extern void darwin_cpp_builtins (struct cpp_reader *);
 
-extern void darwin_init_cfstring_builtins (unsigned);
+extern tree darwin_init_cfstring_builtins (unsigned);
 extern tree darwin_fold_builtin (tree, int, tree *, bool);
 extern tree darwin_objc_construct_string (tree);
 extern bool darwin_cfstring_p (tree);
index 2969f10..5e358b1 100644 (file)
@@ -3001,7 +3001,7 @@ static GTY(()) tree pccfstring_type_node = NULL_TREE;
 static GTY(()) tree pcint_type_node = NULL_TREE;
 static GTY(()) tree pcchar_type_node = NULL_TREE;
 
-static enum built_in_function DARWIN_BUILTIN_CFSTRINGMAKECONSTANTSTRING;
+static enum built_in_function darwin_builtin_cfstring;
 
 /* Store all constructed constant CFStrings in a hash table so that
    they get uniqued properly.  */
@@ -3031,14 +3031,14 @@ add_builtin_field_decl (tree type, const char *name, tree **chain)
   return field;
 }
 
-void
-darwin_init_cfstring_builtins (unsigned first_avail)
+tree
+darwin_init_cfstring_builtins (unsigned builtin_cfstring)
 {
   tree cfsfun, fields, pccfstring_ftype_pcchar;
   tree *chain = NULL;
 
-  DARWIN_BUILTIN_CFSTRINGMAKECONSTANTSTRING = 
-                       (enum built_in_function) first_avail;
+  darwin_builtin_cfstring = 
+    (enum built_in_function) builtin_cfstring;
   
   /* struct __builtin_CFString {
        const int *isa;         (will point at
@@ -3084,7 +3084,7 @@ darwin_init_cfstring_builtins (unsigned first_avail)
   DECL_LANG_SPECIFIC (cfsfun) = NULL;
   (*lang_hooks.dup_lang_specific_decl) (cfsfun);
   DECL_BUILT_IN_CLASS (cfsfun) = BUILT_IN_MD;
-  DECL_FUNCTION_CODE (cfsfun) = DARWIN_BUILTIN_CFSTRINGMAKECONSTANTSTRING;
+  DECL_FUNCTION_CODE (cfsfun) = darwin_builtin_cfstring;
   lang_hooks.builtin_function (cfsfun);
 
   /* extern int __CFConstantStringClassReference[];  */
@@ -3100,6 +3100,8 @@ darwin_init_cfstring_builtins (unsigned first_avail)
   
   /* Initialize the hash table used to hold the constant CFString objects.  */
   cfstring_htab = htab_create_ggc (31, cfstring_hash, cfstring_eq, NULL);
+
+  return cfstring_type_node;
 }
 
 tree
@@ -3108,7 +3110,7 @@ darwin_fold_builtin (tree fndecl, int n_args, tree *argp,
 {
   unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
   
-  if (fcode == DARWIN_BUILTIN_CFSTRINGMAKECONSTANTSTRING)
+  if (fcode == darwin_builtin_cfstring)
     {
       if (!darwin_constant_cfstrings)
        {
index 9cf51e3..934ab4b 100644 (file)
@@ -308,7 +308,8 @@ do {                                                                        \
 #undef  SUBTARGET_INIT_BUILTINS
 #define SUBTARGET_INIT_BUILTINS                                        \
 do {                                                           \
-  darwin_init_cfstring_builtins ((unsigned) (IX86_BUILTIN_MAX));\
+  ix86_builtins[(int) IX86_BUILTIN_CFSTRING]                   \
+    = darwin_init_cfstring_builtins ((unsigned) (IX86_BUILTIN_CFSTRING));      \
   darwin_rename_builtins ();                                   \
 } while(0)
 
index 2511817..aa59ada 100644 (file)
@@ -24337,6 +24337,9 @@ enum ix86_builtins
   IX86_BUILTIN_CVTPS2PH,
   IX86_BUILTIN_CVTPS2PH256,
 
+  /* CFString built-in for darwin */
+  IX86_BUILTIN_CFSTRING,
+
   IX86_BUILTIN_MAX
 };
 
index bd4b195..244da00 100644 (file)
@@ -433,5 +433,6 @@ extern int darwin_emit_branch_islands;
 #define SUBTARGET_INIT_BUILTINS                                                \
 do {                                                                   \
   darwin_patch_builtins ();                                            \
-  darwin_init_cfstring_builtins ((unsigned) (RS6000_BUILTIN_COUNT));   \
+  rs6000_builtin_decls[(unsigned) (RS6000_BUILTIN_CFSTRING)]           \
+    = darwin_init_cfstring_builtins ((unsigned) (RS6000_BUILTIN_CFSTRING)); \
 } while(0)
index fd6321d..7bd6b20 100644 (file)
@@ -1015,3 +1015,6 @@ RS6000_BUILTIN(RS6000_BUILTIN_RECIPF,                     RS6000_BTC_FP_PURE)
 RS6000_BUILTIN(RS6000_BUILTIN_RSQRTF,                  RS6000_BTC_FP_PURE)
 RS6000_BUILTIN(RS6000_BUILTIN_RSQRT,                   RS6000_BTC_FP_PURE)
 RS6000_BUILTIN(RS6000_BUILTIN_BSWAP_HI,                        RS6000_BTC_CONST)
+
+/* Darwin CfString builtin.  */
+RS6000_BUILTIN(RS6000_BUILTIN_CFSTRING,                        RS6000_BTC_MISC)