From: bwilson Date: Wed, 9 May 2007 17:05:14 +0000 (+0000) Subject: * config/xtensa/xtensa.c (xtensa_output_literal): Mask out high bits X-Git-Tag: upstream/4.9.2~48729 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c9876a47b116551ae7f7bea4ff9903208ea434a0;p=platform%2Fupstream%2Flinaro-gcc.git * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124578 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a5b1469..36211dc 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 43bcc58..81e7797 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;