Revision: 19235
Author:   [email protected]
Date:     Mon Feb 10 16:34:03 2014 UTC
Log:      A64: Add support for --deopt-every-n-times for n != 2

To match arm, the DeoptimizeIf*() methods need to invoke the
DeoptimizeHeader() method explicitly, so we do the check even if the
condition does not hold.

BUG=none
[email protected], [email protected]
LOG=n

Review URL: https://codereview.chromium.org/155723004
http://code.google.com/p/v8/source/detail?r=19235

Modified:
 /branches/experimental/a64/src/a64/lithium-codegen-a64.cc

=======================================
--- /branches/experimental/a64/src/a64/lithium-codegen-a64.cc Mon Feb 10 15:37:43 2014 UTC +++ /branches/experimental/a64/src/a64/lithium-codegen-a64.cc Mon Feb 10 16:34:03 2014 UTC
@@ -981,14 +981,25 @@
     return false;
   }

- ASSERT(FLAG_deopt_every_n_times < 2); // Other values not supported on A64.
-  TODO_UNIMPLEMENTED("Support for FLAG_deopt_every_n_times >= 2.");
-  if (FLAG_deopt_every_n_times == 1 &&
-      !info()->IsStub() &&
-      info()->opt_count() == id) {
+  if (FLAG_deopt_every_n_times != 0 && !info()->IsStub()) {
+    Label not_zero;
+ ExternalReference count = ExternalReference::stress_deopt_count(isolate());
+
+    __ Push(x0, x1);
+    __ Mov(x0, Operand(count));
+    __ Ldr(w1, MemOperand(x0));
+    __ Subs(x1, x1, 1);
+    __ B(gt, &not_zero);
+    __ Mov(w1, FLAG_deopt_every_n_times);
+    __ Str(w1, MemOperand(x0));
+    __ Pop(x0, x1);
     ASSERT(frame_is_built_);
     __ Call(entry, RelocInfo::RUNTIME_ENTRY);
-    return false;
+    __ Unreachable();
+
+    __ Bind(&not_zero);
+    __ Str(w1, MemOperand(x0));
+    __ Pop(x0, x1);
   }

   return true;

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to