| Index: src/ppc/code-stubs-ppc.cc
|
| diff --git a/src/ppc/code-stubs-ppc.cc b/src/ppc/code-stubs-ppc.cc
|
| index d84492fb292de050b305a99af14e0e74ae67962c..2447cf9318bcc19f093f14d12375188a353c5232 100644
|
| --- a/src/ppc/code-stubs-ppc.cc
|
| +++ b/src/ppc/code-stubs-ppc.cc
|
| @@ -2884,15 +2884,21 @@ void CallIC_ArrayStub::Generate(MacroAssembler* masm) {
|
| __ bne(&miss);
|
|
|
| __ mov(r3, Operand(arg_count()));
|
| - __ SmiToPtrArrayOffset(r7, r6);
|
| - __ add(r7, r5, r7);
|
| - __ LoadP(r7, FieldMemOperand(r7, FixedArray::kHeaderSize));
|
| + __ SmiToPtrArrayOffset(r9, r6);
|
| + __ add(r9, r5, r9);
|
| + __ LoadP(r7, FieldMemOperand(r9, FixedArray::kHeaderSize));
|
|
|
| // Verify that r7 contains an AllocationSite
|
| __ LoadP(r8, FieldMemOperand(r7, HeapObject::kMapOffset));
|
| __ CompareRoot(r8, Heap::kAllocationSiteMapRootIndex);
|
| __ bne(&miss);
|
|
|
| + // Increment the call count for monomorphic function calls.
|
| + const int count_offset = FixedArray::kHeaderSize + kPointerSize;
|
| + __ LoadP(r6, FieldMemOperand(r9, count_offset));
|
| + __ AddSmiLiteral(r6, r6, Smi::FromInt(CallICNexus::kCallCountIncrement), r0);
|
| + __ StoreP(r6, FieldMemOperand(r9, count_offset));
|
| +
|
| __ mr(r5, r7);
|
| __ mr(r6, r4);
|
| ArrayConstructorStub stub(masm->isolate(), arg_count());
|
| @@ -2924,9 +2930,9 @@ void CallICStub::Generate(MacroAssembler* masm) {
|
| ParameterCount actual(argc);
|
|
|
| // The checks. First, does r4 match the recorded monomorphic target?
|
| - __ SmiToPtrArrayOffset(r7, r6);
|
| - __ add(r7, r5, r7);
|
| - __ LoadP(r7, FieldMemOperand(r7, FixedArray::kHeaderSize));
|
| + __ SmiToPtrArrayOffset(r9, r6);
|
| + __ add(r9, r5, r9);
|
| + __ LoadP(r7, FieldMemOperand(r9, FixedArray::kHeaderSize));
|
|
|
| // We don't know that we have a weak cell. We might have a private symbol
|
| // or an AllocationSite, but the memory is safe to examine.
|
| @@ -2950,6 +2956,12 @@ void CallICStub::Generate(MacroAssembler* masm) {
|
| // convincing us that we have a monomorphic JSFunction.
|
| __ JumpIfSmi(r4, &extra_checks_or_miss);
|
|
|
| + // Increment the call count for monomorphic function calls.
|
| + const int count_offset = FixedArray::kHeaderSize + kPointerSize;
|
| + __ LoadP(r6, FieldMemOperand(r9, count_offset));
|
| + __ AddSmiLiteral(r6, r6, Smi::FromInt(CallICNexus::kCallCountIncrement), r0);
|
| + __ StoreP(r6, FieldMemOperand(r9, count_offset));
|
| +
|
| __ bind(&have_js_function);
|
| if (CallAsMethod()) {
|
| EmitContinueIfStrictOrNative(masm, &cont);
|
| @@ -2993,10 +3005,8 @@ void CallICStub::Generate(MacroAssembler* masm) {
|
| __ AssertNotSmi(r7);
|
| __ CompareObjectType(r7, r8, r8, JS_FUNCTION_TYPE);
|
| __ bne(&miss);
|
| - __ SmiToPtrArrayOffset(r7, r6);
|
| - __ add(r7, r5, r7);
|
| __ LoadRoot(ip, Heap::kmegamorphic_symbolRootIndex);
|
| - __ StoreP(ip, FieldMemOperand(r7, FixedArray::kHeaderSize), r0);
|
| + __ StoreP(ip, FieldMemOperand(r9, FixedArray::kHeaderSize), r0);
|
| // We have to update statistics for runtime profiling.
|
| __ LoadP(r7, FieldMemOperand(r5, with_types_offset));
|
| __ SubSmiLiteral(r7, r7, Smi::FromInt(1), r0);
|
| @@ -3026,6 +3036,10 @@ void CallICStub::Generate(MacroAssembler* masm) {
|
| __ AddSmiLiteral(r7, r7, Smi::FromInt(1), r0);
|
| __ StoreP(r7, FieldMemOperand(r5, with_types_offset), r0);
|
|
|
| + // Initialize the call counter.
|
| + __ LoadSmiLiteral(r0, Smi::FromInt(CallICNexus::kCallCountIncrement));
|
| + __ StoreP(r0, FieldMemOperand(r9, count_offset));
|
| +
|
| // Store the function. Use a stub since we need a frame for allocation.
|
| // r5 - vector
|
| // r6 - slot
|
|
|