changeset 2967:5141cdd9bfbf

Merge
author andrew
date Thu, 07 Jun 2012 19:21:04 +0100
parents 8101ee1cb493 (current diff) 883fc064689b (diff)
children 8b7c4c5f6ba9
files
diffstat 2 files changed, 17 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/zero/vm/cppInterpreter_arm.S	Thu Jun 07 15:21:53 2012 +0100
+++ b/src/cpu/zero/vm/cppInterpreter_arm.S	Thu Jun 07 19:21:04 2012 +0100
@@ -2992,6 +2992,7 @@
 	ALIGN_CODE
 fast_method_handle_entry:
 	stmfd	arm_sp!, {regset, lr}
+	mov	r2, thread
 	bl	_ZN14CppInterpreter19method_handle_entryEP13methodOopDesciP6Thread
 	ldmia	sp!, {regset, pc}
 
--- a/src/cpu/zero/vm/thumb2.cpp	Thu Jun 07 15:21:53 2012 +0100
+++ b/src/cpu/zero/vm/thumb2.cpp	Thu Jun 07 19:21:04 2012 +0100
@@ -68,6 +68,7 @@
 #include <ucontext.h>
 #include "precompiled.hpp"
 #include "interpreter/bytecodes.hpp"
+#include "compiler/compilerOracle.hpp"
 
 #define opc_nop			0x00
 #define opc_aconst_null		0x01
@@ -3969,8 +3970,12 @@
   case opc_ishl:
   case opc_ishr:
   case opc_iushr:
-    and_imm(jinfo->codebuf, r_rho, r_rho, 31);
-    break;
+    {
+      unsigned tmp_reg = Thumb2_Tmp(jinfo, 1 << r_lho | 1 << r_rho | 1 << r);
+      and_imm(jinfo->codebuf, tmp_reg, r_rho, 31);
+      r_rho = tmp_reg;
+      break;
+    }
   }
   dop_reg(jinfo->codebuf, dOps[opc-opc_iadd], r, r_lho, r_rho, 0, 0);
 }
@@ -7044,10 +7049,15 @@
   if (!(CPUInfo & ARCH_THUMB2))
 	UseCompiler = false;
 
-  if (!UseCompiler || method->is_not_compilable()) {
-	ic->set(ic->state(), 1);
-	bc->set(ic->state(), 1);
-	return 0;
+  {
+    bool ignore;
+    methodHandle mh(thread, method);
+    if (!UseCompiler || method->is_not_compilable()
+	|| CompilerOracle::should_exclude(mh, ignore)) {
+      ic->set(ic->state(), 1);
+      bc->set(ic->state(), 1);
+      return 0;
+    }
   }
 
   slow_entry = *(unsigned *)method->from_interpreted_entry();