Index: src/x64/full-codegen-x64.cc |
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc |
index 4ebef21c1ca6adcce54eace79178ae2b500002e0..c39ca97ac7f34ccd643bbd601c96a5a4725588e0 100644 |
--- a/src/x64/full-codegen-x64.cc |
+++ b/src/x64/full-codegen-x64.cc |
@@ -363,6 +363,9 @@ void FullCodeGenerator::EmitProfilingCounterReset() { |
} |
+static const byte kJnsOffset = kPointerSize == kInt64Size ? 0x1d : 0x14; |
+ |
+ |
void FullCodeGenerator::EmitBackEdgeBookkeeping(IterationStatement* stmt, |
Label* back_edge_target) { |
Comment cmnt(masm_, "[ Back edge bookkeeping"); |
@@ -373,17 +376,22 @@ void FullCodeGenerator::EmitBackEdgeBookkeeping(IterationStatement* stmt, |
int weight = Min(kMaxBackEdgeWeight, |
Max(1, distance / kCodeSizeMultiplier)); |
EmitProfilingCounterDecrement(weight); |
- __ j(positive, &ok, Label::kNear); |
- __ call(isolate()->builtins()->InterruptCheck(), RelocInfo::CODE_TARGET); |
- // Record a mapping of this PC offset to the OSR id. This is used to find |
- // the AST id from the unoptimized code in order to use it as a key into |
- // the deoptimization input data found in the optimized code. |
- RecordBackEdge(stmt->OsrEntryId()); |
+ __ j(positive, &ok, Label::kNear); |
+ { |
+ PredictableCodeSizeScope predictible_code_size_scope(masm_, kJnsOffset); |
+ DontEmitDebugCodeScope dont_emit_debug_code_scope(masm_); |
+ __ call(isolate()->builtins()->InterruptCheck(), RelocInfo::CODE_TARGET); |
- EmitProfilingCounterReset(); |
+ // Record a mapping of this PC offset to the OSR id. This is used to find |
+ // the AST id from the unoptimized code in order to use it as a key into |
+ // the deoptimization input data found in the optimized code. |
+ RecordBackEdge(stmt->OsrEntryId()); |
+ EmitProfilingCounterReset(); |
+ } |
__ bind(&ok); |
+ |
PrepareForBailoutForId(stmt->EntryId(), NO_REGISTERS); |
// Record a mapping of the OSR id to this PC. This is used if the OSR |
// entry becomes the target of a bailout. We don't expect it to be, but |
@@ -4844,7 +4852,6 @@ FullCodeGenerator::NestedStatement* FullCodeGenerator::TryFinally::Exit( |
static const byte kJnsInstruction = 0x79; |
-static const byte kJnsOffset = kPointerSize == kInt64Size ? 0x1d : 0x14; |
static const byte kNopByteOne = 0x66; |
static const byte kNopByteTwo = 0x90; |
#ifdef DEBUG |