| 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());
|
| }
|
|
|
|
|