aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2004-07-09 11:35:48 +0200
committerEric Botcazou <ebotcazou@gcc.gnu.org>2004-07-09 09:35:48 +0000
commit854f240ee0246d13c0a471a1919003b462bde00b (patch)
tree6c30f3fae428bf0ddd28200d8231f1e32c60714b
parent2ad4dcf985bf7b87b56e31a4d7d1f878e8dcea78 (diff)
downloadgcc-854f240ee0246d13c0a471a1919003b462bde00b.zip
gcc-854f240ee0246d13c0a471a1919003b462bde00b.tar.gz
gcc-854f240ee0246d13c0a471a1919003b462bde00b.tar.bz2
sparc.md (return): Rewrite length formula.
* config/sparc/sparc.md (return): Rewrite length formula. * config/sparc/sparc.c (output_return): Pass 1 as 5th argument to final_scan_insn when in a delay slot. (output_sibcall): Likewise. From-SVN: r84352
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/sparc/sparc.c4
-rw-r--r--gcc/config/sparc/sparc.md34
3 files changed, 26 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6de0aaf..e16a2a8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2004-07-09 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * config/sparc/sparc.md (return): Rewrite length formula.
+ * config/sparc/sparc.c (output_return): Pass 1 as 5th
+ argument to final_scan_insn when in a delay slot.
+ (output_sibcall): Likewise.
+
2004-07-09 Richard Earnshaw <rearnsha@arm.com>
* arm.c (arm_cpp_interwork): New variable.
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 26c9e1e..cfaa34a 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -4553,7 +4553,7 @@ output_return (rtx insn)
epilogue_renumber (&pat, 0);
fprintf (asm_out_file, "\treturn\t%%i7+%d\n",
sparc_skip_caller_unimp ? 12 : 8);
- final_scan_insn (delay, asm_out_file, 1, 0, 0, NULL);
+ final_scan_insn (delay, asm_out_file, 1, 0, 1, NULL);
}
else
{
@@ -4614,7 +4614,7 @@ output_sibcall (rtx insn, rtx call_operand)
output_asm_insn ("sethi\t%%hi(%a0), %%g1", operands);
output_asm_insn ("jmp\t%%g1 + %%lo(%a0)", operands);
- final_scan_insn (delay, asm_out_file, 1, 0, 0, NULL);
+ final_scan_insn (delay, asm_out_file, 1, 0, 1, NULL);
PATTERN (delay) = gen_blockage ();
INSN_CODE (delay) = -1;
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index bccb4ea..dc7ef6e 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -7708,23 +7708,23 @@
"* return output_return (insn);"
[(set_attr "type" "return")
(set (attr "length")
- (if_then_else (eq_attr "leaf_function" "true")
- (if_then_else (eq_attr "empty_delay_slot" "true")
- (const_int 2)
- (const_int 1))
- (if_then_else (eq_attr "calls_eh_return" "true")
- (if_then_else (eq_attr "delayed_branch" "true")
- (if_then_else (eq_attr "isa" "v9")
- (const_int 2)
- (const_int 3))
- (if_then_else (eq_attr "isa" "v9")
- (const_int 3)
- (const_int 4)))
- (if_then_else (eq_attr "empty_delay_slot" "true")
- (if_then_else (eq_attr "delayed_branch" "true")
- (const_int 2)
- (const_int 3))
- (const_int 1)))))])
+ (cond [(eq_attr "leaf_function" "true")
+ (if_then_else (eq_attr "empty_delay_slot" "true")
+ (const_int 2)
+ (const_int 1))
+ (eq_attr "calls_eh_return" "true")
+ (if_then_else (eq_attr "delayed_branch" "true")
+ (if_then_else (eq_attr "isa" "v9")
+ (const_int 2)
+ (const_int 3))
+ (if_then_else (eq_attr "isa" "v9")
+ (const_int 3)
+ (const_int 4)))
+ (eq_attr "empty_delay_slot" "true")
+ (if_then_else (eq_attr "delayed_branch" "true")
+ (const_int 2)
+ (const_int 3))
+ ] (const_int 1)))])
;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
;; all of memory. This blocks insns from being moved across this point.