diff options
author | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-22 16:55:39 +0000 |
---|---|---|
committer | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-04-22 16:55:39 +0000 |
commit | 9d72e5e1959d601bc096183513209bef0b207d56 (patch) | |
tree | 13ebed8b94cdb76ebae4e89858eb16469cce9931 /gcc/java/jcf-write.c | |
parent | df3e8427bc9f3b155d87ee86e165aac1b666d4b4 (diff) | |
download | ppe42-gcc-9d72e5e1959d601bc096183513209bef0b207d56.tar.gz ppe42-gcc-9d72e5e1959d601bc096183513209bef0b207d56.zip |
2002-04-19 Andrew Haley <aph@redhat.com>
* jcf-write.c (push_long_const): lo, hi: New variables.
Use rshift_double to extract the high part of a 64-bit long.
Use WORD_TO_INT to extract the low part.
* jcf-parse.c (get_constant): CONSTANT_Integer: Use an unsigned
HOST_WIDE_INT for num. Use JPOOL_UINT to get it.
CONSTANT_Double: Use JPOOL_UINT to get both halve of a double.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52618 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/java/jcf-write.c')
-rw-r--r-- | gcc/java/jcf-write.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c index 215d0c56c17..2988c4726b8 100644 --- a/gcc/java/jcf-write.c +++ b/gcc/java/jcf-write.c @@ -853,15 +853,20 @@ push_long_const (lo, hi, state) HOST_WIDE_INT lo, hi; struct jcf_partial *state; { - if (hi == 0 && lo >= 0 && lo <= 1) + HOST_WIDE_INT highpart, dummy; + jint lowpart = WORD_TO_INT (lo); + + rshift_double (lo, hi, 32, 64, &highpart, &dummy, 1); + + if (highpart == 0 && (lowpart == 0 || lowpart == 1)) { RESERVE(1); - OP1(OPCODE_lconst_0 + lo); + OP1(OPCODE_lconst_0 + lowpart); } - else if ((hi == 0 && (jword)(lo & 0xFFFFFFFF) < 32768) - || (hi == -1 && (lo & 0xFFFFFFFF) >= (jword)-32768)) + else if ((highpart == 0 && lowpart > 0 && lowpart < 32768) + || (highpart == -1 && lowpart < 0 && lowpart >= -32768)) { - push_int_const (lo, state); + push_int_const (lowpart, state); RESERVE (1); OP1 (OPCODE_i2l); } |