re PR middle-end/9009 (floating-point negate and abs optimizations incorrect for ARM)

PR middle-end/9009
	* optabs.c (expand_unop):  When manipulating the FP sign bit
	using integer operations, account for targets with different
	integer and FP word orders.
	(expand_abs): Likewise.

From-SVN: r61335
This commit is contained in:
Roger Sayle 2003-01-15 17:32:38 +00:00 committed by Roger Sayle
parent e3981aabf2
commit 9ee0a4426d
2 changed files with 25 additions and 1 deletions

View file

@ -1,3 +1,11 @@
2003-01-15 Roger Sayle <roger@eyesopen.com>
PR middle-end/9009
* optabs.c (expand_unop): When manipulating the FP sign bit
using integer operations, account for targets with different
integer and FP word orders.
(expand_abs): Likewise.
2003-01-15 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/rs6000.c (rs6000_gen_section_name): Do not include

View file

@ -1,6 +1,6 @@
/* Expand the basic unary and binary arithmetic operations, for GNU compiler.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2003 Free Software Foundation, Inc.
1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@ -2530,6 +2530,14 @@ expand_unop (mode, unoptab, op0, target, unsignedp)
HOST_WIDE_INT hi, lo;
rtx last = get_last_insn ();
/* Handle targets with different FP word orders. */
if (FLOAT_WORDS_BIG_ENDIAN != WORDS_BIG_ENDIAN)
{
int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD;
int word = nwords - (bitpos / BITS_PER_WORD) - 1;
bitpos = word * BITS_PER_WORD + bitpos % BITS_PER_WORD;
}
if (bitpos < HOST_BITS_PER_WIDE_INT)
{
hi = 0;
@ -2675,6 +2683,14 @@ expand_abs (mode, op0, target, result_unsignedp, safe)
HOST_WIDE_INT hi, lo;
rtx last = get_last_insn ();
/* Handle targets with different FP word orders. */
if (FLOAT_WORDS_BIG_ENDIAN != WORDS_BIG_ENDIAN)
{
int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD;
int word = nwords - (bitpos / BITS_PER_WORD) - 1;
bitpos = word * BITS_PER_WORD + bitpos % BITS_PER_WORD;
}
if (bitpos < HOST_BITS_PER_WIDE_INT)
{
hi = 0;