From 7f2a4bd26b574b3faf331a289c2b1ec4be0d69ad Mon Sep 17 00:00:00 2001
From: kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 24 Sep 2006 18:47:25 +0000
Subject: [PATCH] gcc/ 	PR target/28911 	* config/m68k/m68k.md (negsf2,
 negdf2, negxf2): Use 	-2147483647 - 1 instead of 0x80000000.

gcc/testsuite/
	PR target/28911
	* gcc.dg/pr28911.c: New.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117181 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog                  |  6 ++++++
 gcc/config/m68k/m68k.md        |  6 +++---
 gcc/testsuite/ChangeLog        |  5 +++++
 gcc/testsuite/gcc.dg/pr28911.c | 13 +++++++++++++
 4 files changed, 27 insertions(+), 3 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/pr28911.c

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e816362cea02..66332b1314ad 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-24  Kazu Hirata  <kazu@codesourcery.com>
+
+	PR target/28911
+	* config/m68k/m68k.md (negsf2, negdf2, negxf2): Use
+	-2147483647 - 1 instead of 0x80000000.
+
 2006-09-23  Revital1 Eres  <ERES@il.ibm.com>
 
 	* flags.h (HONOR_NANS): Fix typo in comment.
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index d00f131712e3..ef6cb0484e2e 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -3721,7 +3721,7 @@
       target = operand_subword_force (operands[0], 0, SFmode);
       result = expand_binop (SImode, xor_optab,
 			     operand_subword_force (operands[1], 0, SFmode),
-			     GEN_INT (0x80000000), target, 0, OPTAB_WIDEN);
+			     GEN_INT (-2147483647 - 1), target, 0, OPTAB_WIDEN);
       gcc_assert (result);
 
       if (result != target)
@@ -3748,7 +3748,7 @@
       target = operand_subword (operands[0], 0, 1, DFmode);
       result = expand_binop (SImode, xor_optab,
 			     operand_subword_force (operands[1], 0, DFmode),
-			     GEN_INT (0x80000000), target, 0, OPTAB_WIDEN);
+			     GEN_INT (-2147483647 - 1), target, 0, OPTAB_WIDEN);
       gcc_assert (result);
 
       if (result != target)
@@ -3780,7 +3780,7 @@
       target = operand_subword (operands[0], 0, 1, XFmode);
       result = expand_binop (SImode, xor_optab,
 			     operand_subword_force (operands[1], 0, XFmode),
-			     GEN_INT (0x80000000), target, 0, OPTAB_WIDEN);
+			     GEN_INT (-2147483647 - 1), target, 0, OPTAB_WIDEN);
       gcc_assert (result);
 
       if (result != target)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7ab082687fff..93aa08ae7a7d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-24  Kazu Hirata  <kazu@codesourcery.com>
+
+	PR target/28911
+	* gcc.dg/pr28911.c: New.
+
 2006-09-23  Uros Bizjak  <uros@kss-loka.si>
 
 	PR target/29169
diff --git a/gcc/testsuite/gcc.dg/pr28911.c b/gcc/testsuite/gcc.dg/pr28911.c
new file mode 100644
index 000000000000..e1748f0fd963
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr28911.c
@@ -0,0 +1,13 @@
+/* PR target/28911
+   The following used to cause crash on m68k-elf because 0x80000000
+   was used as an SImode constant.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-options "-O2 -m68000" { target m68k-*-* } } */
+
+_Complex float
+foo (float a)
+{
+  return __builtin_copysign (a != a, a);
+}
-- 
GitLab