OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
6 | 6 |
7 #include "src/bootstrapper.h" | 7 #include "src/bootstrapper.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/ic/handler-compiler.h" | 10 #include "src/ic/handler-compiler.h" |
(...skipping 2875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2886 __ Ldr(x4, FieldMemOperand(x4, SharedFunctionInfo::kConstructStubOffset)); | 2886 __ Ldr(x4, FieldMemOperand(x4, SharedFunctionInfo::kConstructStubOffset)); |
2887 __ Add(x4, x4, Code::kHeaderSize - kHeapObjectTag); | 2887 __ Add(x4, x4, Code::kHeaderSize - kHeapObjectTag); |
2888 __ Br(x4); | 2888 __ Br(x4); |
2889 | 2889 |
2890 __ Bind(&non_function); | 2890 __ Bind(&non_function); |
2891 __ Mov(x3, function); | 2891 __ Mov(x3, function); |
2892 __ Jump(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); | 2892 __ Jump(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); |
2893 } | 2893 } |
2894 | 2894 |
2895 | 2895 |
2896 static void EmitLoadTypeFeedbackVector(MacroAssembler* masm, Register vector) { | |
2897 __ Ldr(vector, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | |
2898 __ Ldr(vector, FieldMemOperand(vector, | |
2899 JSFunction::kSharedFunctionInfoOffset)); | |
2900 __ Ldr(vector, FieldMemOperand(vector, | |
2901 SharedFunctionInfo::kFeedbackVectorOffset)); | |
2902 } | |
2903 | |
2904 | |
2905 void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) { | 2896 void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) { |
2906 // x1 - function | 2897 // x1 - function |
2907 // x3 - slot id | 2898 // x3 - slot id |
2908 // x2 - vector | 2899 // x2 - vector |
2909 // x4 - allocation site (loaded from vector[slot]) | 2900 // x4 - allocation site (loaded from vector[slot]) |
2910 Register function = x1; | 2901 Register function = x1; |
2911 Register feedback_vector = x2; | 2902 Register feedback_vector = x2; |
2912 Register index = x3; | 2903 Register index = x3; |
2913 Register allocation_site = x4; | 2904 Register allocation_site = x4; |
2914 Register scratch = x5; | 2905 Register scratch = x5; |
(...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4370 __ Add(x1, x1, 1); | 4361 __ Add(x1, x1, 1); |
4371 } | 4362 } |
4372 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); | 4363 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); |
4373 __ Drop(x1); | 4364 __ Drop(x1); |
4374 // Return to IC Miss stub, continuation still on stack. | 4365 // Return to IC Miss stub, continuation still on stack. |
4375 __ Ret(); | 4366 __ Ret(); |
4376 } | 4367 } |
4377 | 4368 |
4378 | 4369 |
4379 void LoadICTrampolineStub::Generate(MacroAssembler* masm) { | 4370 void LoadICTrampolineStub::Generate(MacroAssembler* masm) { |
4380 EmitLoadTypeFeedbackVector(masm, LoadWithVectorDescriptor::VectorRegister()); | 4371 __ EmitLoadTypeFeedbackVector(LoadWithVectorDescriptor::VectorRegister()); |
4381 LoadICStub stub(isolate(), state()); | 4372 LoadICStub stub(isolate(), state()); |
4382 stub.GenerateForTrampoline(masm); | 4373 stub.GenerateForTrampoline(masm); |
4383 } | 4374 } |
4384 | 4375 |
4385 | 4376 |
4386 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) { | 4377 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) { |
4387 EmitLoadTypeFeedbackVector(masm, LoadWithVectorDescriptor::VectorRegister()); | 4378 __ EmitLoadTypeFeedbackVector(LoadWithVectorDescriptor::VectorRegister()); |
4388 KeyedLoadICStub stub(isolate(), state()); | 4379 KeyedLoadICStub stub(isolate(), state()); |
4389 stub.GenerateForTrampoline(masm); | 4380 stub.GenerateForTrampoline(masm); |
4390 } | 4381 } |
4391 | 4382 |
4392 | 4383 |
4393 void CallICTrampolineStub::Generate(MacroAssembler* masm) { | 4384 void CallICTrampolineStub::Generate(MacroAssembler* masm) { |
4394 EmitLoadTypeFeedbackVector(masm, x2); | 4385 __ EmitLoadTypeFeedbackVector(x2); |
4395 CallICStub stub(isolate(), state()); | 4386 CallICStub stub(isolate(), state()); |
4396 __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET); | 4387 __ Jump(stub.GetCode(), RelocInfo::CODE_TARGET); |
4397 } | 4388 } |
4398 | 4389 |
4399 | 4390 |
4400 void LoadICStub::Generate(MacroAssembler* masm) { GenerateImpl(masm, false); } | 4391 void LoadICStub::Generate(MacroAssembler* masm) { GenerateImpl(masm, false); } |
4401 | 4392 |
4402 | 4393 |
4403 void LoadICStub::GenerateForTrampoline(MacroAssembler* masm) { | 4394 void LoadICStub::GenerateForTrampoline(MacroAssembler* masm) { |
4404 GenerateImpl(masm, true); | 4395 GenerateImpl(masm, true); |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4601 __ Bind(&miss); | 4592 __ Bind(&miss); |
4602 KeyedLoadIC::GenerateMiss(masm); | 4593 KeyedLoadIC::GenerateMiss(masm); |
4603 | 4594 |
4604 __ Bind(&load_smi_map); | 4595 __ Bind(&load_smi_map); |
4605 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); | 4596 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); |
4606 __ jmp(&compare_map); | 4597 __ jmp(&compare_map); |
4607 } | 4598 } |
4608 | 4599 |
4609 | 4600 |
4610 void VectorStoreICTrampolineStub::Generate(MacroAssembler* masm) { | 4601 void VectorStoreICTrampolineStub::Generate(MacroAssembler* masm) { |
4611 EmitLoadTypeFeedbackVector(masm, VectorStoreICDescriptor::VectorRegister()); | 4602 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister()); |
4612 VectorStoreICStub stub(isolate(), state()); | 4603 VectorStoreICStub stub(isolate(), state()); |
4613 stub.GenerateForTrampoline(masm); | 4604 stub.GenerateForTrampoline(masm); |
4614 } | 4605 } |
4615 | 4606 |
4616 | 4607 |
4617 void VectorKeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) { | 4608 void VectorKeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) { |
4618 EmitLoadTypeFeedbackVector(masm, VectorStoreICDescriptor::VectorRegister()); | 4609 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister()); |
4619 VectorKeyedStoreICStub stub(isolate(), state()); | 4610 VectorKeyedStoreICStub stub(isolate(), state()); |
4620 stub.GenerateForTrampoline(masm); | 4611 stub.GenerateForTrampoline(masm); |
4621 } | 4612 } |
4622 | 4613 |
4623 | 4614 |
4624 void VectorStoreICStub::Generate(MacroAssembler* masm) { | 4615 void VectorStoreICStub::Generate(MacroAssembler* masm) { |
4625 GenerateImpl(masm, false); | 4616 GenerateImpl(masm, false); |
4626 } | 4617 } |
4627 | 4618 |
4628 | 4619 |
(...skipping 1367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5996 MemOperand(fp, 6 * kPointerSize), NULL); | 5987 MemOperand(fp, 6 * kPointerSize), NULL); |
5997 } | 5988 } |
5998 | 5989 |
5999 | 5990 |
6000 #undef __ | 5991 #undef __ |
6001 | 5992 |
6002 } // namespace internal | 5993 } // namespace internal |
6003 } // namespace v8 | 5994 } // namespace v8 |
6004 | 5995 |
6005 #endif // V8_TARGET_ARCH_ARM64 | 5996 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |