* src/vm/jit/parse.c (CHECKCAST): Set check-flag.
[cacao.git] / src / vm / jit / parse.c
index 765ce521409aa16b48c7a26c550a11e634233e7b..9a8e4e4cb99e0ae78203f079c29ec375a326fb9e 100644 (file)
 
    Contact: cacao@cacaojvm.org
 
-   Author: Andreas Krall
-
-   Changes: Carolyn Oates
+   Authors: Andreas Krall
+            Carolyn Oates
             Edwin Steiner
             Joseph Wenninger
             Christian Thalinger
 
-   $Id: parse.c 5909 2006-11-05 10:22:37Z edwin $
+   $Id: parse.c 6173 2006-12-11 19:55:31Z twisti $
 
 */
 
@@ -1128,7 +1127,7 @@ jsr_tail:
                                                /* store the unresolved_field pointer */
 
                                                iptr->sx.s23.s3.uf = uf;
-                                               iptr->flags.bits = INS_FLAG_UNRESOLVED;
+                                               iptr->flags.bits |= INS_FLAG_UNRESOLVED;
                                        }
 #if defined(ENABLE_VERIFIER)
                                }
@@ -1217,7 +1216,7 @@ invoke_method:
                                        /* store the unresolved_method pointer */
 
                                        iptr->sx.s23.s3.um = um;
-                                       iptr->flags.bits = INS_FLAG_UNRESOLVED;
+                                       iptr->flags.bits |= INS_FLAG_UNRESOLVED;
                                }
 #if defined(ENABLE_VERIFIER)
                        }
@@ -1254,12 +1253,12 @@ invoke_method:
 
                        if (cr->name->text[0] == '[') {
                                /* array type cast-check */
-                               flags = INS_FLAG_ARRAY;
+                               flags = INS_FLAG_CHECK | INS_FLAG_ARRAY;
                                jd->isleafmethod = false;
                        }
                        else {
                                /* object type cast-check */
-                               flags = 0;
+                               flags = INS_FLAG_CHECK;
                        }
                        OP_S3_CLASSINFO_OR_CLASSREF(opcode, c, cr, flags);
                        break;
@@ -1298,7 +1297,8 @@ invoke_method:
                        else
 #endif
                        {
-                               OP(ICMD_CHECKNULL_POP);
+                               OP_CHECK_EXCEPTION(ICMD_CHECKNULL);
+                               OP(ICMD_POP);
                        }
                        break;
 
@@ -1311,7 +1311,8 @@ invoke_method:
                        else
 #endif
                        {
-                               OP(ICMD_CHECKNULL_POP);
+                               OP_CHECK_EXCEPTION(ICMD_CHECKNULL);
+                               OP(ICMD_POP);
                        }
                        break;
 
@@ -1322,7 +1323,11 @@ invoke_method:
                        bte = builtintable_get_internal(BUILTIN_idiv);
                        OP_BUILTIN_ARITHMETIC(opcode, bte);
 #else
+# if SUPPORT_HARDWARE_DIVIDE_BY_ZERO
                        OP(opcode);
+# else
+                       OP_CHECK_EXCEPTION(opcode);
+# endif
 #endif
                        break;
 
@@ -1331,7 +1336,11 @@ invoke_method:
                        bte = builtintable_get_internal(BUILTIN_irem);
                        OP_BUILTIN_ARITHMETIC(opcode, bte);
 #else
+# if SUPPORT_HARDWARE_DIVIDE_BY_ZERO
                        OP(opcode);
+# else
+                       OP_CHECK_EXCEPTION(opcode);
+# endif
 #endif
                        break;
 
@@ -1340,7 +1349,11 @@ invoke_method:
                        bte = builtintable_get_internal(BUILTIN_ldiv);
                        OP_BUILTIN_ARITHMETIC(opcode, bte);
 #else
+# if SUPPORT_HARDWARE_DIVIDE_BY_ZERO
                        OP(opcode);
+# else
+                       OP_CHECK_EXCEPTION(opcode);
+# endif
 #endif
                        break;
 
@@ -1349,7 +1362,11 @@ invoke_method:
                        bte = builtintable_get_internal(BUILTIN_lrem);
                        OP_BUILTIN_ARITHMETIC(opcode, bte);
 #else
+# if SUPPORT_HARDWARE_DIVIDE_BY_ZERO
                        OP(opcode);
+# else
+                       OP_CHECK_EXCEPTION(opcode);
+# endif
 #endif
                        break;