From 0b0d4c5b3ae9aa6a82e08742a542095f193383ea Mon Sep 17 00:00:00 2001 From: Jeff Sturm Date: Sat, 12 Jan 2002 00:01:41 +0000 Subject: jcf-parse.c (get_constant): Don't swap lo/hi for big endian targets when HOST_BITS_PER_WIDE_INT >= 64. * jcf-parse.c (get_constant): Don't swap lo/hi for big endian targets when HOST_BITS_PER_WIDE_INT >= 64. Co-Authored-By: Martin Kahlert From-SVN: r48786 --- gcc/java/jcf-parse.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'gcc/java/jcf-parse.c') diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index 2841d5f..4e83b2a 100644 --- a/gcc/java/jcf-parse.c +++ b/gcc/java/jcf-parse.c @@ -326,7 +326,15 @@ get_constant (jcf, index) lshift_double (num[0], 0, 32, 64, &lo, &hi, 0); num[0] = JPOOL_INT (jcf, index+1); add_double (lo, hi, num[0], 0, &lo, &hi); - if (FLOAT_WORDS_BIG_ENDIAN) + + /* Since ereal_from_double expects an array of HOST_WIDE_INT + in the target's format, we swap the elements for big endian + targets, unless HOST_WIDE_INT is sufficiently large to + contain a target double, in which case the 2nd element + is ignored. + + FIXME: Is this always right for cross targets? */ + if (FLOAT_WORDS_BIG_ENDIAN && sizeof(num[0]) < 8) { num[0] = hi; num[1] = lo; -- cgit v1.1