This module generates MIPS machine code for a sequence of
intermediate code commands (ICMDs).
- $Id: codegen.c 4744 2006-04-06 12:51:53Z twisti $
+ $Id: codegen.c 4760 2006-04-12 20:06:23Z edwin $
*/
case ICMD_GETSTATIC: /* ... ==> ..., value */
/* op1 = type, val.a = field address */
- if (iptr->val.a == NULL) {
+ if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
disp = dseg_addaddress(cd, NULL);
codegen_addpatchref(cd, mcodeptr,
PATCHER_get_putstatic,
- (unresolved_field *) iptr->target, disp);
+ INSTRUCTION_UNRESOLVED_FIELD(iptr), disp);
if (opt_showdisassemble) {
M_NOP; M_NOP;
}
} else {
- fieldinfo *fi = iptr->val.a;
+ fieldinfo *fi = INSTRUCTION_RESOLVED_FIELDINFO(iptr);
disp = dseg_addaddress(cd, &(fi->value));
case ICMD_PUTSTATIC: /* ..., value ==> ... */
/* op1 = type, val.a = field address */
- if (iptr->val.a == NULL) {
+ if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
disp = dseg_addaddress(cd, NULL);
codegen_addpatchref(cd, mcodeptr,
PATCHER_get_putstatic,
- (unresolved_field *) iptr->target, disp);
+ INSTRUCTION_UNRESOLVED_FIELD(iptr), disp);
if (opt_showdisassemble) {
M_NOP; M_NOP;
}
} else {
- fieldinfo *fi = iptr->val.a;
+ fieldinfo *fi = INSTRUCTION_RESOLVED_FIELDINFO(iptr);
disp = dseg_addaddress(cd, &(fi->value));
/* op1 = type, val.a = field address (in */
/* following NOP) */
- if (iptr[1].val.a == NULL) {
+ if (INSTRUCTION_IS_UNRESOLVED(iptr + 1)) {
disp = dseg_addaddress(cd, NULL);
codegen_addpatchref(cd, mcodeptr,
PATCHER_get_putstatic,
- (unresolved_field *) iptr[1].target, disp);
+ INSTRUCTION_UNRESOLVED_FIELD(iptr + 1), disp);
if (opt_showdisassemble) {
M_NOP; M_NOP;
}
} else {
- fieldinfo *fi = iptr[1].val.a;
+ fieldinfo *fi = INSTRUCTION_RESOLVED_FIELDINFO(iptr + 1);
disp = dseg_addaddress(cd, &(fi->value));
var_to_reg_int(s1, src, REG_ITMP1);
gen_nullptr_check(s1);
- if (iptr->val.a == NULL) {
+ if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
codegen_addpatchref(cd, mcodeptr,
PATCHER_get_putfield,
- (unresolved_field *) iptr->target, 0);
+ INSTRUCTION_UNRESOLVED_FIELD(iptr), 0);
if (opt_showdisassemble) {
M_NOP; M_NOP;
a = 0;
} else {
- a = ((fieldinfo *) (iptr->val.a))->offset;
+ a = INSTRUCTION_RESOLVED_FIELDINFO(iptr)->offset;
}
switch (iptr->op1) {
var_to_reg_flt(s2, src, REG_FTMP2);
}
- if (iptr->val.a == NULL) {
+ if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
codegen_addpatchref(cd, mcodeptr,
PATCHER_get_putfield,
- (unresolved_field *) iptr->target, 0);
+ INSTRUCTION_UNRESOLVED_FIELD(iptr), 0);
if (opt_showdisassemble) {
M_NOP; M_NOP;
a = 0;
} else {
- a = ((fieldinfo *) (iptr->val.a))->offset;
+ a = INSTRUCTION_RESOLVED_FIELDINFO(iptr)->offset;
}
switch (iptr->op1) {
var_to_reg_int(s1, src, REG_ITMP1);
gen_nullptr_check(s1);
- if (iptr[1].val.a == NULL) {
+ if (INSTRUCTION_IS_UNRESOLVED(iptr + 1)) {
codegen_addpatchref(cd, mcodeptr,
PATCHER_get_putfield,
- (unresolved_field *) iptr[1].target, 0);
+ INSTRUCTION_UNRESOLVED_FIELD(iptr + 1), 0);
if (opt_showdisassemble) {
M_NOP; M_NOP;
a = 0;
} else {
- a = ((fieldinfo *) (iptr[1].val.a))->offset;
+ a = INSTRUCTION_RESOLVED_FIELDINFO(iptr + 1)->offset;
}
switch (iptr[1].op1) {
case ICMD_INVOKEVIRTUAL:/* op1 = arg count, val.a = method pointer */
case ICMD_INVOKEINTERFACE:
- lm = iptr->val.a;
-
- if (lm == NULL) {
- unresolved_method *um = iptr->target;
- md = um->methodref->parseddesc.md;
- } else {
+ if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
+ md = INSTRUCTION_UNRESOLVED_METHOD(iptr)->methodref->parseddesc.md;
+ lm = NULL;
+ }
+ else {
+ lm = INSTRUCTION_RESOLVED_METHODINFO(iptr);
md = lm->parseddesc;
}
case ICMD_INVOKESTATIC:
if (lm == NULL) {
- unresolved_method *um = iptr->target;
+ unresolved_method *um = INSTRUCTION_UNRESOLVED_METHOD(iptr);
disp = dseg_addaddress(cd, NULL);
gen_nullptr_check(rd->argintregs[0]);
if (lm == NULL) {
- unresolved_method *um = iptr->target;
+ unresolved_method *um = INSTRUCTION_UNRESOLVED_METHOD(iptr);
codegen_addpatchref(cd, mcodeptr,
PATCHER_invokevirtual, um, 0);
gen_nullptr_check(rd->argintregs[0]);
if (lm == NULL) {
- unresolved_method *um = iptr->target;
+ unresolved_method *um = INSTRUCTION_UNRESOLVED_METHOD(iptr);
codegen_addpatchref(cd, mcodeptr,
PATCHER_invokeinterface, um, 0);