aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2000-12-15 09:09:41 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2000-12-15 09:09:41 +0000
commitb33493e3f3257f9b77409659a585bcf86484d123 (patch)
treeac2831caf34906c434220747ac02464ced602994 /gcc/function.c
parent1e0cdc10363525fb7688ab6fc8654a5c15248795 (diff)
downloadgcc-b33493e3f3257f9b77409659a585bcf86484d123.zip
gcc-b33493e3f3257f9b77409659a585bcf86484d123.tar.gz
gcc-b33493e3f3257f9b77409659a585bcf86484d123.tar.bz2
function.c (adjust_trampoline_addr): New function.
* function.c (adjust_trampoline_addr): New function. (trampoline_address): Call it instead of round_trampoline_addr(). * tm.texi (TRAMPOLINE_ADJUST_ADDRESS): Document it. From-SVN: r38279
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 0799216..d2ce5b5 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -279,6 +279,7 @@ static void pad_below PARAMS ((struct args_size *, enum machine_mode,
tree));
#endif
static rtx round_trampoline_addr PARAMS ((rtx));
+static rtx adjust_trampoline_addr PARAMS ((rtx));
static tree *identify_blocks_1 PARAMS ((rtx, tree *, tree *, tree *));
static void reorder_blocks_1 PARAMS ((rtx, tree, varray_type *));
static tree blocks_nreverse PARAMS ((tree));
@@ -5553,7 +5554,7 @@ trampoline_address (function)
for (link = trampoline_list; link; link = TREE_CHAIN (link))
if (TREE_PURPOSE (link) == function)
return
- round_trampoline_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0));
+ adjust_trampoline_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0));
for (fp = outer_function_chain; fp; fp = fp->next)
for (link = fp->x_trampoline_list; link; link = TREE_CHAIN (link))
@@ -5561,7 +5562,7 @@ trampoline_address (function)
{
tramp = fix_lexical_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0),
function);
- return round_trampoline_addr (tramp);
+ return adjust_trampoline_addr (tramp);
}
/* None exists; we must make one. */
@@ -5612,7 +5613,7 @@ trampoline_address (function)
}
tramp = fix_lexical_addr (XEXP (tramp, 0), function);
- return round_trampoline_addr (tramp);
+ return adjust_trampoline_addr (tramp);
}
/* Given a trampoline address,
@@ -5634,6 +5635,21 @@ round_trampoline_addr (tramp)
#endif
return tramp;
}
+
+/* Given a trampoline address, round it then apply any
+ platform-specific adjustments so that the result can be used for a
+ function call . */
+
+static rtx
+adjust_trampoline_addr (tramp)
+ rtx tramp;
+{
+ tramp = round_trampoline_addr (tramp);
+#ifdef TRAMPOLINE_ADJUST_ADDRESS
+ TRAMPOLINE_ADJUST_ADDRESS (tramp);
+#endif
+ return tramp;
+}
/* Put all this function's BLOCK nodes including those that are chained
onto the first block into a vector, and return it.