This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [bugs] csinl broken?
- To: Andreas Jaeger <aj at suse dot de>
- Subject: Re: [bugs] csinl broken?
- From: Jan Hubicka <jh at suse dot cz>
- Date: Sat, 14 Apr 2001 12:02:17 +0200
- Cc: bugs at x86-64 dot org, patches at x86-64 dot org, gcc-patches at gcc dot gnu dot org, rth at cygnus dot com
- References: <u8puejlgzd.fsf@gromit.rhein-neckar.de>
>
> Honza, test-ldouble now fails in csin, if the first operand has a
> negative sign and is finite.
>
> Do you have any ideas?
Following patch should fix it (as well as other long douible failures).
Basically abs and negation got to no-op for long doubles for memory
operands.
I am commiting it to x86_64 tree, ok for head/branch?
Sat Apr 14 11:58:14 CEST 2001 Jan Hubicka <jh@suse.cz>
* i386.md (abs/neg splitter): Fix calculation of sign bit for TFmodes
Index: config/i386/i386.md
===================================================================
RCS file: /home/cvs/Repository/gcc/gcc/config/i386/i386.md,v
retrieving revision 1.52
diff -c -3 -p -r1.52 i386.md
*** config/i386/i386.md 2001/04/12 15:07:33 1.52
--- config/i386/i386.md 2001/04/14 09:53:06
***************
*** 9370,9377 ****
{
int size = GET_MODE_SIZE (GET_MODE (operands[1]));
! /* XFmode's size is 12, but only 10 bytes are used. */
! if (size == 12)
size = 10;
operands[0] = gen_rtx_MEM (QImode, XEXP (operands[0], 0));
operands[0] = adj_offsettable_operand (operands[0], size - 1);
--- 9370,9377 ----
{
int size = GET_MODE_SIZE (GET_MODE (operands[1]));
! /* XFmode's size is 12, TFmode 16, but only 10 bytes are used. */
! if (size >= 12)
size = 10;
operands[0] = gen_rtx_MEM (QImode, XEXP (operands[0], 0));
operands[0] = adj_offsettable_operand (operands[0], size - 1);
***************
*** 9641,9648 ****
{
int size = GET_MODE_SIZE (GET_MODE (operands[1]));
! /* XFmode's size is 12, but only 10 bytes are used. */
! if (size == 12)
size = 10;
operands[0] = gen_rtx_MEM (QImode, XEXP (operands[0], 0));
operands[0] = adj_offsettable_operand (operands[0], size - 1);
--- 9641,9648 ----
{
int size = GET_MODE_SIZE (GET_MODE (operands[1]));
! /* XFmode's size is 12, TFmode 16, but only 10 bytes are used. */
! if (size >= 12)
size = 10;
operands[0] = gen_rtx_MEM (QImode, XEXP (operands[0], 0));
operands[0] = adj_offsettable_operand (operands[0], size - 1);