#ifndef GCC_JAVAOP_H
#define GCC_JAVAOP_H
typedef unsigned char uint8;
#ifndef int16
#define int16 short
#endif
typedef unsigned int16 uint16;
#ifndef int32
#define int32 long
#endif
typedef unsigned int32 uint32;
#ifndef int64
#define int64 long long
#endif
#ifndef uint64
#define uint64 unsigned int64
#endif
typedef uint16 jchar;
#ifdef __STDC__
typedef signed char jbyte;
#else
typedef char jbyte;
#endif
typedef int16 jshort;
typedef int32 jint;
typedef int64 jlong;
typedef void* jref;
#ifndef jfloat
#define jfloat float
#endif
#ifndef jdouble
#define jdouble double
#endif
union Word {
jint i;
jfloat f;
void *p;
};
#ifndef jword
#define jword uint32
#endif
#ifndef IMMEDIATE_u1
#define IMMEDIATE_u1 (PC++, CHECK_PC_IN_RANGE(PC), BCODE[PC-1])
#endif
#ifndef IMMEDIATE_s1
#define IMMEDIATE_s1 (PC++, CHECK_PC_IN_RANGE(PC), (signed char)BCODE[PC-1])
#endif
#ifndef IMMEDIATE_s2
#define IMMEDIATE_s2 (PC+=2, CHECK_PC_IN_RANGE(PC), \
(signed char) BCODE[PC-2] * 256 + BCODE[PC-1])
#endif
#ifndef IMMEDIATE_u2
#define IMMEDIATE_u2 (PC+=2, CHECK_PC_IN_RANGE(PC),\
(BCODE[PC-2] * 256 + BCODE[PC-1]))
#endif
#ifndef IMMEDIATE_s4
#define IMMEDIATE_s4 (PC+=4, CHECK_PC_IN_RANGE(PC), \
(WORD_TO_INT((BCODE[PC-4] << 24) | (BCODE[PC-3] << 16) \
| (BCODE[PC-2] << 8) | (BCODE[PC-1]))))
#endif
static inline jfloat
WORD_TO_FLOAT(jword w)
{ union Word wu;
wu.i = w;
return wu.f;
}
static inline jint
WORD_TO_INT(jword w)
{
jint n = w & 0xffffffff;
n ^= (jint)1 << 31;
n -= (jint)1 << 31;
return n;
}
static inline jlong
WORDS_TO_LONG(jword hi, jword lo)
{
return ((jlong) hi << 32) | ((jlong)lo & (((jlong)1 << 32) -1));
}
union DWord {
jdouble d;
jlong l;
jword w[2];
};
static inline jdouble
WORDS_TO_DOUBLE(jword hi, jword lo)
{ union DWord wu;
#if (1 == HOST_FLOAT_WORDS_BIG_ENDIAN)
wu.l = WORDS_TO_LONG(lo, hi);
#else
wu.l = WORDS_TO_LONG(hi, lo);
#endif
return wu.d;
}
#define UT8_CHAR_LENGTH(PREFIX_CHAR) \
((unsigned char)(PREFIX_CHAR) < 128 ? 1 \
: ((PREFIX_CHAR) & 0x40) == 0 ? -1 \
: ((PREFIX_CHAR) & 0x20) == 0 ? 2 \
: ((PREFIX_CHAR) & 0x10) == 0 ? 3 \
: ((PREFIX_CHAR) & 0x08) == 0 ? 4 : 5)
#endif