Index: src/arm/full-codegen-arm.cc |
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc |
index b48e842be78a2545872884d17b1f4b75d4127be1..51e920833278bbeaa9a5f291a9811545c3fa3b83 100644 |
--- a/src/arm/full-codegen-arm.cc |
+++ b/src/arm/full-codegen-arm.cc |
@@ -109,6 +109,11 @@ class JumpPatchSite BASE_EMBEDDED { |
}; |
+int FullCodeGenerator::self_optimization_header_size() { |
+ return 24; |
+} |
+ |
+ |
// Generate code for a JS function. On entry to the function the receiver |
// and arguments have been pushed on the stack left to right. The actual |
// argument count matches the formal parameter count expected by the |
@@ -130,13 +135,6 @@ void FullCodeGenerator::Generate() { |
SetFunctionPosition(function()); |
Comment cmnt(masm_, "[ function compiled by full code generator"); |
-#ifdef DEBUG |
- if (strlen(FLAG_stop_at) > 0 && |
- info->function()->name()->IsEqualTo(CStrVector(FLAG_stop_at))) { |
- __ stop("stop-at"); |
- } |
-#endif |
- |
// We can optionally optimize based on counters rather than statistical |
// sampling. |
if (info->ShouldSelfOptimize()) { |
@@ -144,6 +142,7 @@ void FullCodeGenerator::Generate() { |
PrintF("[adding self-optimization header to %s]\n", |
*info->function()->debug_name()->ToCString()); |
} |
+ has_self_optimization_header_ = true; |
MaybeObject* maybe_cell = isolate()->heap()->AllocateJSGlobalPropertyCell( |
Smi::FromInt(Compiler::kCallsUntilPrimitiveOpt)); |
JSGlobalPropertyCell* cell; |
@@ -155,9 +154,17 @@ void FullCodeGenerator::Generate() { |
Handle<Code> compile_stub( |
isolate()->builtins()->builtin(Builtins::kLazyRecompile)); |
__ Jump(compile_stub, RelocInfo::CODE_TARGET, eq); |
+ ASSERT(masm_->pc_offset() == self_optimization_header_size()); |
} |
} |
+#ifdef DEBUG |
+ if (strlen(FLAG_stop_at) > 0 && |
+ info->function()->name()->IsEqualTo(CStrVector(FLAG_stop_at))) { |
+ __ stop("stop-at"); |
+ } |
+#endif |
+ |
// Strict mode functions and builtins need to replace the receiver |
// with undefined when called as functions (without an explicit |
// receiver object). r5 is zero for method calls and non-zero for |