aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/config/darwin-protos.h2
-rw-r--r--gcc/config/darwin.c16
-rw-r--r--gcc/config/i386/darwin.h3
-rw-r--r--gcc/config/i386/i386.c3
-rw-r--r--gcc/config/rs6000/darwin.h3
-rw-r--r--gcc/config/rs6000/rs6000-builtin.def3
7 files changed, 34 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 89113ff..1bb112f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/darwin-protos.h b/gcc/config/darwin-protos.h
index 0023099..4a99611 100644
--- a/gcc/config/darwin-protos.h
+++ b/gcc/config/darwin-protos.h
@@ -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);
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 2969f10..5e358b1 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -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)
{
diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h
index 9cf51e3..934ab4b 100644
--- a/gcc/config/i386/darwin.h
+++ b/gcc/config/i386/darwin.h
@@ -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)
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 2511817..aa59ada 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -24337,6 +24337,9 @@ enum ix86_builtins
IX86_BUILTIN_CVTPS2PH,
IX86_BUILTIN_CVTPS2PH256,
+ /* CFString built-in for darwin */
+ IX86_BUILTIN_CFSTRING,
+
IX86_BUILTIN_MAX
};
diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h
index bd4b195..244da00 100644
--- a/gcc/config/rs6000/darwin.h
+++ b/gcc/config/rs6000/darwin.h
@@ -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)
diff --git a/gcc/config/rs6000/rs6000-builtin.def b/gcc/config/rs6000/rs6000-builtin.def
index fd6321d..7bd6b20 100644
--- a/gcc/config/rs6000/rs6000-builtin.def
+++ b/gcc/config/rs6000/rs6000-builtin.def
@@ -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)