Commit 2fd74bff by John David Anglin Committed by John David Anglin

pa.md (reload_inhi, [...]): New patterns.

	* 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: r150951
parent d3944013
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-08-19 Jakub Jelinek <jakub@redhat.com> 2009-08-19 Jakub Jelinek <jakub@redhat.com>
PR middle-end/41123 PR middle-end/41123
......
...@@ -1619,7 +1619,7 @@ emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg) ...@@ -1619,7 +1619,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 /* D might not fit in 14 bits either; for such cases load D into
scratch reg. */ scratch reg. */
if (GET_CODE (operand1) == MEM 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 /* We are reloading the address into the scratch register, so we
want to make sure the scratch register is a full register. */ want to make sure the scratch register is a full register. */
......
...@@ -2740,6 +2740,40 @@ ...@@ -2740,6 +2740,40 @@
DONE; 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 "" (define_insn ""
[(set (match_operand:HI 0 "move_dest_operand" [(set (match_operand:HI 0 "move_dest_operand"
"=r,r,r,r,r,Q,!*q,!r") "=r,r,r,r,r,Q,!*q,!r")
...@@ -2864,6 +2898,40 @@ ...@@ -2864,6 +2898,40 @@
DONE; 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 "" (define_insn ""
[(set (match_operand:QI 0 "move_dest_operand" [(set (match_operand:QI 0 "move_dest_operand"
"=r,r,r,r,r,Q,!*q,!r") "=r,r,r,r,r,Q,!*q,!r")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment