From a6096a27f69e7940a427f3f354da29e6418d865a Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Mon, 17 Mar 1997 17:21:25 -0500 Subject: [PATCH] (beq0_di, bne0_di, bge0_di, blt0_di): Use cmpw #0 instead of tstl when testing address registers on the 68000. From-SVN: r13728 --- gcc/config/m68k/m68k.md | 59 ++++++++++++++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index 058f4742144..3828d612dc9 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -5452,10 +5452,21 @@ return \"move%.l %0,%2\;or%.l %3,%2\;jeq %l1\"; #endif operands[4] = gen_label_rtx(); + if (TARGET_68020 || TARGET_5200) +#ifdef MOTOROLA + output_asm_insn (\"tst%.l %0\;jbne %l4\;tst%.l %3\;jbeq %l1\", operands); +#else + output_asm_insn (\"tst%.l %0\;jne %l4\;tst%.l %3\;jeq %l1\", operands); +#endif + else #ifdef MOTOROLA - output_asm_insn (\"tst%.l %0\;jbne %l4\;tst%.l %3\;jbeq %l1\", operands); +#ifdef SGS_CMP_ORDER + output_asm_insn (\"cmp%.w %0,%#0\;jbne %l4\;cmp%.w %3,%#0\;jbeq %l1\", operands); +#else + output_asm_insn (\"cmp%.w %#0,%0\;jbne %l4\;cmp%.w %#0,%3\;jbeq %l1\", operands); +#endif #else - output_asm_insn (\"tst%.l %0\;jne %l4\;tst%.l %3\;jeq %l1\", operands); + output_asm_insn (\"cmp%.w %#0,%0\;jne %l4\;cmp%.w %#0,%3\;jeq %l1\", operands); #endif ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (operands[4])); @@ -5489,7 +5500,13 @@ operands[3] = gen_rtx (REG, SImode, REGNO (operands[0]) + 1); else operands[3] = adj_offsettable_operand (operands[0], 4); - if (ADDRESS_REG_P (operands[0])) + if (!ADDRESS_REG_P (operands[0])) +#ifdef MOTOROLA + return \"move%.l %0,%2\;or%.l %3,%2\;jbne %l1\"; +#else + return \"move%.l %0,%2\;or%.l %3,%2\;jne %l1\"; +#endif + if (TARGET_68020 || TARGET_5200) #ifdef MOTOROLA return \"tst%.l %0\;jbne %l1\;tst%.l %3\;jbne %l1\"; #else @@ -5497,9 +5514,13 @@ #endif else #ifdef MOTOROLA - return \"move%.l %0,%2\;or%.l %3,%2\;jbne %l1\"; +#ifdef SGS_CMP_ORDER + return \"cmp%.w %#0,%0\;jbne %l1\;cmp%.w %#0,%3\;jbne %l1\"; #else - return \"move%.l %0,%2\;or%.l %3,%2\;jne %l1\"; + return \"cmp%.w %0,%#0\;jbne %l1\;cmp%.w %3,%#0\;jbne %l1\"; +#endif +#else + return \"cmp%.w %#0,%0\;jne %l1\;cmp%.w %#0,%3\;jne %l1\"; #endif } ") @@ -5536,10 +5557,20 @@ } } CC_STATUS_INIT; + if (TARGET_68020 || TARGET_5200 || ! ADDRESS_REG_P (operands[0])) + output_asm_insn(\"tst%.l %0\", operands); + else + /* On an address reg, cmpw may replace cmpl. */ +#ifdef SGS_CMP_ORDER + output_asm_insn(\"cmp%.w %0,%#0\", operands); +#else + output_asm_insn(\"cmp%.w %#0,%0\", operands); +#endif + #ifdef MOTOROLA - return \"tst%.l %0\;jbpl %l1\"; + return \"jbpl %l1\"; #else - return \"tst%.l %0\;jpl %l1\"; + return \"jpl %l1\"; #endif } ") @@ -5576,10 +5607,20 @@ } } CC_STATUS_INIT; + if (TARGET_68020 || TARGET_5200 || ! ADDRESS_REG_P (operands[0])) + output_asm_insn(\"tst%.l %0\", operands); + else + /* On an address reg, cmpw may replace cmpl. */ +#ifdef SGS_CMP_ORDER + output_asm_insn(\"cmp%.w %0,%#0\", operands); +#else + output_asm_insn(\"cmp%.w %#0,%0\", operands); +#endif + #ifdef MOTOROLA - return \"tst%.l %0\;jbmi %l1\"; + return \"jbmi %l1\"; #else - return \"tst%.l %0\;jmi %l1\"; + return \"jmi %l1\"; #endif } ") -- 2.30.2