Index: src/arm/full-codegen-arm.cc |
diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc |
index 2b0491493134f5425720a941a17b9e967e1bd784..9e2e3736e9f3337ab844af9a9ad4b03443d75bde 100644 |
--- a/src/arm/full-codegen-arm.cc |
+++ b/src/arm/full-codegen-arm.cc |
@@ -1061,10 +1061,33 @@ void FullCodeGenerator::VisitSwitchStatement(SwitchStatement* stmt) { |
// Compile all the case bodies. |
for (int i = 0; i < clauses->length(); i++) { |
- Comment cmnt(masm_, "[ Case body"); |
CaseClause* clause = clauses->at(i); |
__ bind(clause->body_target()); |
PrepareForBailoutForId(clause->EntryId(), NO_REGISTERS); |
+ |
+ // Initialize counter |
+ { Comment cmnt(masm_, "[ Case hit counter"); |
+ Handle<JSGlobalPropertyCell> cell = |
+ isolate()->factory()->NewJSGlobalPropertyCell( |
+ Handle<Object>(Smi::FromInt(0), isolate())); |
+ RecordTypeFeedbackCell(clause->CounterId(), cell); |
+ |
+ // Increment counter |
+ Label ok; |
+ MemOperand counter = |
+ FieldMemOperand(r1, JSGlobalPropertyCell::kValueOffset); |
+ |
+ __ LoadHeapObject(r1, cell); |
+ __ AssertSmi(counter); |
+ __ ldr(r2, counter); |
+ __ add(r2, r2, Operand(Smi::FromInt(1)), SetCC); |
+ __ b(vc, &ok); |
+ __ sub(r2, r2, Operand(Smi::FromInt(1)), SetCC); |
+ __ bind(&ok); |
+ __ str(r2, counter); |
+ } |
+ |
+ Comment cmnt(masm_, "[ Case body"); |
VisitStatements(clause->statements()); |
} |