Commit fb81d7ce by Richard Kenner

(movsi matcher): Add nop for moving special register to itself for !TARGET_POWER.

(movsi matcher): Add nop for moving special register to itself
for !TARGET_POWER.
(movhi and movqi matcher): Likewise and add mtjmpr attribute.
Separate MQ from CTR and LR target registers for TARGET_POWER.

From-SVN: r7736
parent a2613d10
...@@ -3574,8 +3574,8 @@ ...@@ -3574,8 +3574,8 @@
[(set_attr "type" "*,load,*,*,*,*,*,mtjmpr,*")]) [(set_attr "type" "*,load,*,*,*,*,*,mtjmpr,*")])
(define_insn "" (define_insn ""
[(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,r,r,r,*h") [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,r,r,r,*h,*h")
(match_operand:SI 1 "input_operand" "r,m,r,I,J,*h,r"))] (match_operand:SI 1 "input_operand" "r,m,r,I,J,*h,r,0"))]
"! TARGET_POWER && (gpc_reg_operand (operands[0], SImode) "! TARGET_POWER && (gpc_reg_operand (operands[0], SImode)
|| gpc_reg_operand (operands[1], SImode))" || gpc_reg_operand (operands[1], SImode))"
"@ "@
...@@ -3585,8 +3585,9 @@ ...@@ -3585,8 +3585,9 @@
li %0,%1 li %0,%1
lis %0,%u1 lis %0,%u1
mf%1 %0 mf%1 %0
mt%0 %1" mt%0 %1
[(set_attr "type" "*,load,*,*,*,*,mtjmpr")]) cror 0,0,0"
[(set_attr "type" "*,load,*,*,*,*,mtjmpr,*")])
;; Split a load of a large constant into the appropriate two-insn ;; Split a load of a large constant into the appropriate two-insn
;; sequence. ;; sequence.
...@@ -3637,8 +3638,8 @@ ...@@ -3637,8 +3638,8 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r,r,*h,*h") [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r,r,*q,*c*l,*h")
(match_operand:HI 1 "input_operand" "r,m,r,i,*h,r,0"))] (match_operand:HI 1 "input_operand" "r,m,r,i,*h,r,r,0"))]
"TARGET_POWER && (gpc_reg_operand (operands[0], HImode) "TARGET_POWER && (gpc_reg_operand (operands[0], HImode)
|| gpc_reg_operand (operands[1], HImode))" || gpc_reg_operand (operands[1], HImode))"
"@ "@
...@@ -3648,12 +3649,13 @@ ...@@ -3648,12 +3649,13 @@
{cal %0,%w1(0)|li %0,%w1} {cal %0,%w1(0)|li %0,%w1}
mf%1 %0 mf%1 %0
mt%0 %1 mt%0 %1
mt%0 %1
cror 0,0,0" cror 0,0,0"
[(set_attr "type" "*,load,*,*,*,*,*")]) [(set_attr "type" "*,load,*,*,*,*,mtjmpr,*")])
(define_insn "" (define_insn ""
[(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r,r,*h") [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,r,r,*h,*h")
(match_operand:HI 1 "input_operand" "r,m,r,i,*h,r"))] (match_operand:HI 1 "input_operand" "r,m,r,i,*h,r,0"))]
"! TARGET_POWER && (gpc_reg_operand (operands[0], HImode) "! TARGET_POWER && (gpc_reg_operand (operands[0], HImode)
|| gpc_reg_operand (operands[1], HImode))" || gpc_reg_operand (operands[1], HImode))"
"@ "@
...@@ -3662,8 +3664,9 @@ ...@@ -3662,8 +3664,9 @@
sth%U0%X0 %1,%0 sth%U0%X0 %1,%0
li %0,%w1 li %0,%w1
mf%1 %0 mf%1 %0
mt%0 %1" mt%0 %1
[(set_attr "type" "*,load,*,*,*,*")]) cror 0,0,0"
[(set_attr "type" "*,load,*,*,*,mtjmpr,*")])
(define_expand "movqi" (define_expand "movqi"
[(set (match_operand:QI 0 "general_operand" "") [(set (match_operand:QI 0 "general_operand" "")
...@@ -3685,8 +3688,8 @@ ...@@ -3685,8 +3688,8 @@
}") }")
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r,r,*h,*h") [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r,r,*q,*c*l,*h")
(match_operand:QI 1 "input_operand" "r,m,r,i,*h,r,0"))] (match_operand:QI 1 "input_operand" "r,m,r,i,*h,r,r,0"))]
"TARGET_POWER && (gpc_reg_operand (operands[0], QImode) "TARGET_POWER && (gpc_reg_operand (operands[0], QImode)
|| gpc_reg_operand (operands[1], QImode))" || gpc_reg_operand (operands[1], QImode))"
"@ "@
...@@ -3696,12 +3699,13 @@ ...@@ -3696,12 +3699,13 @@
{cal %0,%1(0)|li %0,%1} {cal %0,%1(0)|li %0,%1}
mf%1 %0 mf%1 %0
mt%0 %1 mt%0 %1
mt%0 %1
cror 0,0,0" cror 0,0,0"
[(set_attr "type" "*,load,*,*,*,*,*")]) [(set_attr "type" "*,load,*,*,*,*,mtjmpr,*")])
(define_insn "" (define_insn ""
[(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r,r,*h") [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r,r,*h,*h")
(match_operand:QI 1 "input_operand" "r,m,r,i,*h,r"))] (match_operand:QI 1 "input_operand" "r,m,r,i,*h,r,0"))]
"! TARGET_POWER && (gpc_reg_operand (operands[0], QImode) "! TARGET_POWER && (gpc_reg_operand (operands[0], QImode)
|| gpc_reg_operand (operands[1], QImode))" || gpc_reg_operand (operands[1], QImode))"
"@ "@
...@@ -3710,8 +3714,9 @@ ...@@ -3710,8 +3714,9 @@
stb%U0%X0 %1,%0 stb%U0%X0 %1,%0
li %0,%1 li %0,%1
mf%1 %0 mf%1 %0
mt%0 %1" mt%0 %1
[(set_attr "type" "*,load,*,*,*,*")]) cror 0,0,0"
[(set_attr "type" "*,load,*,*,*,mtjmpr,*")])
;; Here is how to move condition codes around. When we store CC data in ;; Here is how to move condition codes around. When we store CC data in
;; an integer register or memory, we store just the high-order 4 bits. ;; an integer register or memory, we store just the high-order 4 bits.
......
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