* src/vm/jit/parse.c (parse): New unresolved reference scheme: Data structures
[cacao.git] / src / vm / jit / mips / codegen.c
index 416c534481362f659ea4e8e94bcf8c26a999b21c..d8e2faeec36cffe666c194b969520b85b8651585 100644 (file)
@@ -35,7 +35,7 @@
    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 $
 
 */
 
@@ -1857,19 +1857,19 @@ bool codegen(jitdata *jd)
                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));
 
@@ -1916,19 +1916,19 @@ bool codegen(jitdata *jd)
                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));
 
@@ -1972,19 +1972,19 @@ bool codegen(jitdata *jd)
                                          /* 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));
 
@@ -2025,10 +2025,10 @@ bool codegen(jitdata *jd)
                        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;
@@ -2037,7 +2037,7 @@ bool codegen(jitdata *jd)
                                a = 0;
 
                        } else {
-                               a = ((fieldinfo *) (iptr->val.a))->offset;
+                               a = INSTRUCTION_RESOLVED_FIELDINFO(iptr)->offset;
                        }
 
                        switch (iptr->op1) {
@@ -2081,10 +2081,10 @@ bool codegen(jitdata *jd)
                                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;
@@ -2093,7 +2093,7 @@ bool codegen(jitdata *jd)
                                a = 0;
 
                        } else {
-                               a = ((fieldinfo *) (iptr->val.a))->offset;
+                               a = INSTRUCTION_RESOLVED_FIELDINFO(iptr)->offset;
                        }
 
                        switch (iptr->op1) {
@@ -2123,10 +2123,10 @@ bool codegen(jitdata *jd)
                        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;
@@ -2135,7 +2135,7 @@ bool codegen(jitdata *jd)
                                a = 0;
 
                        } else {
-                               a = ((fieldinfo *) (iptr[1].val.a))->offset;
+                               a = INSTRUCTION_RESOLVED_FIELDINFO(iptr + 1)->offset;
                        }
 
                        switch (iptr[1].op1) {
@@ -2983,12 +2983,12 @@ nowperformreturn:
                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;
                        }
 
@@ -3052,7 +3052,7 @@ gen_method:
 
                        case ICMD_INVOKESTATIC:
                                if (lm == NULL) {
-                                       unresolved_method *um = iptr->target;
+                                       unresolved_method *um = INSTRUCTION_UNRESOLVED_METHOD(iptr);
 
                                        disp = dseg_addaddress(cd, NULL);
 
@@ -3081,7 +3081,7 @@ gen_method:
                                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);
@@ -3112,7 +3112,7 @@ gen_method:
                                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);