diff options
| author | pbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-04-01 15:59:09 +0000 |
|---|---|---|
| committer | pbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-04-01 15:59:09 +0000 |
| commit | a52972b87189c63bb7cf0cab2bca2575047193cb (patch) | |
| tree | 7641dd8f80ab012df6d4376aa3c7ac1ee7f23456 | |
| parent | 56149c05694f9c3e1b4884c1793f1be0bad025fe (diff) | |
| download | ppe42-gcc-a52972b87189c63bb7cf0cab2bca2575047193cb.tar.gz ppe42-gcc-a52972b87189c63bb7cf0cab2bca2575047193cb.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97402 138bc75d-0d04-0410-961f-82ee72b054a4
| -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 66c36fb9a39..83c5b857ed9 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 9f4cc3c07ad..6e223c875b3 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 |

