From: Jeffrey A Law Date: Sat, 29 Aug 1998 13:53:27 +0000 (+0000) Subject: m68k.md (beq0_di): Generate correct (and more efficient) code when... X-Git-Tag: prereleases/egcs-1.1-prerelease~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3daee5797dda022fe0f22610bd7964355eb23423;p=thirdparty%2Fgcc.git m68k.md (beq0_di): Generate correct (and more efficient) code when... * m68k.md (beq0_di): Generate correct (and more efficient) code when the clobbered operand overlaps with an input. (bne0_di): Similarly. Fixes bug from m68k-netbsd folks. From-SVN: r22081 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1c4e804a6d74..afb7fcdf5db9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Sat Aug 29 14:48:12 1998 Jeffrey A Law (law@cygnus.com) + + * m68k.md (beq0_di): Generate correct (and more efficient) code when + the clobbered operand overlaps with an input. + (bne0_di): Similarly. + Sat Aug 29 12:38:54 1998 Jeffrey A Law (law@cygnus.com) * NEWS: Various updates. diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index de3c84625faa..4abcdeb80f4d 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -5958,6 +5958,25 @@ operands[3] = adj_offsettable_operand (operands[0], 4); if (! ADDRESS_REG_P (operands[0])) { + if (reg_overlap_mentioned_p (operands[2], operands[0])) + { + if (reg_overlap_mentioned_p (operands[2], operands[3])) + { +#ifdef MOTOROLA + return \"or%.l %0,%2\;jbeq %l1\"; +#else + return \"or%.l %0,%2\;jeq %l1\"; +#endif + } + else + { +#ifdef MOTOROLA + return \"or%.l %3,%2\;jbeq %l1\"; +#else + return \"or%.l %3,%2\;jeq %l1\"; +#endif + } + } #ifdef MOTOROLA return \"move%.l %0,%2\;or%.l %3,%2\;jbeq %l1\"; #else @@ -6019,6 +6038,25 @@ operands[3] = adj_offsettable_operand (operands[0], 4); if (!ADDRESS_REG_P (operands[0])) { + if (reg_overlap_mentioned_p (operands[2], operands[0])) + { + if (reg_overlap_mentioned_p (operands[2], operands[3])) + { +#ifdef MOTOROLA + return \"or%.l %0,%2\;jbne %l1\"; +#else + return \"or%.l %0,%2\;jne %l1\"; +#endif + } + else + { +#ifdef MOTOROLA + return \"or%.l %3,%2\;jbne %l1\"; +#else + return \"or%.l %3,%2\;jne %l1\"; +#endif + } + } #ifdef MOTOROLA return \"move%.l %0,%2\;or%.l %3,%2\;jbne %l1\"; #else