aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/javaop.h
diff options
context:
space:
mode:
authorTom Tromey <tromey@gcc.gnu.org>2000-05-03 18:09:27 +0000
committerTom Tromey <tromey@gcc.gnu.org>2000-05-03 18:09:27 +0000
commitdd5d628184dfb8c460ad01a480a366d735ba6f4f (patch)
tree3e04a4bb49ef6a42d094bc95768fa8e79e19dadf /gcc/java/javaop.h
parent8c8de5fc10d0c5bc658de7f2dfc75c33b1fb541d (diff)
downloadgcc-dd5d628184dfb8c460ad01a480a366d735ba6f4f.zip
gcc-dd5d628184dfb8c460ad01a480a366d735ba6f4f.tar.gz
gcc-dd5d628184dfb8c460ad01a480a366d735ba6f4f.tar.bz2
expr.c (build_java_jsr): Use emit_jump, not expand_goto.
* expr.c (build_java_jsr): Use emit_jump, not expand_goto. * javaop.h (WORD_TO_INT): New function. (IMMEDIATE_s4): Use WORD_TO_INT. * jcf.h (JPOOL_INT): Ditto. * gjavah.c (decode_signature_piece): Don't treat `$' as namespace separator. From-SVN: r33636
Diffstat (limited to 'gcc/java/javaop.h')
-rw-r--r--gcc/java/javaop.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/java/javaop.h b/gcc/java/javaop.h
index c603be1..d8418f7 100644
--- a/gcc/java/javaop.h
+++ b/gcc/java/javaop.h
@@ -98,7 +98,7 @@ union Word {
#endif
#ifndef IMMEDIATE_s4
#define IMMEDIATE_s4 (PC+=4, CHECK_PC_IN_RANGE(PC), \
- ((jint)((BCODE[PC-4] << 24) | (BCODE[PC-3] << 16) \
+ (WORD_TO_INT((BCODE[PC-4] << 24) | (BCODE[PC-3] << 16) \
| (BCODE[PC-2] << 8) | (BCODE[PC-1]))))
#endif
@@ -109,6 +109,16 @@ WORD_TO_FLOAT(jword w)
return wu.f;
}
+/* Sign extend w. */
+static inline jint
+WORD_TO_INT(jword w)
+{
+ jint n = w;
+ n ^= (jint)1 << 31;
+ n -= (jint)1 << 31;
+ return n;
+}
+
static inline jlong
WORDS_TO_LONG(jword hi, jword lo)
{