From a52972b87189c63bb7cf0cab2bca2575047193cb Mon Sep 17 00:00:00 2001 From: pbrook Date: Fri, 1 Apr 2005 15:59:09 +0000 Subject: [PATCH] 2005-04-01 Paul Brook * 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 --- gcc/config/arm/arm.c | 8 ++++---- 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 -- 2.11.4.GIT