* src/vm/jit/arm/codegen.c (codegen) [!ENABLE_SOFTFLOAT]: Fixed position of
authormichi <none@none>
Thu, 22 Mar 2007 13:55:44 +0000 (13:55 +0000)
committermichi <none@none>
Thu, 22 Mar 2007 13:55:44 +0000 (13:55 +0000)
soft null pointer checks in PUTFIELD and GETFIELD.

src/vm/jit/arm/codegen.c

index 677763248c594144ea63683ed451679d25e9343a..09734d0bc142b43b2e35fb9d05eaf2e89cf00d34 100644 (file)
@@ -22,7 +22,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: codegen.c 7519 2007-03-14 17:31:05Z michi $
+   $Id: codegen.c 7554 2007-03-22 13:55:44Z michi $
 
 */
 
@@ -1550,6 +1550,19 @@ bool codegen(jitdata *jd)
 
                        s1 = emit_load_s1(jd, iptr, REG_ITMP3);
                        gen_nullptr_check(s1);
+
+                       if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
+                               unresolved_field *uf = iptr->sx.s23.s3.uf;
+
+                               fieldtype = uf->fieldref->parseddesc.fd->type;
+                       }
+                       else {
+                               fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
+
+                               fieldtype = fi->type;
+                               disp      = fi->offset;
+                       }
+
 #if !defined(ENABLE_SOFTFLOAT)
                        /* HACK: softnull checks on floats */
                        if (!checknull && IS_FLT_DBL_TYPE(fieldtype))
@@ -1559,22 +1572,13 @@ bool codegen(jitdata *jd)
                        if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
                                unresolved_field *uf = iptr->sx.s23.s3.uf;
 
-                               fieldtype = uf->fieldref->parseddesc.fd->type;
-
-                               codegen_addpatchref(cd, PATCHER_get_putfield,
-                                                                       iptr->sx.s23.s3.uf, 0);
+                               codegen_addpatchref(cd, PATCHER_get_putfield, uf, 0);
 
                                if (opt_showdisassemble)
                                        M_NOP;
 
                                disp = 0;
                        }
-                       else {
-                               fieldinfo *fi = iptr->sx.s23.s3.fmiref->p.field;
-
-                               fieldtype = fi->type;
-                               disp      = fi->offset;
-                       }
 
                        switch (fieldtype) {
                        case TYPE_INT:
@@ -1613,12 +1617,6 @@ bool codegen(jitdata *jd)
                        s1 = emit_load_s1(jd, iptr, REG_ITMP3);
                        gen_nullptr_check(s1);
 
-#if !defined(ENABLE_SOFTFLOAT)
-                       /* HACK: softnull checks on floats */
-                       if (!checknull && IS_FLT_DBL_TYPE(fieldtype))
-                               gen_nullptr_check_intern(s1);
-#endif
-
                        if (INSTRUCTION_IS_UNRESOLVED(iptr)) {
                                unresolved_field *uf = iptr->sx.s23.s3.uf;
 
@@ -1631,6 +1629,12 @@ bool codegen(jitdata *jd)
                                disp      = fi->offset;
                        }
 
+#if !defined(ENABLE_SOFTFLOAT)
+                       /* HACK: softnull checks on floats */
+                       if (!checknull && IS_FLT_DBL_TYPE(fieldtype))
+                               gen_nullptr_check_intern(s1);
+#endif
+
                        switch (fieldtype) {
                        case TYPE_INT:
 #if defined(ENABLE_SOFTFLOAT)