aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2002-05-06 00:08:54 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2002-05-06 00:08:54 +0200
commitcac010762c695f9c66656782ab107295b7a8b196 (patch)
tree343fff3d65797aee1c79edb6d6a8a4cac67839bd /gcc
parent98791e3a3f59c66a1699becef28b69888d319136 (diff)
downloadgcc-cac010762c695f9c66656782ab107295b7a8b196.zip
gcc-cac010762c695f9c66656782ab107295b7a8b196.tar.gz
gcc-cac010762c695f9c66656782ab107295b7a8b196.tar.bz2
re PR target/6561 (sparc-sun-solaris2.7 C testsuite failure w/-mcpu=ultrasparc in execute/950511-1.c)
PR target/6561 * config/sparc/sparc.md (muldi3_v8plus): Handle %1 equal to %2. From-SVN: r53197
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/sparc/sparc.md7
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8dfaae7..a56fd7e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-05-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/6561
+ * config/sparc/sparc.md (muldi3_v8plus): Handle %1 equal to %2.
+
2002-05-05 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.c (alpha_adjust_cost): Remove everything but
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index 8f19dc7..cb0c665 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -5489,6 +5489,13 @@
else
return \"sllx\\t%H1, 32, %3\\n\\tor\\t%L1, %3, %3\\n\\tmulx\\t%3, %2, %3\\n\\tsrlx\\t%3, 32, %H0\\n\\tmov\\t%3, %L0\";
}
+ else if (rtx_equal_p (operands[1], operands[2]))
+ {
+ if (which_alternative == 1)
+ return \"or\\t%L1, %H1, %H1\\n\\tmulx\\t%H1, %H1, %L0\;srlx\\t%L0, 32, %H0\";
+ else
+ return \"sllx\\t%H1, 32, %3\\n\\tor\\t%L1, %3, %3\\n\\tmulx\\t%3, %3, %3\\n\\tsrlx\\t%3, 32, %H0\\n\\tmov\\t%3, %L0\";
+ }
if (sparc_check_64 (operands[2], insn) <= 0)
output_asm_insn (\"srl\\t%L2, 0, %L2\", operands);
if (which_alternative == 1)