diff options
| author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-30 20:27:57 +0000 |
|---|---|---|
| committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-01-30 20:27:57 +0000 |
| commit | cdd2135bed286022d9ab344178d6d7ba23e2eb71 (patch) | |
| tree | c2542d820daff8a5a2c194680c8513ce6d319c79 | |
| parent | 89c4e055995f0e69d99fdaa2741e69cc5e32910b (diff) | |
| download | ppe42-gcc-cdd2135bed286022d9ab344178d6d7ba23e2eb71.tar.gz ppe42-gcc-cdd2135bed286022d9ab344178d6d7ba23e2eb71.zip | |
* alpha.c (alpha_expand_epilogue): Don't emit the return insn.
* alpha.h (EPILOGUE_USES): New. Mark $26 live.
* alpha.md (return): Turn into an expander.
(return_internal): Don't use $26.
(epilogue): Emit the return insn.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31702 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 8 | ||||
| -rw-r--r-- | gcc/config/alpha/alpha.c | 3 | ||||
| -rw-r--r-- | gcc/config/alpha/alpha.h | 4 | ||||
| -rw-r--r-- | gcc/config/alpha/alpha.md | 16 |
4 files changed, 18 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8050ecd9e87..07875c83f02 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2000-01-30 Richard Henderson <rth@cygnus.com> + * alpha.c (alpha_expand_epilogue): Don't emit the return insn. + * alpha.h (EPILOGUE_USES): New. Mark $26 live. + * alpha.md (return): Turn into an expander. + (return_internal): Don't use $26. + (epilogue): Emit the return insn. + +2000-01-30 Richard Henderson <rth@cygnus.com> + * alpha.md (negtf2, abstf2): Fix word order thinko. (extendsftf2): New. (trunctfsf2): Avoid intermediate rounding errors. diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 6e4dddeb4f6..36f831d648c 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -4721,9 +4721,6 @@ alpha_expand_epilogue () gen_rtx_REG (DImode, vms_save_fp_regno))); } } - - /* Return. */ - emit_jump_insn (gen_return_internal ()); } /* Output the rest of the textual info surrounding the epilogue. */ diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index ad45596f0bb..1d64f37e4bd 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -1267,6 +1267,10 @@ struct machine_function No definition is equivalent to always zero. */ #define EXIT_IGNORE_STACK 1 + +/* Define registers used by the epilogue and return instruction. */ + +#define EPILOGUE_USES(REGNO) ((REGNO) == 26) /* Output assembler code for a block containing the constant parts of a trampoline, leaving space for the variable parts. diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index 74140329839..03e499dba01 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -3984,17 +3984,13 @@ "br $31,%l0" [(set_attr "type" "ibr")]) -(define_insn "return" +(define_expand "return" [(return)] "direct_return ()" - "ret $31,($26),1" - [(set_attr "type" "ibr")]) + "") -;; Use a different pattern for functions which have non-trivial -;; epilogues so as not to confuse jump and reorg. -(define_insn "return_internal" - [(use (reg:DI 26)) - (return)] +(define_insn "*return_internal" + [(return)] "" "ret $31,($26),1" [(set_attr "type" "ibr")]) @@ -5431,9 +5427,9 @@ "mov %1,%0") (define_expand "epilogue" - [(clobber (const_int 0))] + [(return)] "" - "alpha_expand_epilogue (); DONE;") + "alpha_expand_epilogue ();") (define_expand "eh_epilogue" [(use (match_operand:DI 0 "register_operand" "r")) |

