diff options
Diffstat (limited to 'gcc/java/jcf-write.c')
-rw-r--r-- | gcc/java/jcf-write.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c index 0769125..1a9f107 100644 --- a/gcc/java/jcf-write.c +++ b/gcc/java/jcf-write.c @@ -826,21 +826,18 @@ find_constant_index (value, state) else if (TREE_CODE (value) == REAL_CST) { long words[2]; + + real_to_target (words, &TREE_REAL_CST (value), + TYPE_MODE (TREE_TYPE (value))); + words[0] &= 0xffffffff; + words[1] &= 0xffffffff; + if (TYPE_PRECISION (TREE_TYPE (value)) == 32) - { - words[0] = etarsingle (TREE_REAL_CST (value)) & 0xFFFFFFFF; - return find_constant1 (&state->cpool, CONSTANT_Float, - (jword)words[0]); - } + return find_constant1 (&state->cpool, CONSTANT_Float, (jword)words[0]); else - { - etardouble (TREE_REAL_CST (value), words); - return find_constant2 (&state->cpool, CONSTANT_Double, - (jword)(words[1-FLOAT_WORDS_BIG_ENDIAN] & - 0xFFFFFFFF), - (jword)(words[FLOAT_WORDS_BIG_ENDIAN] & - 0xFFFFFFFF)); - } + return find_constant2 (&state->cpool, CONSTANT_Double, + (jword)words[1-FLOAT_WORDS_BIG_ENDIAN], + (jword)words[FLOAT_WORDS_BIG_ENDIAN]); } else if (TREE_CODE (value) == STRING_CST) return find_string_constant (&state->cpool, value); |