output_scc_di in m68k.c broken

Andreas Schwab schwab@issan.informatik.uni-dortmund.de
Fri Jul 10 02:00:00 GMT 1998


This fixes the bug in output_scc_di that was introduced with the last
change in m68k.c.


Thu Jul  9 11:13:17 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config/m68k/m68k.c (output_scc_di): Use cmpw #0 only for address
	registers.

--- egcs-2.91.47/gcc/config/m68k/m68k.c.~1~	Wed Jul  8 23:32:26 1998
+++ egcs-2.91.47/gcc/config/m68k/m68k.c	Thu Jul  9 01:49:06 1998
@@ -1046,39 +1046,52 @@
     }
   loperands[4] = gen_label_rtx();
   if (operand2 != const0_rtx)
+    {
 #ifdef MOTOROLA
 #ifdef SGS_CMP_ORDER
-    output_asm_insn ("cmp%.l %0,%2\n\tjbne %l4\n\tcmp%.l %1,%3", loperands);
+      output_asm_insn ("cmp%.l %0,%2\n\tjbne %l4\n\tcmp%.l %1,%3", loperands);
 #else
-    output_asm_insn ("cmp%.l %2,%0\n\tjbne %l4\n\tcmp%.l %3,%1", loperands);
+      output_asm_insn ("cmp%.l %2,%0\n\tjbne %l4\n\tcmp%.l %3,%1", loperands);
 #endif
 #else
 #ifdef SGS_CMP_ORDER
-    output_asm_insn ("cmp%.l %0,%2\n\tjne %l4\n\tcmp%.l %1,%3", loperands);
+      output_asm_insn ("cmp%.l %0,%2\n\tjne %l4\n\tcmp%.l %1,%3", loperands);
 #else
-    output_asm_insn ("cmp%.l %2,%0\n\tjne %l4\n\tcmp%.l %3,%1", loperands);
+      output_asm_insn ("cmp%.l %2,%0\n\tjne %l4\n\tcmp%.l %3,%1", loperands);
 #endif
 #endif
-  else if (TARGET_68020 || TARGET_5200)
-#ifdef MOTOROLA
-    output_asm_insn ("tst%.l %0\n\tjbne %l4\n\ttst%.l %1", loperands);
-#else
-    output_asm_insn ("tst%.l %0\n\tjne %l4\n\ttst%.l %1", loperands);
-#endif
+    }
   else
-#ifdef MOTOROLA
+    {
+      if (TARGET_68020 || TARGET_5200 || ! ADDRESS_REG_P (loperands[0]))
+	output_asm_insn ("tst%.l %0", loperands);
+      else
+	{
 #ifdef SGS_CMP_ORDER
-    output_asm_insn ("cmp%.w %0,%#0\n\tjbne %l4\n\tcmp%.w %1,%#0", loperands);
+	  output_asm_insn ("cmp%.w %0,%#0", loperands);
 #else
-    output_asm_insn ("cmp%.w %#0,%0\n\tjbne %l4\n\tcmp%.w %#0,%1", loperands);
+	  output_asm_insn ("cmp%.w %#0,%0", loperands);
 #endif
+	}
+
+#ifdef MOTOROLA
+      output_asm_insn ("jbne %l4", loperands);
 #else
+      output_asm_insn ("jne %l4", loperands);
+#endif
+
+      if (TARGET_68020 || TARGET_5200 || ! ADDRESS_REG_P (loperands[1]))
+	output_asm_insn ("tst%.l %1", loperands);
+      else
+	{
 #ifdef SGS_CMP_ORDER
-    output_asm_insn ("cmp%.w %0,%#0\n\tjne %l4\n\tcmp%.w %1,%#0", loperands);
+	  output_asm_insn ("cmp%.w %1,%#0", loperands);
 #else
-    output_asm_insn ("cmp%.w %#0,%0\n\tjne %l4\n\tcmp%.w %#0,%1", loperands);
-#endif
+	  output_asm_insn ("cmp%.w %#0,%1", loperands);
 #endif
+	}
+    }
+
   loperands[5] = dest;
   
   switch (op_code)

-- 
Andreas Schwab                                      "And now for something
schwab@issan.informatik.uni-dortmund.de              completely different"
schwab@gnu.org



More information about the Gcc-patches mailing list