* m68k.c (output_scc_di): Use cmpw #0 only for address registers.
authorAndreas Schwab <schwab@issan.informatik.uni-dortmund.de>
Mon, 13 Jul 1998 22:33:07 +0000 (22:33 +0000)
committerJeff Law <law@gcc.gnu.org>
Mon, 13 Jul 1998 22:33:07 +0000 (16:33 -0600)
From-SVN: r21119

gcc/ChangeLog
gcc/config/m68k/m68k.c

index e6ca0c3..1a86cbe 100644 (file)
@@ -1,3 +1,7 @@
+Mon Jul 13 23:31:04 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * m68k.c (output_scc_di): Use cmpw #0 only for address registers.
+
 Mon Jul 13 23:26:43 1998  Jeffrey A Law  (law@cygnus.com)
 
        * tree.h (tree_common): Note front-end dependencies on layout of
index ba889ad..64bbe4a 100644 (file)
@@ -1046,39 +1046,52 @@ output_scc_di(op, operand1, operand2, dest)
     }
   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)