diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-10-05 16:53:33 +0000 | 
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-10-05 16:53:33 +0000 | 
| commit | 3f980cf79d678288be2dff76bfb96aa8a394bfb0 (patch) | |
| tree | b9a2bfc5cba9c5bd927e638e6f77612c2d776746 /gcc | |
| parent | 7ab8525511995884249eb8edb36b204906b976ae (diff) | |
| download | ppe42-gcc-3f980cf79d678288be2dff76bfb96aa8a394bfb0.tar.gz ppe42-gcc-3f980cf79d678288be2dff76bfb96aa8a394bfb0.zip | |
	* emit-rtl.c (gen_lowpart_common) [REAL_ARITHMETICS]: Fix conversion
	from float to integral mode with HOST_BITS_PER_WIDE_INT 64.
	* dwarf2out.c (add_const_value_attribute): Divide by 4, not
	sizeof(long).
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36728 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/dwarf2out.c | 2 | ||||
| -rw-r--r-- | gcc/emit-rtl.c | 26 | 
3 files changed, 26 insertions, 9 deletions
| diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 540f54a330f..2b010598469 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2000-10-05  Jakub Jelinek  <jakub@redhat.com> + +	* emit-rtl.c (gen_lowpart_common) [REAL_ARITHMETICS]: Fix conversion +	from float to integral mode with HOST_BITS_PER_WIDE_INT 64. +	* dwarf2out.c (add_const_value_attribute): Divide by 4, not +	sizeof(long). +  Thu Oct  5 09:31:31 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>  	* fold-const.c (fold, case MINUS_EXPR, case EQ_EXPR): Perform diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index bc1964ae077..4e520fefc1c 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -7692,7 +7692,7 @@ add_const_value_attribute (die, rtl)  	if (GET_MODE_CLASS (mode) == MODE_FLOAT)  	  { -	    register unsigned length = GET_MODE_SIZE (mode) / sizeof (long); +	    register unsigned length = GET_MODE_SIZE (mode) / 4;   	    long *array = (long *) xmalloc (sizeof (long) * length);  	    REAL_VALUE_TYPE rv; diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 2a4bdb9fcdb..c5ddeb081ed 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -942,10 +942,12 @@ gen_lowpart_common (mode, x)  	  break;  #if LONG_DOUBLE_TYPE_SIZE == 96  	case XFmode: +	  REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, i + endian); +	  i[3-3*endian] = 0;  #else  	case TFmode: -#endif  	  REAL_VALUE_TO_TARGET_LONG_DOUBLE (r, i); +#endif  	  break;  	default:  	  abort (); @@ -964,13 +966,21 @@ gen_lowpart_common (mode, x)  	for (c = 0; c < 4; c++)  	  i[c] &= ~ (0L); -       -	return immed_double_const (i[endian * 3] -				   | (((HOST_WIDE_INT) i[1 + endian]) << 32), -				   i[2 - endian] -				   | (((HOST_WIDE_INT) i[3 - endian * 3]) -				      << 32), -				   mode); + +	switch (GET_MODE (x)) +	  { +	  case SFmode: +	  case DFmode: +	    return immed_double_const (((unsigned long) i[endian]) | +				       (((HOST_WIDE_INT) i[1-endian]) << 32), +				       0, mode); +	  default: +	    return immed_double_const (((unsigned long) i[endian*3]) | +				       (((HOST_WIDE_INT) i[1+endian]) << 32), +				       ((unsigned long) i[2-endian]) | +				       (((HOST_WIDE_INT) i[3-endian*3]) << 32), +				       mode); +	  }        }  #endif      } | 

