335 if ((iptr->
sx.
val.
i >= -32768) && (iptr->
sx.
val.
i <= 32767)) {
360 if ((iptr->
sx.
val.
l >= -32768) && (iptr->
sx.
val.
l <= 32767)) {
384 if ((iptr->
sx.
val.
i >= -32767) && (iptr->
sx.
val.
i <= 32768)) {
409 if ((iptr->
sx.
val.
l >= -32767) && (iptr->
sx.
val.
l <= 32767)) {
507 if ((iptr->
sx.
val.
i >= -32768) && (iptr->
sx.
val.
i <= 32767))
519 if ((iptr->
sx.
val.
l >= -32767) && (iptr->
sx.
val.
l <= 32767))
596 if (iptr->
sx.
val.
i & 0x1f) {
671 if ((iptr->
sx.
val.
i >= 0) && (iptr->
sx.
val.
i <= 65535)) {
723 if (iptr->
sx.
val.
i >= 32768) {
732 int b=0, m = iptr->
sx.
val.
i;
834 vm_abort(
"codegen: implement ICMD_LCMP!");
1218 uf = iptr->
sx.
s23.s3.uf;
1225 fi = iptr->
sx.
s23.s3.fmiref->p.field;
1226 fieldtype = fi->
type;
1231 switch (fieldtype) {
1264 uf = iptr->
sx.
s23.s3.uf;
1269 fi = iptr->
sx.
s23.s3.fmiref->p.field;
1270 fieldtype = fi->
type;
1286 switch (fieldtype) {
1288 M_IST(s2, s1, disp);
1291 M_LST(s2, s1, disp);
1294 M_AST(s2, s1, disp);
1297 M_FST(s2, s1, disp);
1300 M_DST(s2, s1, disp);
1409 l = iptr->
sx.
s23.s2.tablelow;
1410 i = iptr->
sx.
s23.s3.tablehigh;
1415 }
else if (l <= 32768) {
1428 emit_bgt(cd, table[0].
block);
1452 bte = iptr->
sx.
s23.s3.bte;
1453 if (bte->
stub == NULL) {
1474 um = iptr->
sx.
s23.s3.um;
1480 lm = iptr->
sx.
s23.s3.fmiref->p.method;
1493 um = iptr->
sx.
s23.s3.um;
1497 lm = iptr->
sx.
s23.s3.fmiref->p.method;
1514 um = iptr->
sx.
s23.s3.um;
1521 lm = iptr->
sx.
s23.s3.fmiref->p.method;
1566 super = iptr->
sx.
s23.s3.c.cls;
1567 superindex = super->
index;
1574 if (super == NULL) {
1581 iptr->
sx.
s23.s3.c.ref,
1593 if (super == NULL) {
1596 iptr->
sx.
s23.s3.c.ref,
1613 if (super == NULL) {
1623 if (super == NULL) {
1628 iptr->
sx.
s23.s3.c.ref,
1639 if (super == NULL || super->
vftbl->subtype_depth >= DISPLAY_SIZE) {
1646 if (super == NULL) {
1689 if (super == NULL) {
1705 iptr->
sx.
s23.s3.c.ref,
1753 super = iptr->
sx.
s23.s3.c.cls;
1754 superindex = super->
index;
1766 if (super == NULL) {
1773 iptr->
sx.
s23.s3.c.ref, disp);
1783 if (super == NULL) {
1791 iptr->
sx.
s23.s3.c.ref, 0);
1811 if (super == NULL) {
1822 if (super == NULL) {
1827 iptr->
sx.
s23.s3.c.ref,
1841 if (super == NULL || super->
vftbl->subtype_depth >= DISPLAY_SIZE) {
1851 if (super == NULL) {
1898 if (super == NULL) {
1915 var =
VAR(iptr->
sx.
s23.s2.args[s1]);
1921 #if defined(__DARWIN__)
1939 iptr->
sx.
s23.s3.c.ref, disp);
1950 #if defined(__DARWIN__)
1971 vm_abort(
"Unknown ICMD %d during code generation", iptr->
opc);
2095 for (i = md->
paramcount - 1, j = i + skipparams; i >= 0; i--, j--) {
void codegen_emit_instruction(jitdata *jd, instruction *iptr)
Generates machine code for one ICMD.
s4 dseg_add_double(codegendata *cd, double value)
#define BUILTIN_FAST_canstore
#define PATCHER_resolve_classref_to_flags
s4 emit_load_s3(jitdata *jd, instruction *iptr, s4 tempreg)
s4 emit_load_s1(jitdata *jd, instruction *iptr, s4 tempreg)
#define M_ALD(a, b, disp)
#define PATCHER_invokeinterface
#define M_RLDICL(a, b, c, d)
#define M_LST(a, b, disp)
#define M_RLWINM(a, b, c, d, e)
#define M_ILD(a, b, disp)
s4 dseg_add_unique_address(codegendata *cd, void *value)
#define PATCHER_resolve_classref_to_vftbl
#define BUILTIN_multianewarray
#define IS_INT_LNG_TYPE(a)
#define M_IST(a, b, disp)
#define M_LDA(a, b, disp)
#define PATCHER_get_putfield
s4 dseg_add_address(codegendata *cd, void *value)
#define M_OR_IMM(a, b, c)
#define dseg_add_functionptr(cd, value)
void codegen_emit_stub_native(jitdata *jd, methoddesc *nmd, functionptr f, int skipparams)
typedef void(JNICALL *jvmtiEventSingleStep)(jvmtiEnv *jvmti_env
#define M_LDATST(a, b, c)
#define M_STFIWX(a, b, c)
void emit_arraystore_check(codegendata *cd, instruction *iptr)
#define M_FST(a, b, disp)
patchref_t * patcher_add_patch_ref(jitdata *jd, functionptr patcher, void *ref, s4 disp)
#define M_FLD(a, b, disp)
void dseg_add_target(codegendata *cd, basicblock *target)
java_object_t * codegen_finish_native_call(u1 *sp, u1 *pv)
#define M_MUL_IMM(a, b, c)
static int code_is_leafmethod(codeinfo *code)
#define BUILTIN_arraycheckcast
void vm_abort(const char *text,...)
void(* functionptr)(void)
java_handle_t * codegen_start_native_call(u1 *sp, u1 *pv)
#define PATCHER_instanceof_interface
#define IS_2_WORD_TYPE(a)
void emit_exception_check(codegendata *cd, instruction *iptr)
s4 codegen_reg_of_dst(jitdata *jd, instruction *iptr, s4 tempregnum)
#define M_LWZ(a, b, disp)
#define M_XOR_IMM(a, b, c)
#define M_STDU(a, b, disp)
constant_FMIref * fieldref
void emit_label_br(codegendata *cd, s4 label)
s4 emit_load_s2(jitdata *jd, instruction *iptr, s4 tempreg)
#define M_SRL_IMM(a, b, c)
s4 emit_load(jitdata *jd, instruction *iptr, varinfo *src, s4 tempreg)
s4 dseg_add_unique_s4(codegendata *cd, s4 value)
#define M_AST(a, b, disp)
union instruction::@12 sx
void emit_arithmetic_check(codegendata *cd, instruction *iptr, s4 reg)
#define PACK_REGS(low, high)
#define PATCHER_checkcast_interface
void emit_store_dst(jitdata *jd, instruction *iptr, s4 d)
#define M_LADD_IMM(a, b, c)
#define PATCHER_invokestatic_special
#define M_SRA_IMM(a, b, c)
#define M_AND_IMM(a, b, c)
#define PATCHER_invokevirtual
#define M_SLL_IMM(a, b, c)
static bool IS_INMEMORY(s4 flags)
void codegen_emit_epilog(jitdata *jd)
Generates machine code for the method epilog.
#define M_LLD_INTERN(a, b, disp)
#define M_AST_INTERN(a, b, c)
void emit_classcast_check(codegendata *cd, instruction *iptr, s4 condition, s4 reg, s4 s1)
#define M_DST(a, b, disp)
#define INSTRUCTION_IS_UNRESOLVED(iptr)
struct instruction::@12::@13 s23
void codegen_emit_prolog(jitdata *jd)
Generates machine code for the method prolog.
#define M_LLD(a, b, disp)
const parseddesc_t parseddesc
static void emit_fmove(codegendata *cd, int s, int d)
Generates a float-move from register s to d.
#define PATCHER_resolve_classref_to_classinfo
void emit_label(codegendata *cd, s4 label)
#define M_IADD_IMM(a, b, c)
void emit_arrayindexoutofbounds_check(codegendata *cd, instruction *iptr, s4 s1, s4 s2)
#define M_DLD(a, b, disp)
s4 dseg_add_float(codegendata *cd, float value)
void emit_nullpointer_check(codegendata *cd, instruction *iptr, s4 reg)
static VM * get_current()