aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Brook <pbrook@gcc.gnu.org>2005-04-01 15:59:09 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2005-04-01 15:59:09 +0000
commit57ecec57492f5f3c32845a9a2cb12ae45dc0da03 (patch)
tree7641dd8f80ab012df6d4376aa3c7ac1ee7f23456 /gcc
parentf972113f868313ff7817efc8d837c51a369a5b56 (diff)
downloadgcc-57ecec57492f5f3c32845a9a2cb12ae45dc0da03.zip
gcc-57ecec57492f5f3c32845a9a2cb12ae45dc0da03.tar.gz
gcc-57ecec57492f5f3c32845a9a2cb12ae45dc0da03.tar.bz2
arm.c (thumb_call_via_label): Include space for SP.
2005-04-01 Paul Brook <paul@codesourcery.com> * config/arm/arm.c (thumb_call_via_label): Include space for SP. (arm_output_function_epilogue): Allow call_via_SP. (thumb_call_via_reg, arm_file_end): Ditto. * config/arm/arm.h (struct machine_function): Include space for SP. (thumb_call_via_label): Update declaration. From-SVN: r97402
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/arm/arm.c8
-rw-r--r--gcc/config/arm/arm.h7
2 files changed, 8 insertions, 7 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 66c36fb..83c5b85 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -368,7 +368,7 @@ const char * structure_size_string = NULL;
int arm_structure_size_boundary = DEFAULT_STRUCTURE_SIZE_BOUNDARY;
/* Used for Thumb call_via trampolines. */
-rtx thumb_call_via_label[13];
+rtx thumb_call_via_label[14];
static int thumb_call_reg_needed;
/* Bit values used to identify processor capabilities. */
@@ -9680,7 +9680,7 @@ arm_output_function_epilogue (FILE *file ATTRIBUTE_UNUSED,
/* Emit any call-via-reg trampolines that are needed for v4t support
of call_reg and call_value_reg type insns. */
- for (regno = 0; regno < SP_REGNUM; regno++)
+ for (regno = 0; regno < LR_REGNUM; regno++)
{
rtx label = cfun->machine->call_via[regno];
@@ -13775,7 +13775,7 @@ thumb_call_via_reg (rtx reg)
int regno = REGNO (reg);
rtx *labelp;
- gcc_assert (regno < SP_REGNUM);
+ gcc_assert (regno < LR_REGNUM);
/* If we are in the normal text section we can use a single instance
per compilation unit. If we are doing function sections, then we need
@@ -13921,7 +13921,7 @@ arm_file_end (void)
asm_fprintf (asm_out_file, "\t.code 16\n");
ASM_OUTPUT_ALIGN (asm_out_file, 1);
- for (regno = 0; regno < SP_REGNUM; regno++)
+ for (regno = 0; regno < LR_REGNUM; regno++)
{
rtx label = thumb_call_via_label[regno];
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 9f4cc3c..6e223c8 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -1712,14 +1712,15 @@ typedef struct machine_function GTY(())
register is needed to preserve stack alignment. */
int sibcall_blocked;
/* Labels for per-function Thumb call-via stubs. One per potential calling
- register. We can never call via SP, LR or PC. */
- rtx call_via[13];
+ register. We can never call via LR or PC. We can call via SP if a
+ trampoline happens to be on the top of the stack. */
+ rtx call_via[14];
}
machine_function;
/* As in the machine_function, a global set of call-via labels, for code
that is in text_section(). */
-extern GTY(()) rtx thumb_call_via_label[13];
+extern GTY(()) rtx thumb_call_via_label[14];
/* A C type for declaring a variable that is used as the first argument of
`FUNCTION_ARG' and other related values. For some target machines, the