(prepare_scc_operands): New local variable mode.
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 21 Oct 1995 22:31:06 +0000 (18:31 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 21 Oct 1995 22:31:06 +0000 (18:31 -0400)
(prepare_scc_operands): New local variable mode.  Set it from
sh_compare_op0 or sh_compare_op1.  Use it instead of SImode in
force_reg calls.

From-SVN: r10500

gcc/config/sh/sh.c

index 5636d1805c4daabbaaf2f6ded8d190a61277260b..bbb708c10a1ca6f476462ffd55c4b3e2a198a6bc 100644 (file)
@@ -320,6 +320,7 @@ prepare_scc_operands (code)
 {
   rtx t_reg = gen_rtx (REG, SImode, T_REG);
   enum rtx_code oldcode = code;
+  enum machine_mode mode;
 
   /* First need a compare insn.  */
   switch (code)
@@ -347,11 +348,15 @@ prepare_scc_operands (code)
       sh_compare_op1 = tmp;
     }
 
-  sh_compare_op0 = force_reg (SImode, sh_compare_op0);
+  mode = GET_MODE (sh_compare_op0);
+  if (mode == VOIDmode)
+    mode = GET_MODE (sh_compare_op1);
+
+  sh_compare_op0 = force_reg (mode, sh_compare_op0);
   if (code != EQ && code != NE
       && (sh_compare_op1 != const0_rtx
          || code == GTU  || code == GEU || code == LTU || code == LEU))
-    sh_compare_op1 = force_reg (SImode, sh_compare_op1);
+    sh_compare_op1 = force_reg (mode, sh_compare_op1);
 
   emit_insn (gen_rtx (SET, VOIDmode, t_reg,
                      gen_rtx (code, SImode, sh_compare_op0,