sparc.c (eligible_for_sibcall_delay): Cannot use leaf sibcall delay slot if flag_pic.
authorJakub Jelinek <jakub@gcc.gnu.org>
Mon, 17 Apr 2000 14:49:41 +0000 (16:49 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 17 Apr 2000 14:49:41 +0000 (16:49 +0200)
* config/sparc/sparc.c (eligible_for_sibcall_delay): Cannot use
leaf sibcall delay slot if flag_pic.
(output_sibcall): Always emit call for leaf sibcall if flag_pic.

From-SVN: r33210

gcc/ChangeLog
gcc/config/sparc/sparc.c

index a2acff67f2b28b5047c9fea22db442ccc7c5c92a..f400c9547cbb735a45698ee30fd5fb9c5c7d7816 100644 (file)
@@ -1,3 +1,9 @@
+2000-04-17  Jakub Jelinek  <jakub@redhat.com>
+
+       * config/sparc/sparc.c (eligible_for_sibcall_delay): Cannot use
+       leaf sibcall delay slot if flag_pic.
+       (output_sibcall): Always emit call for leaf sibcall if flag_pic.
+
 2000-04-17  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * Makefile.in (stmp-fixproto): Acknowledge errors in fixproto.
@@ -44,7 +50,8 @@ Mon Apr 17 14:59:36 MET DST 2000  Jan Hubicka  <jh@suse.cz>
        (ASM_OUTPUT_CASE_END): New, put assembler back into code CSECT.
        (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Remove page check,
        since vector in in the data CSECT.
-       (ASM_OUTPUT_REG_POP, ASM_OUTPUT_REG_PUSH): Restore to correct operation.        * i370.md (Many patterns): Put the length in the XL directives.
+       (ASM_OUTPUT_REG_POP, ASM_OUTPUT_REG_PUSH): Restore to correct operation.
+        * i370.md (Many patterns): Put the length in the XL directives.
        (movdi): Put back STM and MVC in definition.
        (floatsidf2): Correct TARGET_ELF_ABI pattern and add back the LE370
        pattern using the TCA.
index 557079695ec7d27f517660d43e1e017d3259c80b..a2b75121d3ad7f42c7417ebbfb7bde2dc3a27b95 100644 (file)
@@ -2504,7 +2504,7 @@ eligible_for_sibcall_delay (trial)
     {
       /* If the tail call is done using the call instruction,
         we have to restore %o7 in the delay slot.  */
-      if (TARGET_ARCH64 && ! TARGET_CM_MEDLOW)
+      if ((TARGET_ARCH64 && ! TARGET_CM_MEDLOW) || flag_pic)
        return 0;
 
       /* %g1 is used to build the function address */
@@ -3735,7 +3735,7 @@ output_sibcall (insn, call_operand)
 
   if (leaf_regs)
     {
-      int spare_slot = (TARGET_ARCH32 || TARGET_CM_MEDLOW);
+      int spare_slot = ((TARGET_ARCH32 || TARGET_CM_MEDLOW) && ! flag_pic);
       int size = 0;
 
       if ((actual_fsize || ! spare_slot) && delay_slot)