diff options
author | Jeffrey A Law <law@cygnus.com> | 1998-08-29 13:54:24 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-08-29 07:54:24 -0600 |
commit | 30b237515d6ef7ec3a2b2c35337e31a88b95b94b (patch) | |
tree | 142f5fac2e0981a46e369014a5423c4ce1aff904 /gcc | |
parent | b4ea9a9d44af39ea7d95387b84c977fa30c37f4a (diff) | |
download | gcc-30b237515d6ef7ec3a2b2c35337e31a88b95b94b.zip gcc-30b237515d6ef7ec3a2b2c35337e31a88b95b94b.tar.gz gcc-30b237515d6ef7ec3a2b2c35337e31a88b95b94b.tar.bz2 |
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.
From-SVN: r22082
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/m68k/m68k.md | 38 |
2 files changed, 42 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4530c52..e363da4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ Sat Aug 29 12:39:56 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. + * Makefile.in (INSTALL): Remove "--no-header" argument. * NEWS: Various updates. diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index de3c846..4abcdeb 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 |