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 #include "src/code-stubs.h" | 5 #include "src/code-stubs.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/ast/ast.h" | 9 #include "src/ast/ast.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
11 #include "src/code-factory.h" | 11 #include "src/code-factory.h" |
12 #include "src/code-stub-assembler.h" | 12 #include "src/code-stub-assembler.h" |
13 #include "src/factory.h" | 13 #include "src/factory.h" |
14 #include "src/gdb-jit.h" | 14 #include "src/gdb-jit.h" |
15 #include "src/ic/accessor-assembler.h" | |
16 #include "src/ic/handler-compiler.h" | |
17 #include "src/ic/ic-stats.h" | 15 #include "src/ic/ic-stats.h" |
18 #include "src/ic/ic.h" | 16 #include "src/ic/ic.h" |
19 #include "src/macro-assembler.h" | 17 #include "src/macro-assembler.h" |
20 #include "src/tracing/tracing-category-observer.h" | 18 #include "src/tracing/tracing-category-observer.h" |
21 | 19 |
22 namespace v8 { | 20 namespace v8 { |
23 namespace internal { | 21 namespace internal { |
24 | 22 |
25 using compiler::CodeAssemblerState; | 23 using compiler::CodeAssemblerState; |
26 | 24 |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
432 Handle<Code> TurboFanCodeStub::GenerateCode() { | 430 Handle<Code> TurboFanCodeStub::GenerateCode() { |
433 const char* name = CodeStub::MajorName(MajorKey()); | 431 const char* name = CodeStub::MajorName(MajorKey()); |
434 Zone zone(isolate()->allocator(), ZONE_NAME); | 432 Zone zone(isolate()->allocator(), ZONE_NAME); |
435 CallInterfaceDescriptor descriptor(GetCallInterfaceDescriptor()); | 433 CallInterfaceDescriptor descriptor(GetCallInterfaceDescriptor()); |
436 compiler::CodeAssemblerState state(isolate(), &zone, descriptor, | 434 compiler::CodeAssemblerState state(isolate(), &zone, descriptor, |
437 GetCodeFlags(), name); | 435 GetCodeFlags(), name); |
438 GenerateAssembly(&state); | 436 GenerateAssembly(&state); |
439 return compiler::CodeAssembler::GenerateCode(&state); | 437 return compiler::CodeAssembler::GenerateCode(&state); |
440 } | 438 } |
441 | 439 |
442 void LoadICProtoArrayStub::GenerateAssembly(CodeAssemblerState* state) const { | |
443 AccessorAssembler::GenerateLoadICProtoArray( | |
444 state, throw_reference_error_if_nonexistent()); | |
445 } | |
446 | |
447 void ElementsTransitionAndStoreStub::GenerateAssembly( | 440 void ElementsTransitionAndStoreStub::GenerateAssembly( |
448 compiler::CodeAssemblerState* state) const { | 441 compiler::CodeAssemblerState* state) const { |
449 typedef CodeStubAssembler::Label Label; | 442 typedef CodeStubAssembler::Label Label; |
450 typedef compiler::Node Node; | 443 typedef compiler::Node Node; |
451 CodeStubAssembler assembler(state); | 444 CodeStubAssembler assembler(state); |
452 | 445 |
453 Node* receiver = assembler.Parameter(Descriptor::kReceiver); | 446 Node* receiver = assembler.Parameter(Descriptor::kReceiver); |
454 Node* key = assembler.Parameter(Descriptor::kName); | 447 Node* key = assembler.Parameter(Descriptor::kName); |
455 Node* value = assembler.Parameter(Descriptor::kValue); | 448 Node* value = assembler.Parameter(Descriptor::kValue); |
456 Node* map = assembler.Parameter(Descriptor::kMap); | 449 Node* map = assembler.Parameter(Descriptor::kMap); |
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1611 assembler.Return(value); | 1604 assembler.Return(value); |
1612 | 1605 |
1613 assembler.Bind(&miss); | 1606 assembler.Bind(&miss); |
1614 { | 1607 { |
1615 assembler.Comment("Miss"); | 1608 assembler.Comment("Miss"); |
1616 assembler.TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot, | 1609 assembler.TailCallRuntime(Runtime::kStoreIC_Miss, context, value, slot, |
1617 vector, receiver, name); | 1610 vector, receiver, name); |
1618 } | 1611 } |
1619 } | 1612 } |
1620 | 1613 |
1621 void LoadFieldStub::GenerateAssembly( | |
1622 compiler::CodeAssemblerState* state) const { | |
1623 AccessorAssembler::GenerateLoadField(state); | |
1624 } | |
1625 | |
1626 void KeyedLoadSloppyArgumentsStub::GenerateAssembly( | 1614 void KeyedLoadSloppyArgumentsStub::GenerateAssembly( |
1627 compiler::CodeAssemblerState* state) const { | 1615 compiler::CodeAssemblerState* state) const { |
1628 typedef CodeStubAssembler::Label Label; | 1616 typedef CodeStubAssembler::Label Label; |
1629 typedef compiler::Node Node; | 1617 typedef compiler::Node Node; |
1630 CodeStubAssembler assembler(state); | 1618 CodeStubAssembler assembler(state); |
1631 | 1619 |
1632 Node* receiver = assembler.Parameter(Descriptor::kReceiver); | 1620 Node* receiver = assembler.Parameter(Descriptor::kReceiver); |
1633 Node* key = assembler.Parameter(Descriptor::kName); | 1621 Node* key = assembler.Parameter(Descriptor::kName); |
1634 Node* slot = assembler.Parameter(Descriptor::kSlot); | 1622 Node* slot = assembler.Parameter(Descriptor::kSlot); |
1635 Node* vector = assembler.Parameter(Descriptor::kVector); | 1623 Node* vector = assembler.Parameter(Descriptor::kVector); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1772 } | 1760 } |
1773 | 1761 |
1774 | 1762 |
1775 void JSEntryStub::FinishCode(Handle<Code> code) { | 1763 void JSEntryStub::FinishCode(Handle<Code> code) { |
1776 Handle<FixedArray> handler_table = | 1764 Handle<FixedArray> handler_table = |
1777 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); | 1765 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); |
1778 handler_table->set(0, Smi::FromInt(handler_offset_)); | 1766 handler_table->set(0, Smi::FromInt(handler_offset_)); |
1779 code->set_handler_table(*handler_table); | 1767 code->set_handler_table(*handler_table); |
1780 } | 1768 } |
1781 | 1769 |
1782 | |
1783 void HandlerStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { | |
1784 DCHECK(kind() == Code::LOAD_IC || kind() == Code::KEYED_LOAD_IC); | |
1785 if (kind() == Code::KEYED_LOAD_IC) { | |
1786 descriptor->Initialize( | |
1787 FUNCTION_ADDR(Runtime_KeyedLoadIC_MissFromStubFailure)); | |
1788 } | |
1789 } | |
1790 | |
1791 | |
1792 CallInterfaceDescriptor HandlerStub::GetCallInterfaceDescriptor() const { | |
1793 if (kind() == Code::LOAD_IC || kind() == Code::KEYED_LOAD_IC) { | |
1794 return LoadWithVectorDescriptor(isolate()); | |
1795 } else { | |
1796 DCHECK(kind() == Code::STORE_IC || kind() == Code::KEYED_STORE_IC); | |
1797 return StoreWithVectorDescriptor(isolate()); | |
1798 } | |
1799 } | |
1800 | |
1801 void TransitionElementsKindStub::InitializeDescriptor( | 1770 void TransitionElementsKindStub::InitializeDescriptor( |
1802 CodeStubDescriptor* descriptor) { | 1771 CodeStubDescriptor* descriptor) { |
1803 descriptor->Initialize( | 1772 descriptor->Initialize( |
1804 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); | 1773 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); |
1805 } | 1774 } |
1806 | 1775 |
1807 | 1776 |
1808 void AllocateHeapNumberStub::InitializeDescriptor( | 1777 void AllocateHeapNumberStub::InitializeDescriptor( |
1809 CodeStubDescriptor* descriptor) { | 1778 CodeStubDescriptor* descriptor) { |
1810 descriptor->Initialize( | 1779 descriptor->Initialize( |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2208 } | 2177 } |
2209 | 2178 |
2210 ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate) | 2179 ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate) |
2211 : PlatformCodeStub(isolate) {} | 2180 : PlatformCodeStub(isolate) {} |
2212 | 2181 |
2213 InternalArrayConstructorStub::InternalArrayConstructorStub(Isolate* isolate) | 2182 InternalArrayConstructorStub::InternalArrayConstructorStub(Isolate* isolate) |
2214 : PlatformCodeStub(isolate) {} | 2183 : PlatformCodeStub(isolate) {} |
2215 | 2184 |
2216 } // namespace internal | 2185 } // namespace internal |
2217 } // namespace v8 | 2186 } // namespace v8 |
OLD | NEW |