]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
(output_scc_di): Swap operands when needed.
authorRichard Kenner <kenner@gcc.gnu.org>
Thu, 28 Sep 1995 18:04:29 +0000 (14:04 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 28 Sep 1995 18:04:29 +0000 (14:04 -0400)
From-SVN: r10408

gcc/config/m68k/m68k.c

index 19897a90cc3f356fd7091e6d705d97acf4ce6f68..2b5b392bb86b8fc3a68349b2d3a7f2b69aeece58 100644 (file)
@@ -706,7 +706,19 @@ output_scc_di(op, operand1, operand2, dest)
      rtx dest;
 {
   rtx loperands[7];
+  enum rtx_code op_code = GET_CODE (op);
 
+  /* The m68k cmp.l instruction requires operand1 to be a reg as used
+     below.  Swap the operands and change the op if these requirements
+     are not fulfilled.  */
+  if (GET_CODE (operand2) == REG && GET_CODE (operand1) != REG)
+    {
+      rtx tmp = operand1;
+
+      operand1 = operand2;
+      operand2 = tmp;
+      op_code = swap_condition (op_code);
+    }
   loperands[0] = operand1;
   if (GET_CODE (operand1) == REG)
     loperands[1] = gen_rtx (REG, SImode, REGNO (operand1) + 1);
@@ -743,7 +755,7 @@ output_scc_di(op, operand1, operand2, dest)
 #endif
   loperands[5] = dest;
   
-  switch (GET_CODE (op))
+  switch (op_code)
     {
       case EQ:
         ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",