diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 9c8373333ce1fc70d9723c6d38361f0942d6c45b..0c17d5836f184bf58df3db21d5c73e5e56a2ee84 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 18c3a2886349554224f0b5bd15e10572e4bcaf35..12e001600beee6cfa394ce8ec3ac70109c66b93b 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 b02dfceabe27c71cca363a6df48cb1351e812cbc..b3246daff5aca60bb3ce74b18b5b700d4db4a9c9 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; }