aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1998-08-29 13:54:24 +0000
committerJeff Law <law@gcc.gnu.org>1998-08-29 07:54:24 -0600
commit30b237515d6ef7ec3a2b2c35337e31a88b95b94b (patch)
tree142f5fac2e0981a46e369014a5423c4ce1aff904 /gcc
parentb4ea9a9d44af39ea7d95387b84c977fa30c37f4a (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/config/m68k/m68k.md38
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