From: Nathan Froyd Date: Sun, 8 Aug 2010 17:39:49 +0000 (+0000) Subject: rs6000.c (branch_island): Define. X-Git-Tag: releases/gcc-4.6.0~5172 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7c64c7dc154b9a018b137d7679cd3cd8e4d568d;p=thirdparty%2Fgcc.git rs6000.c (branch_island): Define. * config/rs6000/rs6000.c (branch_island): Define. Define a VEC of it. (branch_island_list): Delete. (branch_islands): Declare. (add_compiler_branch_island): Adjust for branch_islands instead of branch_island_list. (macho_branch_islands): Likewise. (no_previous_def): Likewise. (get_prev_label): Likewise. From-SVN: r163011 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e4ce02754ac7..4c565b3fd051 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2010-08-08 Nathan Froyd + + * config/rs6000/rs6000.c (branch_island): Define. Define a VEC of it. + (branch_island_list): Delete. + (branch_islands): Declare. + (add_compiler_branch_island): Adjust for branch_islands instead of + branch_island_list. + (macho_branch_islands): Likewise. + (no_previous_def): Likewise. + (get_prev_label): Likewise. + 2010-08-08 John David Anglin PR boehm-gc/34544 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 0f1f04052e6f..5d465b89449d 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -24499,7 +24499,16 @@ rs6000_fatal_bad_address (rtx op) #if TARGET_MACHO -static tree branch_island_list = 0; +typedef struct branch_island_d { + tree function_name; + tree label_name; + int line_number; +} branch_island; + +DEF_VEC_O(branch_island); +DEF_VEC_ALLOC_O(branch_island,gc); + +static VEC(branch_island,gc) *branch_islands; /* Remember to generate a branch island for far calls to the given function. */ @@ -24508,37 +24517,29 @@ static void add_compiler_branch_island (tree label_name, tree function_name, int line_number) { - tree branch_island = build_tree_list (function_name, label_name); - TREE_TYPE (branch_island) = build_int_cst (NULL_TREE, line_number); - TREE_CHAIN (branch_island) = branch_island_list; - branch_island_list = branch_island; -} + branch_island *bi = VEC_safe_push (branch_island, gc, branch_islands, NULL); -#define BRANCH_ISLAND_LABEL_NAME(BRANCH_ISLAND) TREE_VALUE (BRANCH_ISLAND) -#define BRANCH_ISLAND_FUNCTION_NAME(BRANCH_ISLAND) TREE_PURPOSE (BRANCH_ISLAND) -#define BRANCH_ISLAND_LINE_NUMBER(BRANCH_ISLAND) \ - TREE_INT_CST_LOW (TREE_TYPE (BRANCH_ISLAND)) + bi->function_name = function_name; + bi->label_name = label_name; + bi->line_number = line_number; +} -/* Generate far-jump branch islands for everything on the - branch_island_list. Invoked immediately after the last instruction - of the epilogue has been emitted; the branch-islands must be - appended to, and contiguous with, the function body. Mach-O stubs - are generated in machopic_output_stub(). */ +/* Generate far-jump branch islands for everything recorded in + branch_islands. Invoked immediately after the last instruction of + the epilogue has been emitted; the branch islands must be appended + to, and contiguous with, the function body. Mach-O stubs are + generated in machopic_output_stub(). */ static void macho_branch_islands (void) { char tmp_buf[512]; - tree branch_island; - for (branch_island = branch_island_list; - branch_island; - branch_island = TREE_CHAIN (branch_island)) + while (!VEC_empty (branch_island, branch_islands)) { - const char *label = - IDENTIFIER_POINTER (BRANCH_ISLAND_LABEL_NAME (branch_island)); - const char *name = - IDENTIFIER_POINTER (BRANCH_ISLAND_FUNCTION_NAME (branch_island)); + branch_island *bi = VEC_last (branch_island, branch_islands); + const char *label = IDENTIFIER_POINTER (bi->label_name); + const char *name = IDENTIFIER_POINTER (bi->function_name); char name_buf[512]; /* Cheap copy of the details from the Darwin ASM_OUTPUT_LABELREF(). */ if (name[0] == '*' || name[0] == '&') @@ -24552,7 +24553,7 @@ macho_branch_islands (void) strcat (tmp_buf, label); #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO) if (write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG) - dbxout_stabd (N_SLINE, BRANCH_ISLAND_LINE_NUMBER (branch_island)); + dbxout_stabd (N_SLINE, bi->line_number); #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */ if (flag_pic) { @@ -24589,11 +24590,10 @@ macho_branch_islands (void) output_asm_insn (tmp_buf, 0); #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO) if (write_symbols == DBX_DEBUG || write_symbols == XCOFF_DEBUG) - dbxout_stabd (N_SLINE, BRANCH_ISLAND_LINE_NUMBER (branch_island)); + dbxout_stabd (N_SLINE, bi->line_number); #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */ + VEC_pop (branch_island, branch_islands); } - - branch_island_list = 0; } /* NO_PREVIOUS_DEF checks in the link list whether the function name is @@ -24602,11 +24602,11 @@ macho_branch_islands (void) static int no_previous_def (tree function_name) { - tree branch_island; - for (branch_island = branch_island_list; - branch_island; - branch_island = TREE_CHAIN (branch_island)) - if (function_name == BRANCH_ISLAND_FUNCTION_NAME (branch_island)) + branch_island *bi; + unsigned ix; + + for (ix = 0; VEC_iterate (branch_island, branch_islands, ix, bi); ix++) + if (function_name == bi->function_name) return 0; return 1; } @@ -24617,13 +24617,13 @@ no_previous_def (tree function_name) static tree get_prev_label (tree function_name) { - tree branch_island; - for (branch_island = branch_island_list; - branch_island; - branch_island = TREE_CHAIN (branch_island)) - if (function_name == BRANCH_ISLAND_FUNCTION_NAME (branch_island)) - return BRANCH_ISLAND_LABEL_NAME (branch_island); - return 0; + branch_island *bi; + unsigned ix; + + for (ix = 0; VEC_iterate (branch_island, branch_islands, ix, bi); ix++) + if (function_name == bi->function_name) + return bi->label_name; + return NULL_TREE; } /* INSN is either a function call or a millicode call. It may have an