OSDN Git Service

2005-04-01 Paul Brook <paul@codesourcery.com>
authorpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Apr 2005 15:59:09 +0000 (15:59 +0000)
committerpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Apr 2005 15:59:09 +0000 (15:59 +0000)
* 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
gcc/config/arm/arm.h

index 66c36fb..83c5b85 100644 (file)
@@ -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];
 
index 9f4cc3c..6e223c8 100644 (file)
@@ -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