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

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

Issue 1364373003: Full code shouldn't embed the type feedback vector. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Ports. Created 5 years, 2 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
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 #if V8_TARGET_ARCH_MIPS 5 #if V8_TARGET_ARCH_MIPS
6 6
7 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/bootstrapper.h" 8 #include "src/bootstrapper.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 2614 matching lines...) Expand 10 before | Expand all | Expand 10 after
2625 __ lw(t0, FieldMemOperand(t0, SharedFunctionInfo::kConstructStubOffset)); 2625 __ lw(t0, FieldMemOperand(t0, SharedFunctionInfo::kConstructStubOffset));
2626 __ Addu(at, t0, Operand(Code::kHeaderSize - kHeapObjectTag)); 2626 __ Addu(at, t0, Operand(Code::kHeaderSize - kHeapObjectTag));
2627 __ Jump(at); 2627 __ Jump(at);
2628 2628
2629 __ bind(&non_function); 2629 __ bind(&non_function);
2630 __ mov(a3, a1); 2630 __ mov(a3, a1);
2631 __ Jump(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); 2631 __ Jump(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET);
2632 } 2632 }
2633 2633
2634 2634
2635 static void EmitLoadTypeFeedbackVector(MacroAssembler* masm, Register vector) {
2636 __ lw(vector, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
2637 __ lw(vector, FieldMemOperand(vector,
2638 JSFunction::kSharedFunctionInfoOffset));
2639 __ lw(vector, FieldMemOperand(vector,
2640 SharedFunctionInfo::kFeedbackVectorOffset));
2641 }
2642
2643
2644 void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) { 2635 void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) {
2645 // a1 - function 2636 // a1 - function
2646 // a3 - slot id 2637 // a3 - slot id
2647 // a2 - vector 2638 // a2 - vector
2648 // t0 - loaded from vector[slot] 2639 // t0 - loaded from vector[slot]
2649 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, at); 2640 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, at);
2650 __ Branch(miss, ne, a1, Operand(at)); 2641 __ Branch(miss, ne, a1, Operand(at));
2651 2642
2652 __ li(a0, Operand(arg_count())); 2643 __ li(a0, Operand(arg_count()));
2653 2644
(...skipping 1797 matching lines...) Expand 10 before | Expand all | Expand 10 after
4451 __ Addu(a1, a1, Operand(1)); 4442 __ Addu(a1, a1, Operand(1));
4452 } 4443 }
4453 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); 4444 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE);
4454 __ sll(a1, a1, kPointerSizeLog2); 4445 __ sll(a1, a1, kPointerSizeLog2);
4455 __ Ret(USE_DELAY_SLOT); 4446 __ Ret(USE_DELAY_SLOT);
4456 __ Addu(sp, sp, a1); 4447 __ Addu(sp, sp, a1);
4457 } 4448 }
4458 4449
4459 4450
4460 void LoadICTrampolineStub::Generate(MacroAssembler* masm) { 4451 void LoadICTrampolineStub::Generate(MacroAssembler* masm) {
4461 EmitLoadTypeFeedbackVector(masm, LoadWithVectorDescriptor::VectorRegister()); 4452 __ EmitLoadTypeFeedbackVector(LoadWithVectorDescriptor::VectorRegister());
4462 LoadICStub stub(isolate(), state()); 4453 LoadICStub stub(isolate(), state());
4463 stub.GenerateForTrampoline(masm); 4454 stub.GenerateForTrampoline(masm);
4464 } 4455 }
4465 4456
4466 4457
4467 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) { 4458 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) {
4468 EmitLoadTypeFeedbackVector(masm, LoadWithVectorDescriptor::VectorRegister()); 4459 __ EmitLoadTypeFeedbackVector(LoadWithVectorDescriptor::VectorRegister());
4469 KeyedLoadICStub stub(isolate(), state()); 4460 KeyedLoadICStub stub(isolate(), state());
4470 stub.GenerateForTrampoline(masm); 4461 stub.GenerateForTrampoline(masm);
4471 } 4462 }
4472 4463
4473 4464
4474 void CallICTrampolineStub::Generate(MacroAssembler* masm) { 4465 void CallICTrampolineStub::Generate(MacroAssembler* masm) {
4475 EmitLoadTypeFeedbackVector(masm, a2); 4466 __ EmitLoadTypeFeedbackVector(a2);
4476 CallICStub stub(isolate(), state()); 4467 CallICStub stub(isolate(), state());
4477 __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET); 4468 __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET);
4478 } 4469 }
4479 4470
4480 4471
4481 void LoadICStub::Generate(MacroAssembler* masm) { GenerateImpl(masm, false); } 4472 void LoadICStub::Generate(MacroAssembler* masm) { GenerateImpl(masm, false); }
4482 4473
4483 4474
4484 void LoadICStub::GenerateForTrampoline(MacroAssembler* masm) { 4475 void LoadICStub::GenerateForTrampoline(MacroAssembler* masm) {
4485 GenerateImpl(masm, true); 4476 GenerateImpl(masm, true);
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
4686 __ bind(&miss); 4677 __ bind(&miss);
4687 KeyedLoadIC::GenerateMiss(masm); 4678 KeyedLoadIC::GenerateMiss(masm);
4688 4679
4689 __ bind(&load_smi_map); 4680 __ bind(&load_smi_map);
4690 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); 4681 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex);
4691 __ jmp(&compare_map); 4682 __ jmp(&compare_map);
4692 } 4683 }
4693 4684
4694 4685
4695 void VectorStoreICTrampolineStub::Generate(MacroAssembler* masm) { 4686 void VectorStoreICTrampolineStub::Generate(MacroAssembler* masm) {
4696 EmitLoadTypeFeedbackVector(masm, VectorStoreICDescriptor::VectorRegister()); 4687 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister());
4697 VectorStoreICStub stub(isolate(), state()); 4688 VectorStoreICStub stub(isolate(), state());
4698 stub.GenerateForTrampoline(masm); 4689 stub.GenerateForTrampoline(masm);
4699 } 4690 }
4700 4691
4701 4692
4702 void VectorKeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) { 4693 void VectorKeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) {
4703 EmitLoadTypeFeedbackVector(masm, VectorStoreICDescriptor::VectorRegister()); 4694 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister());
4704 VectorKeyedStoreICStub stub(isolate(), state()); 4695 VectorKeyedStoreICStub stub(isolate(), state());
4705 stub.GenerateForTrampoline(masm); 4696 stub.GenerateForTrampoline(masm);
4706 } 4697 }
4707 4698
4708 4699
4709 void VectorStoreICStub::Generate(MacroAssembler* masm) { 4700 void VectorStoreICStub::Generate(MacroAssembler* masm) {
4710 GenerateImpl(masm, false); 4701 GenerateImpl(masm, false);
4711 } 4702 }
4712 4703
4713 4704
(...skipping 1022 matching lines...) Expand 10 before | Expand all | Expand 10 after
5736 MemOperand(fp, 6 * kPointerSize), NULL); 5727 MemOperand(fp, 6 * kPointerSize), NULL);
5737 } 5728 }
5738 5729
5739 5730
5740 #undef __ 5731 #undef __
5741 5732
5742 } // namespace internal 5733 } // namespace internal
5743 } // namespace v8 5734 } // namespace v8
5744 5735
5745 #endif // V8_TARGET_ARCH_MIPS 5736 #endif // V8_TARGET_ARCH_MIPS
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698