diff options
author | Paul Brook <pbrook@gcc.gnu.org> | 2005-04-01 15:59:09 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2005-04-01 15:59:09 +0000 |
commit | 57ecec57492f5f3c32845a9a2cb12ae45dc0da03 (patch) | |
tree | 7641dd8f80ab012df6d4376aa3c7ac1ee7f23456 /gcc | |
parent | f972113f868313ff7817efc8d837c51a369a5b56 (diff) | |
download | gcc-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.c | 8 | ||||
-rw-r--r-- | gcc/config/arm/arm.h | 7 |
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 |