(untyped_call, blockage): New patterns, basically copied from m68k.md.
From-SVN: r4617
This commit is contained in:
parent
9cd1e1aab4
commit
d0d0237754
@ -1854,6 +1854,43 @@
|
||||
return \"calls %2,%1\";
|
||||
")
|
||||
|
||||
;; Call subroutine returning any type.
|
||||
|
||||
(define_expand "untyped_call"
|
||||
[(parallel [(call (match_operand 0 "" "")
|
||||
(const_int 0))
|
||||
(match_operand 1 "" "")
|
||||
(match_operand 2 "" "")])]
|
||||
""
|
||||
"
|
||||
{
|
||||
int i;
|
||||
|
||||
emit_call_insn (gen_call_pop (operands[0], const0_rtx, NULL, const0_rtx));
|
||||
|
||||
for (i = 0; i < XVECLEN (operands[2], 0); i++)
|
||||
{
|
||||
rtx set = XVECEXP (operands[2], 0, i);
|
||||
emit_move_insn (SET_DEST (set), SET_SRC (set));
|
||||
}
|
||||
|
||||
/* The optimizer does not know that the call sets the function value
|
||||
registers we stored in the result block. We avoid problems by
|
||||
claiming that all hard registers are used and clobbered at this
|
||||
point. */
|
||||
emit_insn (gen_blockage ());
|
||||
|
||||
DONE;
|
||||
}")
|
||||
|
||||
;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and
|
||||
;; all of memory. This blocks insns from being moved across this point.
|
||||
|
||||
(define_insn "blockage"
|
||||
[(unspec_volatile [(const_int 0)] 0)]
|
||||
""
|
||||
"")
|
||||
|
||||
(define_insn "return"
|
||||
[(return)]
|
||||
""
|
||||
|
Loading…
Reference in New Issue
Block a user