From a6404080f569a05ed19727415aa3548f67cb1f8b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Mon, 29 May 2006 11:51:15 +0200 Subject: [PATCH] javaop.h (int16, [...]): Define to exactly 16 (resp. * javaop.h (int16, int32, int64): Define to exactly 16 (resp. 32, 64) bit wide type. (jword): Define to uint64 on 64-bit arches. * jcf-dump.c (print_constant): Cast JPOOL_UINT to long. From-SVN: r114191 --- gcc/java/ChangeLog | 7 +++++++ gcc/java/javaop.h | 29 +++++++++++++++++++++++++++++ gcc/java/jcf-dump.c | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 9c8373333ce1..0c17d5836f18 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,10 @@ +2006-05-29 Jakub Jelinek <jakub@redhat.com> + + * javaop.h (int16, int32, int64): Define to exactly 16 (resp. 32, 64) + bit wide type. + (jword): Define to uint64 on 64-bit arches. + * jcf-dump.c (print_constant): Cast JPOOL_UINT to long. + 2006-05-28 Kazu Hirata <kazu@codesourcery.com> * class.c, except.c, expr.c, java-gimplify.c: Fix comment diff --git a/gcc/java/javaop.h b/gcc/java/javaop.h index 18c3a2886349..12e001600bee 100644 --- a/gcc/java/javaop.h +++ b/gcc/java/javaop.h @@ -30,18 +30,40 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ typedef unsigned char uint8; #ifndef int16 +#if __SHRT_MAX__ == 32767 #define int16 short +#elif __INT_MAX__ == 32767 +#define int16 int +#elif __LONG_MAX__ == 32767 +#define int16 long +#else +#define int16 short +#endif #endif typedef unsigned int16 uint16; #ifndef int32 +#if __INT_MAX__ == 2147483647 +#define int32 int +#elif __LONG_MAX__ == 2147483647 #define int32 long +#elif __SHRT_MAX__ == 2147483647 +#define int32 short +#else +#define int32 int +#endif #endif typedef unsigned int32 uint32; /* A signed 64-bit (or more) integral type, suitable for Java's 'long'. */ #ifndef int64 +#if __LONG_MAX__ == 9223372036854775807LL +#define int64 long +#elif __LONG_LONG_MAX__ == 9223372036854775807LL #define int64 long long +#else +#define int64 long long +#endif #endif /* An unsigned 64-bit (or more) integral type, same length as int64. */ #ifndef uint64 @@ -82,8 +104,15 @@ typedef struct _jdouble { #ifndef jword +#if defined (__LP64__) || defined (__alpha__) || defined (__MMIX__) \ + || (defined (_ARCH_PPC) && defined (__64BIT__)) \ + || defined (__powerpc64__) || defined (__s390x__) || defined (__x86_64__) \ + || defined (__sparcv9) || (defined (__sparc__) && defined (__arch64__)) +#define jword uint64 +#else #define jword uint32 #endif +#endif #ifndef IMMEDIATE_u1 #define IMMEDIATE_u1 (PC++, CHECK_PC_IN_RANGE(PC), BCODE[PC-1]) diff --git a/gcc/java/jcf-dump.c b/gcc/java/jcf-dump.c index b02dfceabe27..b3246daff5ac 100644 --- a/gcc/java/jcf-dump.c +++ b/gcc/java/jcf-dump.c @@ -574,7 +574,7 @@ print_constant (FILE *out, JCF *jcf, int index, int verbosity) } if (verbosity > 1) - fprintf (out, ", bits = 0x%08lx", JPOOL_UINT (jcf, index)); + fprintf (out, ", bits = 0x%08lx", (long) JPOOL_UINT (jcf, index)); break; } -- GitLab