* src/vm/jit/parse.c (CHECKCAST): Set check-flag.
[cacao.git] / src / vm / jit / parse.c
index 563c43f002bd4bbc6d350c37085c002cf9f8ff4a..9a8e4e4cb99e0ae78203f079c29ec375a326fb9e 100644 (file)
@@ -30,7 +30,7 @@
             Joseph Wenninger
             Christian Thalinger
 
-   $Id: parse.c 5959 2006-11-12 13:31:14Z edwin $
+   $Id: parse.c 6173 2006-12-11 19:55:31Z twisti $
 
 */
 
@@ -1253,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;
@@ -1297,7 +1297,8 @@ invoke_method:
                        else
 #endif
                        {
-                               OP(ICMD_CHECKNULL_POP);
+                               OP_CHECK_EXCEPTION(ICMD_CHECKNULL);
+                               OP(ICMD_POP);
                        }
                        break;
 
@@ -1310,7 +1311,8 @@ invoke_method:
                        else
 #endif
                        {
-                               OP(ICMD_CHECKNULL_POP);
+                               OP_CHECK_EXCEPTION(ICMD_CHECKNULL);
+                               OP(ICMD_POP);
                        }
                        break;
 
@@ -1321,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;
 
@@ -1330,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;
 
@@ -1339,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;
 
@@ -1348,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;