diff options
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index abaca0c934d..8befce96dec 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -8954,11 +8954,24 @@ (match_test "update_address_mem (operands[0], VOIDmode)") (const_string "store_u") (const_string "store")))]) - (set_attr "length" "8")]) + ;; PPE42 lacks lwzux -> lwzx; then add -;; TODO +(define_insn "*movsi_internal3" + [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "=r") + (mem:SI + (pre_modify:SI (match_operand:SI 1 "gpc_reg_operand" "r") + (plus:SI (match_operand:SI 2 "gpc_reg_operand" "r") + (match_operand:SI 3 "gpc_reg_operand" "r")))))] + "!TARGET_SINGLE_FPU && (rs6000_cpu == PROCESSOR_PPE42) && + REGNO (operands[1]) == REGNO (operands[2]) && + (gpc_reg_operand (operands[1], SImode) || gpc_reg_operand (operands[0], SImode))" + "lwzx %0,%1,%3\;add %1,%2,%3 #lwzux %0,%1,%3" + [(set_attr_alternative "type" + [(const_string "load_ux")]) + (set_attr "length" "8")]) + (define_insn "*movsi_internal1" [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "=r,r,r,m,r,r,r,r,*c*l,*h,*h") |