avr.md ("call_insn"): Handle explicit integer specially.
* config/avr/avr.md ("call_insn"): Handle explicit integer specially. (call_value_insn): Likewise. From-SVN: r79697
This commit is contained in:
parent
9d2a492d5d
commit
829bde683c
2 changed files with 28 additions and 13 deletions
|
@ -1,3 +1,9 @@
|
|||
2004-03-19 Denis Chertykov <denisc@overta.ru>
|
||||
|
||||
* config/avr/avr.md ("call_insn"): Handle explicit integer
|
||||
specially.
|
||||
(call_value_insn): Likewise.
|
||||
|
||||
2004-03-19 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||
|
||||
* tree.c (substitute_in_expr): Rewrite to simplify and be more generic.
|
||||
|
|
|
@ -2086,8 +2086,8 @@
|
|||
"")
|
||||
|
||||
(define_insn "call_insn"
|
||||
[(call (mem:HI (match_operand:HI 0 "nonmemory_operand" "!z,*r,i"))
|
||||
(match_operand:HI 1 "general_operand" "X,X,X"))]
|
||||
[(call (mem:HI (match_operand:HI 0 "nonmemory_operand" "!z,*r,s,n"))
|
||||
(match_operand:HI 1 "general_operand" "X,X,X,X"))]
|
||||
;; We don't need in saving Z register because r30,r31 is a call used registers
|
||||
;; Operand 1 not used on the AVR.
|
||||
"(register_operand (operands[0], HImode) || CONSTANT_P (operands[0]))"
|
||||
|
@ -2104,9 +2104,13 @@
|
|||
AS2 (mov, r31, %B0) CR_TAB
|
||||
\"icall\");
|
||||
}
|
||||
return AS1(%~call,%c0);
|
||||
else if (which_alternative==2)
|
||||
return AS1(%~call,%c0);
|
||||
return (AS2 (ldi,r30,lo8(%0)) CR_TAB
|
||||
AS2 (ldi,r31,hi8(%0)) CR_TAB
|
||||
\"icall\");
|
||||
}"
|
||||
[(set_attr "cc" "clobber,clobber,clobber")
|
||||
[(set_attr "cc" "clobber,clobber,clobber,clobber")
|
||||
(set_attr_alternative "length"
|
||||
[(const_int 1)
|
||||
(if_then_else (eq_attr "mcu_enhanced" "yes")
|
||||
|
@ -2114,17 +2118,17 @@
|
|||
(const_int 3))
|
||||
(if_then_else (eq_attr "mcu_mega" "yes")
|
||||
(const_int 2)
|
||||
(const_int 1))])])
|
||||
(const_int 1))
|
||||
(const_int 3)])])
|
||||
|
||||
(define_insn "call_value_insn"
|
||||
[(set (match_operand 0 "register_operand" "=r,r,r")
|
||||
(call (mem:HI (match_operand:HI 1 "nonmemory_operand" "!z,*r,i"))
|
||||
[(set (match_operand 0 "register_operand" "=r,r,r,r")
|
||||
(call (mem:HI (match_operand:HI 1 "nonmemory_operand" "!z,*r,s,n"))
|
||||
;; We don't need in saving Z register because r30,r31 is a call used registers
|
||||
(match_operand:HI 2 "general_operand" "X,X,X")))]
|
||||
(match_operand:HI 2 "general_operand" "X,X,X,X")))]
|
||||
;; Operand 2 not used on the AVR.
|
||||
"(register_operand (operands[0], VOIDmode) || CONSTANT_P (operands[0]))"
|
||||
"*
|
||||
{
|
||||
"*{
|
||||
if (which_alternative==0)
|
||||
return \"icall\";
|
||||
else if (which_alternative==1)
|
||||
|
@ -2137,9 +2141,13 @@
|
|||
AS2 (mov, r31, %B1) CR_TAB
|
||||
\"icall\");
|
||||
}
|
||||
return AS1(%~call,%c1);
|
||||
else if (which_alternative==2)
|
||||
return AS1(%~call,%c1);
|
||||
return (AS2 (ldi, r30, lo8(%1)) CR_TAB
|
||||
AS2 (ldi, r31, hi8(%1)) CR_TAB
|
||||
\"icall\");
|
||||
}"
|
||||
[(set_attr "cc" "clobber,clobber,clobber")
|
||||
[(set_attr "cc" "clobber,clobber,clobber,clobber")
|
||||
(set_attr_alternative "length"
|
||||
[(const_int 1)
|
||||
(if_then_else (eq_attr "mcu_enhanced" "yes")
|
||||
|
@ -2147,7 +2155,8 @@
|
|||
(const_int 3))
|
||||
(if_then_else (eq_attr "mcu_mega" "yes")
|
||||
(const_int 2)
|
||||
(const_int 1))])])
|
||||
(const_int 1))
|
||||
(const_int 3)])])
|
||||
|
||||
(define_insn "return"
|
||||
[(return)]
|
||||
|
|
Loading…
Add table
Reference in a new issue