pa.md (prologue, epilogue): New define_expands.
* pa.md (prologue, epilogue): New define_expands. (return_internal, call_profiler): New define_insns. From-SVN: r4023
This commit is contained in:
parent
ff78f7732c
commit
b0213198c9
@ -2580,6 +2580,47 @@
|
|||||||
"bv%* 0(%%r2)"
|
"bv%* 0(%%r2)"
|
||||||
[(set_attr "type" "branch")])
|
[(set_attr "type" "branch")])
|
||||||
|
|
||||||
|
;; 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:SI 2))
|
||||||
|
(return)]
|
||||||
|
""
|
||||||
|
"bv%* 0(%%r2)"
|
||||||
|
[(set_attr "type" "branch")])
|
||||||
|
|
||||||
|
(define_expand "prologue"
|
||||||
|
[(const_int 0)]
|
||||||
|
""
|
||||||
|
"hppa_expand_prologue ();DONE;")
|
||||||
|
|
||||||
|
(define_expand "epilogue"
|
||||||
|
[(return)]
|
||||||
|
""
|
||||||
|
"
|
||||||
|
{
|
||||||
|
/* Try to use the trivial return first. Else use the full
|
||||||
|
epilogue. */
|
||||||
|
if (hppa_can_use_return_insn_p ())
|
||||||
|
emit_jump_insn (gen_return ());
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hppa_expand_epilogue ();
|
||||||
|
emit_jump_insn (gen_return_internal ());
|
||||||
|
}
|
||||||
|
DONE;
|
||||||
|
}")
|
||||||
|
|
||||||
|
;; Special because we use the value placed in %r2 by the bl instruction
|
||||||
|
;; from within its delay slot to set the value for the 2nd parameter to
|
||||||
|
;; the call.
|
||||||
|
(define_insn "call_profiler"
|
||||||
|
[(unspec_volatile [(const_int 0)] 0)
|
||||||
|
(use (match_operand:SI 0 "const_int_operand" ""))]
|
||||||
|
""
|
||||||
|
"bl _mcount,%%r2\;ldo %0(%%r2),%%r25"
|
||||||
|
[(set_attr "length" "2")])
|
||||||
|
|
||||||
(define_insn "jump"
|
(define_insn "jump"
|
||||||
[(set (pc) (label_ref (match_operand 0 "" "")))]
|
[(set (pc) (label_ref (match_operand 0 "" "")))]
|
||||||
""
|
""
|
||||||
|
Loading…
Reference in New Issue
Block a user