OSDN Git Service

(output_scc_di): Swap operands when needed.
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Sep 1995 18:04:29 +0000 (18:04 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Sep 1995 18:04:29 +0000 (18:04 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10408 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/m68k/m68k.c

index 19897a9..2b5b392 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",