OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |