Christian Ullrich
Edwin Steiner
- $Id: codegen.c 5942 2006-11-09 10:52:34Z twisti $
+ $Id: codegen.c 5943 2006-11-09 15:27:03Z twisti $
*/
codegen_addpatchref(cd, PATCHER_resolve_classref_to_classinfo,
cr, disp);
-
- if (opt_shownops)
- M_NOP;
}
else
disp = dseg_add_address(cd, iptr->sx.val.anyptr);
M_FCMPU(s1, s2);
M_BNAN(1);
M_BEQ(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_FCMPNE: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_FTMP2);
M_FCMPU(s1, s2);
M_BNAN(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BNE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
s2 = emit_load_s2(jd, iptr, REG_FTMP2);
M_FCMPU(s1, s2);
M_BNAN(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_FCMPL_GT: /* ..., value, value ==> ... */
M_FCMPU(s1, s2);
M_BNAN(1);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_FCMPL_LE: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_FTMP2);
M_FCMPU(s1, s2);
M_BNAN(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BLE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_FCMPL_GE: /* ..., value, value ==> ... */
M_FCMPU(s1, s2);
M_BNAN(1);
M_BGE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_FCMPG_LT: /* ..., value, value ==> ... */
M_FCMPU(s1, s2);
M_BNAN(1);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_FCMPG_GT: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_FTMP2);
M_FCMPU(s1, s2);
M_BNAN(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_FCMPG_LE: /* ..., value, value ==> ... */
M_FCMPU(s1, s2);
M_BNAN(1);
M_BLE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_FCMPG_GE: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_FTMP2);
M_FCMPU(s1, s2);
M_BNAN(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BGE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
disp = dseg_add_unique_address(cd, uf);
codegen_addpatchref(cd, PATCHER_get_putstatic, uf, disp);
-
- if (opt_shownops)
- M_NOP;
}
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
disp = dseg_add_address(cd, &(fi->value));
- if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
+ if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
codegen_addpatchref(cd, PATCHER_initialize_class,
fi->class, disp);
-
- if (opt_shownops)
- M_NOP;
- }
}
M_ALD(REG_ITMP1, REG_PV, disp);
disp = dseg_add_unique_address(cd, uf);
codegen_addpatchref(cd, PATCHER_get_putstatic, uf, disp);
-
- if (opt_shownops)
- M_NOP;
}
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
fieldtype = fi->type;
disp = dseg_add_address(cd, &(fi->value));
- if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class)) {
+ if (!CLASS_IS_OR_ALMOST_INITIALIZED(fi->class))
codegen_addpatchref(cd, PATCHER_initialize_class,
fi->class, disp);
-
- if (opt_shownops)
- M_NOP;
- }
}
M_ALD(REG_ITMP1, REG_PV, disp);
disp = 0;
codegen_addpatchref(cd, PATCHER_get_putfield, uf, 0);
-
- if (opt_shownops)
- M_NOP;
}
else {
fi = iptr->sx.s23.s3.fmiref->p.field;
else
s2 = emit_load_s2(jd, iptr, REG_FTMP2);
- if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
+ if (INSTRUCTION_IS_UNRESOLVED(iptr))
codegen_addpatchref(cd, PATCHER_get_putfield, uf, 0);
- if (opt_shownops)
- M_NOP;
- }
-
switch (fieldtype) {
case TYPE_INT:
M_IST(s2, s1, disp);
unresolved_class *uc = iptr->sx.s23.s2.uc;
codegen_addpatchref(cd, PATCHER_resolve_class, uc, 0);
-
- if (opt_shownops)
- M_NOP;
}
#endif /* ENABLE_VERIFIER */
case ICMD_RET: /* ... ==> ... */
M_BR(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
ALIGNCODENOP;
break;
case ICMD_JSR: /* ... ==> ... */
M_BR(0);
- codegen_addreference(cd, iptr->sx.s23.s3.jsrtarget.block);
+ codegen_add_branch_ref(cd, iptr->sx.s23.s3.jsrtarget.block);
ALIGNCODENOP;
break;
s1 = emit_load_s1(jd, iptr, REG_ITMP1);
M_TST(s1);
M_BEQ(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IFNONNULL: /* ..., value ==> ... */
s1 = emit_load_s1(jd, iptr, REG_ITMP1);
M_TST(s1);
M_BNE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IFLT:
M_BEQ(0);
break;
}
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
M_OR_TST(REG_ITMP1, REG_ITMP2, REG_ITMP3);
}
M_BEQ(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LLT: /* ..., value ==> ... */
else if ((iptr->sx.val.l >= 0) && (iptr->sx.val.l <= 0xffff)) {
M_CMPI(s2, 0);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BGT(2);
M_CMPUI(s1, iptr->sx.val.l & 0xffff);
}
ICONST(REG_ITMP3, iptr->sx.val.l >> 32);
M_CMP(s2, REG_ITMP3);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BGT(3);
ICONST(REG_ITMP3, iptr->sx.val.l & 0xffffffff);
M_CMPU(s1, REG_ITMP3);
}
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LLE: /* ..., value ==> ... */
if ((iptr->sx.val.l >= 0) && (iptr->sx.val.l <= 0xffff)) {
M_CMPI(s2, 0);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BGT(2);
M_CMPUI(s1, iptr->sx.val.l & 0xffff);
}
ICONST(REG_ITMP3, iptr->sx.val.l >> 32);
M_CMP(s2, REG_ITMP3);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BGT(3);
ICONST(REG_ITMP3, iptr->sx.val.l & 0xffffffff);
M_CMPU(s1, REG_ITMP3);
}
M_BLE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LNE: /* ..., value ==> ... */
M_OR_TST(REG_ITMP1, REG_ITMP2, REG_ITMP3);
}
M_BNE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LGT: /* ..., value ==> ... */
if ((iptr->sx.val.l >= 0) && (iptr->sx.val.l <= 0xffff)) {
M_CMPI(s2, 0);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BLT(2);
M_CMPUI(s1, iptr->sx.val.l & 0xffff);
}
ICONST(REG_ITMP3, iptr->sx.val.l >> 32);
M_CMP(s2, REG_ITMP3);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BLT(3);
ICONST(REG_ITMP3, iptr->sx.val.l & 0xffffffff);
M_CMPU(s1, REG_ITMP3);
}
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LGE: /* ..., value ==> ... */
else if ((iptr->sx.val.l >= 0) && (iptr->sx.val.l <= 0xffff)) {
M_CMPI(s2, 0);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BLT(2);
M_CMPUI(s1, iptr->sx.val.l & 0xffff);
}
ICONST(REG_ITMP3, iptr->sx.val.l >> 32);
M_CMP(s2, REG_ITMP3);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
M_BLT(3);
ICONST(REG_ITMP3, iptr->sx.val.l & 0xffffffff);
M_CMPU(s1, REG_ITMP3);
}
M_BGE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_ICMPEQ: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BEQ(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LCMPEQ: /* ..., value, value ==> ... */
M_BNE(2);
M_CMP(s1, s2);
M_BEQ(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_ICMPNE: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BNE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LCMPNE: /* ..., value, value ==> ... */
s2 = emit_load_s2_high(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BNE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
s1 = emit_load_s1_low(jd, iptr, REG_ITMP1);
s2 = emit_load_s2_low(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BNE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_ICMPLT: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LCMPLT: /* ..., value, value ==> ... */
s2 = emit_load_s2_high(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
/* load low-bits before the branch, so we know the distance */
s1 = emit_load_s1_low(jd, iptr, REG_ITMP1);
s2 = emit_load_s2_low(jd, iptr, REG_ITMP2);
M_BGT(2);
M_CMPU(s1, s2);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_ICMPGT: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LCMPGT: /* ..., value, value ==> ... */
s2 = emit_load_s2_high(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
/* load low-bits before the branch, so we know the distance */
s1 = emit_load_s1_low(jd, iptr, REG_ITMP1);
s2 = emit_load_s2_low(jd, iptr, REG_ITMP2);
M_BLT(2);
M_CMPU(s1, s2);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_ICMPLE: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BLE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LCMPLE: /* ..., value, value ==> ... */
s2 = emit_load_s2_high(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BLT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
/* load low-bits before the branch, so we know the distance */
s1 = emit_load_s1_low(jd, iptr, REG_ITMP1);
s2 = emit_load_s2_low(jd, iptr, REG_ITMP2);
M_BGT(2);
M_CMPU(s1, s2);
M_BLE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_ICMPGE: /* ..., value, value ==> ... */
s2 = emit_load_s2(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BGE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IF_LCMPGE: /* ..., value, value ==> ... */
s2 = emit_load_s2_high(jd, iptr, REG_ITMP2);
M_CMP(s1, s2);
M_BGT(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
/* load low-bits before the branch, so we know the distance */
s1 = emit_load_s1_low(jd, iptr, REG_ITMP1);
s2 = emit_load_s2_low(jd, iptr, REG_ITMP2);
M_BLT(2);
M_CMPU(s1, s2);
M_BGE(0);
- codegen_addreference(cd, iptr->dst.block);
+ codegen_add_branch_ref(cd, iptr->dst.block);
break;
case ICMD_IRETURN: /* ..., retvalue ==> ... */
unresolved_class *uc = iptr->sx.s23.s2.uc;
codegen_addpatchref(cd, PATCHER_resolve_class, uc, 0);
-
- if (opt_shownops)
- M_NOP;
}
#endif /* ENABLE_VERIFIER */
goto nowperformreturn;
M_CMPUI(REG_ITMP1, i - 1);
M_BGT(0);
- codegen_addreference(cd, table[0].block);
+ codegen_add_branch_ref(cd, table[0].block);
/* build jump table top down and use address of lowest entry */
M_CMP(s1, REG_ITMP2);
}
M_BEQ(0);
- codegen_addreference(cd, lookup->target.block);
+ codegen_add_branch_ref(cd, lookup->target.block);
lookup++;
}
M_BR(0);
- codegen_addreference(cd, iptr->sx.s23.s3.lookupdefault.block);
+ codegen_add_branch_ref(cd, iptr->sx.s23.s3.lookupdefault.block);
ALIGNCODENOP;
break;
codegen_addpatchref(cd, PATCHER_invokestatic_special,
um, disp);
-
- if (opt_shownops)
- M_NOP;
}
else
disp = dseg_add_address(cd, lm->stubroutine);
if (lm == NULL) {
codegen_addpatchref(cd, PATCHER_invokevirtual, um, 0);
- if (opt_shownops)
- M_NOP;
-
s1 = 0;
}
else {
if (lm == NULL) {
codegen_addpatchref(cd, PATCHER_invokeinterface, um, 0);
- if (opt_shownops)
- M_NOP;
-
s1 = 0;
s2 = 0;
}
iptr->sx.s23.s3.c.ref,
disp);
- if (opt_shownops)
- M_NOP;
-
M_ILD(REG_ITMP2, REG_PV, disp);
M_AND_IMM(REG_ITMP2, ACC_INTERFACE, REG_ITMP2);
M_BEQ(s2 + 1);
PATCHER_checkcast_instanceof_interface,
iptr->sx.s23.s3.c.ref,
0);
-
- if (opt_shownops)
- M_NOP;
}
else {
M_TST(s1);
codegen_addpatchref(cd, PATCHER_resolve_classref_to_vftbl,
iptr->sx.s23.s3.c.ref,
disp);
-
- if (opt_shownops)
- M_NOP;
}
else {
disp = dseg_add_address(cd, super->vftbl);
codegen_addpatchref(cd, PATCHER_resolve_classref_to_classinfo,
iptr->sx.s23.s3.c.ref,
disp);
-
- if (opt_shownops)
- M_NOP;
}
else
disp = dseg_add_address(cd, iptr->sx.s23.s3.c.cls);
codegen_addpatchref(cd, PATCHER_resolve_classref_to_flags,
iptr->sx.s23.s3.c.ref, disp);
- if (opt_shownops)
- M_NOP;
-
M_ILD(REG_ITMP3, REG_PV, disp);
M_AND_IMM(REG_ITMP3, ACC_INTERFACE, REG_ITMP3);
M_BEQ(s2 + 1);
codegen_addpatchref(cd,
PATCHER_checkcast_instanceof_interface,
iptr->sx.s23.s3.c.ref, 0);
-
- if (opt_shownops)
- M_NOP;
}
else {
M_TST(s1);
codegen_addpatchref(cd, PATCHER_resolve_classref_to_vftbl,
iptr->sx.s23.s3.c.ref,
disp);
-
- if (opt_shownops)
- M_NOP;
}
else {
disp = dseg_add_address(cd, super->vftbl);
codegen_addpatchref(cd, PATCHER_resolve_classref_to_classinfo,
iptr->sx.s23.s3.c.ref, disp);
-
- if (opt_shownops)
- M_NOP;
}
else
disp = dseg_add_address(cd, iptr->sx.s23.s3.c.cls);
funcdisp = dseg_add_functionptr(cd, f);
#if !defined(WITH_STATIC_CLASSPATH)
- if (f == NULL) {
+ if (f == NULL)
codegen_addpatchref(cd, PATCHER_resolve_native_function, m, funcdisp);
-
- if (opt_shownops)
- M_NOP;
- }
#endif
/* save integer and float argument registers */