"
{
if (! reload_in_progress && ! reload_completed
- && GET_CODE (operands[0]) == MEM
- && GET_CODE (operands[1]) == MEM)
- operands[1] = copy_to_mode_reg (QImode, operands[1]);
+ && ! ia64_move_ok (operands[0], operands[1]))
+ operands[1] = force_reg (QImode, operands[1]);
}")
(define_insn "*movqi_internal"
[(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r, m, r,*f,*f")
(match_operand:QI 1 "move_operand" "rO,J,m,rO,*f,rO,*f"))]
- "! memory_operand (operands[0], QImode)
- || ! memory_operand (operands[1], QImode)"
+ "ia64_move_ok (operands[0], operands[1])"
"@
mov %0 = %r1
addl %0 = %1, r0
"
{
if (! reload_in_progress && ! reload_completed
- && GET_CODE (operands[0]) == MEM
- && GET_CODE (operands[1]) == MEM)
- operands[1] = copy_to_mode_reg (HImode, operands[1]);
+ && ! ia64_move_ok (operands[0], operands[1]))
+ operands[1] = force_reg (HImode, operands[1]);
}")
(define_insn "*movhi_internal"
[(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r, m, r,*f,*f")
(match_operand:HI 1 "move_operand" "rO,J,m,rO,*f,rO,*f"))]
- "! memory_operand (operands[0], HImode)
- || !memory_operand (operands[1], HImode)"
+ "ia64_move_ok (operands[0], operands[1])"
"@
mov %0 = %r1
addl %0 = %1, r0
"
{
if (! reload_in_progress && ! reload_completed
- && GET_CODE (operands[0]) == MEM
- && GET_CODE (operands[1]) == MEM)
- operands[1] = copy_to_mode_reg (SImode, operands[1]);
+ && ! ia64_move_ok (operands[0], operands[1]))
+ operands[1] = force_reg (SImode, operands[1]);
}")
(define_insn "*movsi_internal"
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r, m, r,*f,*f")
(match_operand:SI 1 "move_operand" "rO,J,i,m,rO,*f,rO,*f"))]
- "! memory_operand (operands[0], SImode)
- || ! memory_operand (operands[1], SImode)"
+ "ia64_move_ok (operands[0], operands[1])"
"@
mov %0 = %r1
addl %0 = %1, r0
}
if (! reload_in_progress && ! reload_completed
- && GET_CODE (operands[0]) == MEM
- && GET_CODE (operands[1]) == MEM)
- operands[1] = copy_to_mode_reg (DImode, operands[1]);
+ && ! ia64_move_ok (operands[0], operands[1]))
+ operands[1] = force_reg (DImode, operands[1]);
}")
(define_insn "*movdi_internal"
[(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r, m,r,*f,*f,*f,Q, r,*b")
(match_operand:DI 1 "move_operand" "rO,J,i,m,rO,*f,rO,*f,Q,*f,*b,rO"))]
- "! memory_operand (operands[0], DImode)
- || ! memory_operand (operands[1], DImode)"
+ "ia64_move_ok (operands[0], operands[1])"
"@
mov %0 = %r1
addl %0 = %1, r0
"
{
if (! reload_in_progress && ! reload_completed
- && GET_CODE (operands[0]) == MEM
- && GET_CODE (operands[1]) == MEM)
- operands[1] = copy_to_mode_reg (SFmode, operands[1]);
+ && ! ia64_move_ok (operands[0], operands[1]))
+ operands[1] = force_reg (SFmode, operands[1]);
}")
(define_insn "*movsf_internal"
[(set (match_operand:SF 0 "nonimmediate_operand" "=f,f, Q,*r, f,*r,*r, m")
(match_operand:SF 1 "general_operand" "fG,Q,fG,fG,*r,*r, m,*r"))]
- "! memory_operand (operands[0], SFmode)
- || ! memory_operand (operands[1], SFmode)"
+ "ia64_move_ok (operands[0], operands[1])"
"@
mov %0 = %F1
ldfs %0 = %1%P1
"
{
if (! reload_in_progress && ! reload_completed
- && GET_CODE (operands[0]) == MEM
- && GET_CODE (operands[1]) == MEM)
- operands[1] = copy_to_mode_reg (DFmode, operands[1]);
+ && ! ia64_move_ok (operands[0], operands[1]))
+ operands[1] = force_reg (DFmode, operands[1]);
}")
(define_insn "*movdf_internal"
[(set (match_operand:DF 0 "nonimmediate_operand" "=f,f, Q,*r, f,*r,*r, m")
(match_operand:DF 1 "general_operand" "fG,Q,fG,fG,*r,*r, m,*r"))]
- "! memory_operand (operands[0], DFmode)
- || ! memory_operand (operands[1], DFmode)"
+ "ia64_move_ok (operands[0], operands[1])"
"@
mov %0 = %F1
ldfd %0 = %1%P1
"
{
if (! reload_in_progress && ! reload_completed
- && GET_CODE (operands[0]) == MEM
- && GET_CODE (operands[1]) == MEM)
- operands[1] = copy_to_mode_reg (XFmode, operands[1]);
+ && ! ia64_move_ok (operands[0], operands[1]))
+ operands[1] = force_reg (XFmode, operands[1]);
}")
;; ??? There's no easy way to mind volatile acquire/release semantics.
(define_insn "*movxf_internal"
[(set (match_operand:XF 0 "nonimmediate_operand" "=f,f, m")
(match_operand:XF 1 "general_operand" "fG,m,fG"))]
- "! memory_operand (operands[0], XFmode)
- || ! memory_operand (operands[1], XFmode)"
+ "ia64_move_ok (operands[0], operands[1])"
"@
mov %0 = %F1
ldfe %0 = %1%P1