(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\";
|
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"
|
(define_insn "return"
|
||||||
[(return)]
|
[(return)]
|
||||||
""
|
""
|
||||||
|
|
Loading…
Reference in New Issue