Index: src/ia32/full-codegen-ia32.cc |
diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc |
index afb8a7f8b0abaacba8953d647ddff8eff465b196..ee1462567c67f9ac903e77aeae1e2316fed9e278 100644 |
--- a/src/ia32/full-codegen-ia32.cc |
+++ b/src/ia32/full-codegen-ia32.cc |
@@ -342,7 +342,15 @@ void FullCodeGenerator::EmitStackCheck(IterationStatement* stmt, |
int distance = masm_->SizeOfCodeGeneratedSince(back_edge_target); |
weight = Min(127, Max(1, distance / 100)); |
} |
- __ sub(Operand::Cell(profiling_counter_), Immediate(Smi::FromInt(weight))); |
+ if (Serializer::enabled()) { |
+ __ mov(ebx, Immediate(profiling_counter_)); |
+ __ sub(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset), |
+ Immediate(Smi::FromInt(weight))); |
+ } else { |
+ // This version is slightly faster, but not snapshot safe. |
+ __ sub(Operand::Cell(profiling_counter_), |
+ Immediate(Smi::FromInt(weight))); |
+ } |
__ j(positive, &ok, Label::kNear); |
InterruptStub stub; |
__ CallStub(&stub); |
@@ -372,8 +380,14 @@ void FullCodeGenerator::EmitStackCheck(IterationStatement* stmt, |
if (FLAG_count_based_interrupts) { |
// Reset the countdown. |
- __ mov(Operand::Cell(profiling_counter_), |
- Immediate(Smi::FromInt(FLAG_interrupt_budget))); |
+ if (Serializer::enabled()) { |
+ __ mov(ebx, Immediate(profiling_counter_)); |
+ __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset), |
+ Immediate(Smi::FromInt(FLAG_interrupt_budget))); |
+ } else { |
+ __ mov(Operand::Cell(profiling_counter_), |
+ Immediate(Smi::FromInt(FLAG_interrupt_budget))); |
+ } |
} |
__ bind(&ok); |
@@ -403,8 +417,15 @@ void FullCodeGenerator::EmitReturnSequence() { |
int distance = masm_->pc_offset(); |
weight = Min(127, Max(1, distance / 100)); |
} |
- __ sub(Operand::Cell(profiling_counter_), |
- Immediate(Smi::FromInt(weight))); |
+ if (Serializer::enabled()) { |
+ __ mov(ebx, Immediate(profiling_counter_)); |
+ __ sub(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset), |
+ Immediate(Smi::FromInt(weight))); |
+ } else { |
+ // This version is slightly faster, but not snapshot safe. |
+ __ sub(Operand::Cell(profiling_counter_), |
+ Immediate(Smi::FromInt(weight))); |
+ } |
Label ok; |
__ j(positive, &ok, Label::kNear); |
__ push(eax); |
@@ -412,8 +433,14 @@ void FullCodeGenerator::EmitReturnSequence() { |
__ CallStub(&stub); |
__ pop(eax); |
// Reset the countdown. |
- __ mov(Operand::Cell(profiling_counter_), |
- Immediate(Smi::FromInt(FLAG_interrupt_budget))); |
+ if (Serializer::enabled()) { |
+ __ mov(ebx, Immediate(profiling_counter_)); |
+ __ mov(FieldOperand(ebx, JSGlobalPropertyCell::kValueOffset), |
+ Immediate(Smi::FromInt(FLAG_interrupt_budget))); |
+ } else { |
+ __ mov(Operand::Cell(profiling_counter_), |
+ Immediate(Smi::FromInt(FLAG_interrupt_budget))); |
+ } |
__ bind(&ok); |
} |
#ifdef DEBUG |