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

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

Issue 1369963002: X87: Full code shouldn't embed the type feedback vector. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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
« no previous file with comments | « src/full-codegen/x87/full-codegen-x87.cc ('k') | src/x87/macro-assembler-x87.h » ('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 #if V8_TARGET_ARCH_X87 5 #if V8_TARGET_ARCH_X87
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 1865 matching lines...) Expand 10 before | Expand all | Expand 10 after
1876 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize)); 1876 __ lea(ecx, FieldOperand(ecx, Code::kHeaderSize));
1877 __ jmp(ecx); 1877 __ jmp(ecx);
1878 1878
1879 __ bind(&non_function); 1879 __ bind(&non_function);
1880 if (IsSuperConstructorCall()) __ Drop(1); 1880 if (IsSuperConstructorCall()) __ Drop(1);
1881 __ mov(edx, edi); 1881 __ mov(edx, edi);
1882 __ Jump(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); 1882 __ Jump(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET);
1883 } 1883 }
1884 1884
1885 1885
1886 static void EmitLoadTypeFeedbackVector(MacroAssembler* masm, Register vector) {
1887 __ mov(vector, Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
1888 __ mov(vector, FieldOperand(vector, JSFunction::kSharedFunctionInfoOffset));
1889 __ mov(vector, FieldOperand(vector,
1890 SharedFunctionInfo::kFeedbackVectorOffset));
1891 }
1892
1893
1894 void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) { 1886 void CallICStub::HandleArrayCase(MacroAssembler* masm, Label* miss) {
1895 // edi - function 1887 // edi - function
1896 // edx - slot id 1888 // edx - slot id
1897 // ebx - vector 1889 // ebx - vector
1898 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, ecx); 1890 __ LoadGlobalFunction(Context::ARRAY_FUNCTION_INDEX, ecx);
1899 __ cmp(edi, ecx); 1891 __ cmp(edi, ecx);
1900 __ j(not_equal, miss); 1892 __ j(not_equal, miss);
1901 1893
1902 __ mov(eax, arg_count()); 1894 __ mov(eax, arg_count());
1903 // Reload ecx. 1895 // Reload ecx.
(...skipping 2080 matching lines...) Expand 10 before | Expand all | Expand 10 after
3984 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); 3976 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE);
3985 __ pop(ecx); 3977 __ pop(ecx);
3986 int additional_offset = 3978 int additional_offset =
3987 function_mode() == JS_FUNCTION_STUB_MODE ? kPointerSize : 0; 3979 function_mode() == JS_FUNCTION_STUB_MODE ? kPointerSize : 0;
3988 __ lea(esp, MemOperand(esp, ebx, times_pointer_size, additional_offset)); 3980 __ lea(esp, MemOperand(esp, ebx, times_pointer_size, additional_offset));
3989 __ jmp(ecx); // Return to IC Miss stub, continuation still on stack. 3981 __ jmp(ecx); // Return to IC Miss stub, continuation still on stack.
3990 } 3982 }
3991 3983
3992 3984
3993 void LoadICTrampolineStub::Generate(MacroAssembler* masm) { 3985 void LoadICTrampolineStub::Generate(MacroAssembler* masm) {
3994 EmitLoadTypeFeedbackVector(masm, LoadWithVectorDescriptor::VectorRegister()); 3986 __ EmitLoadTypeFeedbackVector(LoadWithVectorDescriptor::VectorRegister());
3995 LoadICStub stub(isolate(), state()); 3987 LoadICStub stub(isolate(), state());
3996 stub.GenerateForTrampoline(masm); 3988 stub.GenerateForTrampoline(masm);
3997 } 3989 }
3998 3990
3999 3991
4000 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) { 3992 void KeyedLoadICTrampolineStub::Generate(MacroAssembler* masm) {
4001 EmitLoadTypeFeedbackVector(masm, LoadWithVectorDescriptor::VectorRegister()); 3993 __ EmitLoadTypeFeedbackVector(LoadWithVectorDescriptor::VectorRegister());
4002 KeyedLoadICStub stub(isolate(), state()); 3994 KeyedLoadICStub stub(isolate(), state());
4003 stub.GenerateForTrampoline(masm); 3995 stub.GenerateForTrampoline(masm);
4004 } 3996 }
4005 3997
4006 3998
4007 static void HandleArrayCases(MacroAssembler* masm, Register receiver, 3999 static void HandleArrayCases(MacroAssembler* masm, Register receiver,
4008 Register key, Register vector, Register slot, 4000 Register key, Register vector, Register slot,
4009 Register feedback, bool is_polymorphic, 4001 Register feedback, bool is_polymorphic,
4010 Label* miss) { 4002 Label* miss) {
4011 // feedback initially contains the feedback array 4003 // feedback initially contains the feedback array
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
4215 __ mov(feedback, FieldOperand(vector, slot, times_half_pointer_size, 4207 __ mov(feedback, FieldOperand(vector, slot, times_half_pointer_size,
4216 FixedArray::kHeaderSize + kPointerSize)); 4208 FixedArray::kHeaderSize + kPointerSize));
4217 HandleArrayCases(masm, receiver, key, vector, slot, feedback, false, &miss); 4209 HandleArrayCases(masm, receiver, key, vector, slot, feedback, false, &miss);
4218 4210
4219 __ bind(&miss); 4211 __ bind(&miss);
4220 KeyedLoadIC::GenerateMiss(masm); 4212 KeyedLoadIC::GenerateMiss(masm);
4221 } 4213 }
4222 4214
4223 4215
4224 void VectorStoreICTrampolineStub::Generate(MacroAssembler* masm) { 4216 void VectorStoreICTrampolineStub::Generate(MacroAssembler* masm) {
4225 EmitLoadTypeFeedbackVector(masm, VectorStoreICDescriptor::VectorRegister()); 4217 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister());
4226 VectorStoreICStub stub(isolate(), state()); 4218 VectorStoreICStub stub(isolate(), state());
4227 stub.GenerateForTrampoline(masm); 4219 stub.GenerateForTrampoline(masm);
4228 } 4220 }
4229 4221
4230 4222
4231 void VectorKeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) { 4223 void VectorKeyedStoreICTrampolineStub::Generate(MacroAssembler* masm) {
4232 EmitLoadTypeFeedbackVector(masm, VectorStoreICDescriptor::VectorRegister()); 4224 __ EmitLoadTypeFeedbackVector(VectorStoreICDescriptor::VectorRegister());
4233 VectorKeyedStoreICStub stub(isolate(), state()); 4225 VectorKeyedStoreICStub stub(isolate(), state());
4234 stub.GenerateForTrampoline(masm); 4226 stub.GenerateForTrampoline(masm);
4235 } 4227 }
4236 4228
4237 4229
4238 void VectorStoreICStub::Generate(MacroAssembler* masm) { 4230 void VectorStoreICStub::Generate(MacroAssembler* masm) {
4239 GenerateImpl(masm, false); 4231 GenerateImpl(masm, false);
4240 } 4232 }
4241 4233
4242 4234
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
4575 FixedArray::kHeaderSize + kPointerSize)); 4567 FixedArray::kHeaderSize + kPointerSize));
4576 HandlePolymorphicStoreCase(masm, receiver, key, vector, slot, scratch, &miss); 4568 HandlePolymorphicStoreCase(masm, receiver, key, vector, slot, scratch, &miss);
4577 4569
4578 __ bind(&miss); 4570 __ bind(&miss);
4579 __ pop(value); 4571 __ pop(value);
4580 KeyedStoreIC::GenerateMiss(masm); 4572 KeyedStoreIC::GenerateMiss(masm);
4581 } 4573 }
4582 4574
4583 4575
4584 void CallICTrampolineStub::Generate(MacroAssembler* masm) { 4576 void CallICTrampolineStub::Generate(MacroAssembler* masm) {
4585 EmitLoadTypeFeedbackVector(masm, ebx); 4577 __ EmitLoadTypeFeedbackVector(ebx);
4586 CallICStub stub(isolate(), state()); 4578 CallICStub stub(isolate(), state());
4587 __ jmp(stub.GetCode(), RelocInfo::CODE_TARGET); 4579 __ jmp(stub.GetCode(), RelocInfo::CODE_TARGET);
4588 } 4580 }
4589 4581
4590 4582
4591 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { 4583 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) {
4592 if (masm->isolate()->function_entry_hook() != NULL) { 4584 if (masm->isolate()->function_entry_hook() != NULL) {
4593 ProfileEntryHookStub stub(masm->isolate()); 4585 ProfileEntryHookStub stub(masm->isolate());
4594 masm->CallStub(&stub); 4586 masm->CallStub(&stub);
4595 } 4587 }
(...skipping 907 matching lines...) Expand 10 before | Expand all | Expand 10 after
5503 Operand(ebp, 7 * kPointerSize), NULL); 5495 Operand(ebp, 7 * kPointerSize), NULL);
5504 } 5496 }
5505 5497
5506 5498
5507 #undef __ 5499 #undef __
5508 5500
5509 } // namespace internal 5501 } // namespace internal
5510 } // namespace v8 5502 } // namespace v8
5511 5503
5512 #endif // V8_TARGET_ARCH_X87 5504 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « src/full-codegen/x87/full-codegen-x87.cc ('k') | src/x87/macro-assembler-x87.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698