aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHartmut Penner <hpenner@de.ibm.com>2002-01-24 12:30:37 +0000
committerHartmut Penner <hpenner@gcc.gnu.org>2002-01-24 12:30:37 +0000
commit467cb2da563aa7b595a0de7fe36e4c4c50fcd480 (patch)
tree9f162a6c926d5fedf3808ea97fe2fb8cf4902acd
parent3b6cb9200d58f3a74d7240b94ded2343759758ba (diff)
downloadgcc-467cb2da563aa7b595a0de7fe36e4c4c50fcd480.zip
gcc-467cb2da563aa7b595a0de7fe36e4c4c50fcd480.tar.gz
gcc-467cb2da563aa7b595a0de7fe36e4c4c50fcd480.tar.bz2
emit_rtl.c (gen_lowpart_common): Conversion from const_int to const_double needs to be done right for big-endian...
* emit_rtl.c (gen_lowpart_common): Conversion from const_int to const_double needs to be done right for big-endian systems. From-SVN: r49180
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/emit-rtl.c6
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 08bba7f..9bd5fe4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-01-14 Hartmut Penner <hpenner@de.ibm.com>
+
+ * emit_rtl.c (gen_lowpart_common): Conversion from const_int
+ to const_double needs to be done right for big-endian systems.
+
2002-01-24 Jason Merrill <jason@redhat.com>
* config/sparc/sparc.md (call-jump peepholes): Pass the right insn
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index c3b8ddc..28e0dd9 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -919,13 +919,11 @@ gen_lowpart_common (mode, x)
low = INTVAL (x), high = low >> (HOST_BITS_PER_WIDE_INT -1);
else
low = CONST_DOUBLE_LOW (x), high = CONST_DOUBLE_HIGH (x);
-
#ifdef HOST_WORDS_BIG_ENDIAN
u.i[0] = high, u.i[1] = low;
#else
u.i[0] = low, u.i[1] = high;
#endif
-
return CONST_DOUBLE_FROM_REAL_VALUE (u.d, mode);
}
@@ -1009,12 +1007,16 @@ gen_lowpart_common (mode, x)
high = CONST_DOUBLE_HIGH (x);
}
+#if HOST_BITS_PER_WIDE_INT == 32
/* REAL_VALUE_TARGET_DOUBLE takes the addressing order of the
target machine. */
if (WORDS_BIG_ENDIAN)
i[0] = high, i[1] = low;
else
i[0] = low, i[1] = high;
+#else
+ i[0] = low;
+#endif
r = REAL_VALUE_FROM_TARGET_DOUBLE (i);
return CONST_DOUBLE_FROM_REAL_VALUE (r, mode);