Don't generate branch islands on ppc darwin9
Mike Stump
mrs@apple.com
Sat Feb 3 04:47:00 GMT 2007
We don't need to generate branch islands for ppc-darwin9 any more as
the linker will now do this for us. Kernel extensions still need
islands as the kernel loader won't generate them.
Checked into mainline. I want to put this into 4.2, but it looks like
I'll have to drag just a little more work to get it to fit in.
For those with darwin9, I'm using 9A357.
2007-02-02 Mike Stump <mrs@apple.com>
* config/darwin9.h (DARWIN_LINKER_GENERATES_ISLANDS): Add.
* config/rs6000/rs6000.c (DARWIN_GENERATE_ISLANDS): Add.
(output_call): Use DARWIN_GENERATE_ISLANDS to decide when to
generate a branch island.
Doing diffs in .:
--- ./config/darwin9.h.~1~ 2006-12-20 14:03:35.000000000 -0800
+++ ./config/darwin9.h 2007-02-02 15:24:04.000000000 -0800
@@ -17,3 +17,6 @@
%{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
%{.c|.cc|.C|.cpp|.c++|.CPP|.m|.mm: \
%{g*:%{!gstabs*:%{!g0: dsymutil %{o*:%*}%{!o:a.out}}}}}}}}}}}}"
+
+/* The linker can generate branch islands. */
+#define DARWIN_LINKER_GENERATES_ISLANDS 1
--- ./config/rs6000/rs6000.c.~1~ 2007-02-02 13:53:09.000000000 -0800
+++ ./config/rs6000/rs6000.c 2007-02-02 16:03:37.000000000 -0800
@@ -797,7 +797,6 @@ static int rs6000_arg_partial_bytes (CUM
static const char *invalid_arg_for_unprototyped_fn (tree, tree, tree);
#if TARGET_MACHO
static void macho_branch_islands (void);
-static void add_compiler_branch_island (tree, tree, int);
static int no_previous_def (tree function_name);
static tree get_prev_label (tree function_name);
static void rs6000_darwin_file_start (void);
@@ -19076,6 +19075,14 @@ get_prev_label (tree function_name)
return 0;
}
+#ifndef DARWIN_LINKER_GENERATES_ISLANDS
+#define DARWIN_LINKER_GENERATES_ISLANDS 0
+#endif
+
+/* KEXTs still need branch islands. */
+#define DARWIN_GENERATE_ISLANDS (!DARWIN_LINKER_GENERATES_ISLANDS \
+ || flag_mkernel || flag_apple_kext)
+
/* INSN is either a function call or a millicode call. It may have an
unconditional jump in its delay slot.
@@ -19086,7 +19093,8 @@ output_call (rtx insn, rtx *operands, in
int cookie_operand_number)
{
static char buf[256];
- if (GET_CODE (operands[dest_operand_number]) == SYMBOL_REF
+ if (DARWIN_GENERATE_ISLANDS
+ && GET_CODE (operands[dest_operand_number]) == SYMBOL_REF
&& (INTVAL (operands[cookie_operand_number]) & CALL_LONG))
{
tree labelname;
--------------
More information about the Gcc-patches
mailing list