It turns out we still used hardcoded register numbers for the CR fields
in some cases, and they now use the wrong numbers since we renumbered
most of the registers.  So let's use the symbolic names, instead.

Committing to trunk.


Segher


2019-12-16  Segher Boessenkool  <seg...@kernel.crashing.org>

        * config/rs6000/rs6000.md (movsi_to_cr_one): Use CR0_REGNO instead of
        hardcoding the (old, expired) register number.
        (*mtcrfsi): Ditto.

---
 gcc/config/rs6000/rs6000.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 4c44c1f..4a6416e 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -13132,7 +13132,7 @@ (define_expand "movsi_to_cr_one"
         (unspec:CC [(match_operand:SI 1 "gpc_reg_operand")
                    (match_dup 2)] UNSPEC_MOVESI_TO_CR))]
   ""
-  "operands[2] = GEN_INT (1 << (75 - REGNO (operands[0])));")
+  "operands[2] = GEN_INT (1 << (7 - (REGNO (operands[0]) - CR0_REGNO)));")
 
 (define_insn "*movsi_to_cr"
   [(match_parallel 0 "mtcrf_operation"
@@ -13159,7 +13159,7 @@ (define_insn "*mtcrfsi"
   "REG_P (operands[0])
    && CR_REGNO_P (REGNO (operands[0]))
    && CONST_INT_P (operands[2])
-   && INTVAL (operands[2]) == 1 << (75 - REGNO (operands[0]))"
+   && INTVAL (operands[2]) == 1 << (7 - (REGNO (operands[0]) - CR0_REGNO))"
   "mtcrf %R0,%1"
   [(set_attr "type" "mtcr")])
 
-- 
1.8.3.1

Reply via email to