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)"
|
||||
[(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"
|
||||
[(set (pc) (label_ref (match_operand 0 "" "")))]
|
||||
""
|
||||
|
Loading…
Reference in New Issue
Block a user