backport: pa.md (reload_inhi, [...]): New patterns.
Backport from mainline: 2009-08-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> * pa.md (reload_inhi, reload_outhi, reload_inqi, reload_outqi): New patterns. * pa.c (emit_move_sequence): Check if address of operand1 is valid for mode mode of operand0 when doing secondary reload for SAR. From-SVN: r153513
This commit is contained in:
parent
f9d5da8f3e
commit
121e863d1d
|
@ -1,3 +1,13 @@
|
|||
2009-10-23 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
Backport from mainline:
|
||||
2009-08-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
* pa.md (reload_inhi, reload_outhi, reload_inqi, reload_outqi): New
|
||||
patterns.
|
||||
* pa.c (emit_move_sequence): Check if address of operand1 is valid
|
||||
for mode mode of operand0 when doing secondary reload for SAR.
|
||||
|
||||
2009-10-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
Backport from mainline:
|
||||
|
|
|
@ -1620,7 +1620,7 @@ emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg)
|
|||
/* D might not fit in 14 bits either; for such cases load D into
|
||||
scratch reg. */
|
||||
if (GET_CODE (operand1) == MEM
|
||||
&& !memory_address_p (Pmode, XEXP (operand1, 0)))
|
||||
&& !memory_address_p (GET_MODE (operand0), XEXP (operand1, 0)))
|
||||
{
|
||||
/* We are reloading the address into the scratch register, so we
|
||||
want to make sure the scratch register is a full register. */
|
||||
|
|
|
@ -3191,6 +3191,40 @@
|
|||
DONE;
|
||||
}")
|
||||
|
||||
;; Handle HImode input reloads requiring a general register as a
|
||||
;; scratch register.
|
||||
(define_expand "reload_inhi"
|
||||
[(set (match_operand:HI 0 "register_operand" "=Z")
|
||||
(match_operand:HI 1 "non_hard_reg_operand" ""))
|
||||
(clobber (match_operand:HI 2 "register_operand" "=&r"))]
|
||||
""
|
||||
"
|
||||
{
|
||||
if (emit_move_sequence (operands, HImode, operands[2]))
|
||||
DONE;
|
||||
|
||||
/* We don't want the clobber emitted, so handle this ourselves. */
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
|
||||
DONE;
|
||||
}")
|
||||
|
||||
;; Handle HImode output reloads requiring a general register as a
|
||||
;; scratch register.
|
||||
(define_expand "reload_outhi"
|
||||
[(set (match_operand:HI 0 "non_hard_reg_operand" "")
|
||||
(match_operand:HI 1 "register_operand" "Z"))
|
||||
(clobber (match_operand:HI 2 "register_operand" "=&r"))]
|
||||
""
|
||||
"
|
||||
{
|
||||
if (emit_move_sequence (operands, HImode, operands[2]))
|
||||
DONE;
|
||||
|
||||
/* We don't want the clobber emitted, so handle this ourselves. */
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
|
||||
DONE;
|
||||
}")
|
||||
|
||||
(define_insn ""
|
||||
[(set (match_operand:HI 0 "move_dest_operand"
|
||||
"=r,r,r,r,r,Q,!*q,!r")
|
||||
|
@ -3315,6 +3349,40 @@
|
|||
DONE;
|
||||
}")
|
||||
|
||||
;; Handle QImode input reloads requiring a general register as a
|
||||
;; scratch register.
|
||||
(define_expand "reload_inqi"
|
||||
[(set (match_operand:QI 0 "register_operand" "=Z")
|
||||
(match_operand:QI 1 "non_hard_reg_operand" ""))
|
||||
(clobber (match_operand:QI 2 "register_operand" "=&r"))]
|
||||
""
|
||||
"
|
||||
{
|
||||
if (emit_move_sequence (operands, QImode, operands[2]))
|
||||
DONE;
|
||||
|
||||
/* We don't want the clobber emitted, so handle this ourselves. */
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
|
||||
DONE;
|
||||
}")
|
||||
|
||||
;; Handle QImode output reloads requiring a general register as a
|
||||
;; scratch register.
|
||||
(define_expand "reload_outqi"
|
||||
[(set (match_operand:QI 0 "non_hard_reg_operand" "")
|
||||
(match_operand:QI 1 "register_operand" "Z"))
|
||||
(clobber (match_operand:QI 2 "register_operand" "=&r"))]
|
||||
""
|
||||
"
|
||||
{
|
||||
if (emit_move_sequence (operands, QImode, operands[2]))
|
||||
DONE;
|
||||
|
||||
/* We don't want the clobber emitted, so handle this ourselves. */
|
||||
emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
|
||||
DONE;
|
||||
}")
|
||||
|
||||
(define_insn ""
|
||||
[(set (match_operand:QI 0 "move_dest_operand"
|
||||
"=r,r,r,r,r,Q,!*q,!r")
|
||||
|
|
Loading…
Reference in New Issue