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