Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: src/mips/code-stubs-mips.cc

Issue 882683002: MIPS: Use a trampoline stub to load the type feedback vector for CallICs. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/mips/full-codegen-mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_MIPS 7 #if V8_TARGET_ARCH_MIPS
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 2728 matching lines...) Expand 10 before | Expand all | Expand 10 after
2739 __ lw(vector, FieldMemOperand(vector, 2739 __ lw(vector, FieldMemOperand(vector,
2740 JSFunction::kSharedFunctionInfoOffset)); 2740 JSFunction::kSharedFunctionInfoOffset));
2741 __ lw(vector, FieldMemOperand(vector, 2741 __ lw(vector, FieldMemOperand(vector,
2742 SharedFunctionInfo::kFeedbackVectorOffset)); 2742 SharedFunctionInfo::kFeedbackVectorOffset));
2743 } 2743 }
2744 2744
2745 2745
2746 void CallIC_ArrayStub::Generate(MacroAssembler* masm) { 2746 void CallIC_ArrayStub::Generate(MacroAssembler* masm) {
2747 // a1 - function 2747 // a1 - function
2748 // a3 - slot id 2748 // a3 - slot id
2749 // a2 - vector
2749 Label miss; 2750 Label miss;
2750 2751
2751 EmitLoadTypeFeedbackVector(masm, a2);
2752
2753 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, at); 2752 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, at);
2754 __ Branch(&miss, ne, a1, Operand(at)); 2753 __ Branch(&miss, ne, a1, Operand(at));
2755 2754
2756 __ li(a0, Operand(arg_count())); 2755 __ li(a0, Operand(arg_count()));
2757 __ sll(at, a3, kPointerSizeLog2 - kSmiTagSize); 2756 __ sll(at, a3, kPointerSizeLog2 - kSmiTagSize);
2758 __ Addu(at, a2, Operand(at)); 2757 __ Addu(at, a2, Operand(at));
2759 __ lw(t0, FieldMemOperand(at, FixedArray::kHeaderSize)); 2758 __ lw(t0, FieldMemOperand(at, FixedArray::kHeaderSize));
2760 2759
2761 // Verify that t0 contains an AllocationSite 2760 // Verify that t0 contains an AllocationSite
2762 __ lw(t1, FieldMemOperand(t0, HeapObject::kMapOffset)); 2761 __ lw(t1, FieldMemOperand(t0, HeapObject::kMapOffset));
(...skipping 14 matching lines...) Expand all
2777 CallAsMethod()); 2776 CallAsMethod());
2778 2777
2779 // Unreachable. 2778 // Unreachable.
2780 __ stop("Unexpected code address"); 2779 __ stop("Unexpected code address");
2781 } 2780 }
2782 2781
2783 2782
2784 void CallICStub::Generate(MacroAssembler* masm) { 2783 void CallICStub::Generate(MacroAssembler* masm) {
2785 // a1 - function 2784 // a1 - function
2786 // a3 - slot id (Smi) 2785 // a3 - slot id (Smi)
2786 // a2 - vector
2787 const int with_types_offset = 2787 const int with_types_offset =
2788 FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex); 2788 FixedArray::OffsetOfElementAt(TypeFeedbackVector::kWithTypesIndex);
2789 const int generic_offset = 2789 const int generic_offset =
2790 FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex); 2790 FixedArray::OffsetOfElementAt(TypeFeedbackVector::kGenericCountIndex);
2791 Label extra_checks_or_miss, slow_start; 2791 Label extra_checks_or_miss, slow_start;
2792 Label slow, non_function, wrap, cont; 2792 Label slow, non_function, wrap, cont;
2793 Label have_js_function; 2793 Label have_js_function;
2794 int argc = arg_count(); 2794 int argc = arg_count();
2795 ParameterCount actual(argc); 2795 ParameterCount actual(argc);
2796 2796
2797 EmitLoadTypeFeedbackVector(masm, a2);
2798
2799 // The checks. First, does r1 match the recorded monomorphic target? 2797 // The checks. First, does r1 match the recorded monomorphic target?
2800 __ sll(t0, a3, kPointerSizeLog2 - kSmiTagSize); 2798 __ sll(t0, a3, kPointerSizeLog2 - kSmiTagSize);
2801 __ Addu(t0, a2, Operand(t0)); 2799 __ Addu(t0, a2, Operand(t0));
2802 __ lw(t0, FieldMemOperand(t0, FixedArray::kHeaderSize)); 2800 __ lw(t0, FieldMemOperand(t0, FixedArray::kHeaderSize));
2803 __ Branch(&extra_checks_or_miss, ne, a1, Operand(t0)); 2801 __ Branch(&extra_checks_or_miss, ne, a1, Operand(t0));
2804 2802
2805 __ bind(&have_js_function); 2803 __ bind(&have_js_function);
2806 if (CallAsMethod()) { 2804 if (CallAsMethod()) {
2807 EmitContinueIfStrictOrNative(masm, &cont); 2805 EmitContinueIfStrictOrNative(masm, &cont);
2808 // Compute the receiver in sloppy mode. 2806 // Compute the receiver in sloppy mode.
(...skipping 1663 matching lines...) Expand 10 before | Expand all | Expand 10 after
4472 } 4470 }
4473 4471
4474 4472
4475 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) { 4473 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) {
4476 EmitLoadTypeFeedbackVector(masm, VectorLoadICDescriptor::VectorRegister()); 4474 EmitLoadTypeFeedbackVector(masm, VectorLoadICDescriptor::VectorRegister());
4477 VectorKeyedLoadStub stub(isolate()); 4475 VectorKeyedLoadStub stub(isolate());
4478 __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET); 4476 __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
4479 } 4477 }
4480 4478
4481 4479
4480 void CallICTrampolineStub::Generate(MacroAssembler* masm) {
4481 EmitLoadTypeFeedbackVector(masm, a2);
4482 CallICStub stub(isolate(), state());
4483 __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
4484 }
4485
4486
4487 void CallIC_ArrayTrampolineStub::Generate(MacroAssembler* masm) {
4488 EmitLoadTypeFeedbackVector(masm, a2);
4489 CallIC_ArrayStub stub(isolate(), state());
4490 __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
4491 }
4492
4493
4482 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { 4494 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
4483 if (masm->isolate()->function_entry_hook() != NULL) { 4495 if (masm->isolate()->function_entry_hook() != NULL) {
4484 ProfileEntryHookStub stub(masm->isolate()); 4496 ProfileEntryHookStub stub(masm->isolate());
4485 __ push(ra); 4497 __ push(ra);
4486 __ CallStub(&stub); 4498 __ CallStub(&stub);
4487 __ pop(ra); 4499 __ pop(ra);
4488 } 4500 }
4489 } 4501 }
4490 4502
4491 4503
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
5139 kStackUnwindSpace, kInvalidStackOffset, 5151 kStackUnwindSpace, kInvalidStackOffset,
5140 MemOperand(fp, 6 * kPointerSize), NULL); 5152 MemOperand(fp, 6 * kPointerSize), NULL);
5141 } 5153 }
5142 5154
5143 5155
5144 #undef __ 5156 #undef __
5145 5157
5146 } } // namespace v8::internal 5158 } } // namespace v8::internal
5147 5159
5148 #endif // V8_TARGET_ARCH_MIPS 5160 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « no previous file | src/mips/full-codegen-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698