From a15a1b518debb23e76370968264408fd2277c4d1 Mon Sep 17 00:00:00 2001 From: mrs Date: Sat, 3 Feb 2007 04:52:51 +0000 Subject: [PATCH] * 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. Radar 4967371 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121534 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/config/darwin9.h | 3 +++ gcc/config/rs6000/rs6000.c | 12 ++++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73626e6e689..9ef2c72d73c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-02-02 Mike Stump + + * 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. + 2007-02-02 Bob Wilson * config/xtensa/xtensa.c (smalloffset_mem_p): Use BASE_REG_P. diff --git a/gcc/config/darwin9.h b/gcc/config/darwin9.h index 3f62677141a..7431cfb1ed7 100644 --- a/gcc/config/darwin9.h +++ b/gcc/config/darwin9.h @@ -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 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 8624c90a889..18c00e0fafa 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -797,7 +797,6 @@ static int rs6000_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, 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, int dest_operand_number, 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; -- 2.11.0