From 74ed13f5c63b69be28d9646bc08040473077bccb Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Wed, 9 May 2007 17:05:14 +0000 Subject: [PATCH] xtensa.c (xtensa_output_literal): Mask out high bits for floating-point values if HOST_BITS_PER_LONG > 32. * config/xtensa/xtensa.c (xtensa_output_literal): Mask out high bits for floating-point values if HOST_BITS_PER_LONG > 32. Use split_double instead of operand_subword. From-SVN: r124578 --- gcc/ChangeLog | 6 ++++++ gcc/config/xtensa/xtensa.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a5b1469e461..36211dc2d6c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-05-09 Bob Wilson + + * config/xtensa/xtensa.c (xtensa_output_literal): Mask out high bits + for floating-point values if HOST_BITS_PER_LONG > 32. Use split_double + instead of operand_subword. + 2007-05-08 Bernd Schmidt * config/bfin/bfin.h (LOCAL_ALIGNMENT): Define. diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c index 43bcc584856..81e7797c6b5 100644 --- a/gcc/config/xtensa/xtensa.c +++ b/gcc/config/xtensa/xtensa.c @@ -1939,6 +1939,7 @@ xtensa_output_literal (FILE *file, rtx x, enum machine_mode mode, int labelno) long value_long[2]; REAL_VALUE_TYPE r; int size; + rtx first, second; fprintf (file, "\t.literal .LC%u, ", (unsigned) labelno); @@ -1952,11 +1953,18 @@ xtensa_output_literal (FILE *file, rtx x, enum machine_mode mode, int labelno) { case SFmode: REAL_VALUE_TO_TARGET_SINGLE (r, value_long[0]); +#if HOST_BITS_PER_LONG > 32 + value_long[0] &= 0xffffffff; +#endif fprintf (file, "0x%08lx\n", value_long[0]); break; case DFmode: REAL_VALUE_TO_TARGET_DOUBLE (r, value_long); +#if HOST_BITS_PER_LONG > 32 + value_long[0] &= 0xffffffff; + value_long[1] &= 0xffffffff; +#endif fprintf (file, "0x%08lx, 0x%08lx\n", value_long[0], value_long[1]); break; @@ -1978,9 +1986,10 @@ xtensa_output_literal (FILE *file, rtx x, enum machine_mode mode, int labelno) break; case 8: - output_addr_const (file, operand_subword (x, 0, 0, DImode)); + split_double (x, &first, &second); + output_addr_const (file, first); fputs (", ", file); - output_addr_const (file, operand_subword (x, 1, 0, DImode)); + output_addr_const (file, second); fputs ("\n", file); break;