OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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/builtins/builtins.h" | 5 #include "src/builtins/builtins.h" |
6 #include "src/builtins/builtins-utils.h" | 6 #include "src/builtins/builtins-utils.h" |
7 #include "src/interface-descriptors.h" | 7 #include "src/interface-descriptors.h" |
8 #include "src/macro-assembler.h" | 8 #include "src/macro-assembler.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 } | 47 } |
48 | 48 |
49 void Builtins::Generate_StackCheck(MacroAssembler* masm) { | 49 void Builtins::Generate_StackCheck(MacroAssembler* masm) { |
50 masm->TailCallRuntime(Runtime::kStackGuard); | 50 masm->TailCallRuntime(Runtime::kStackGuard); |
51 } | 51 } |
52 | 52 |
53 // ----------------------------------------------------------------------------- | 53 // ----------------------------------------------------------------------------- |
54 // TurboFan support builtins. | 54 // TurboFan support builtins. |
55 | 55 |
56 void Builtins::Generate_CopyFastSmiOrObjectElements( | 56 void Builtins::Generate_CopyFastSmiOrObjectElements( |
57 CodeStubAssembler* assembler) { | 57 compiler::CodeAssemblerState* state) { |
58 typedef CodeStubAssembler::Label Label; | 58 typedef CodeStubAssembler::Label Label; |
59 typedef compiler::Node Node; | 59 typedef compiler::Node Node; |
60 typedef CopyFastSmiOrObjectElementsDescriptor Descriptor; | 60 typedef CopyFastSmiOrObjectElementsDescriptor Descriptor; |
| 61 CodeStubAssembler assembler(state); |
61 | 62 |
62 Node* object = assembler->Parameter(Descriptor::kObject); | 63 Node* object = assembler.Parameter(Descriptor::kObject); |
63 | 64 |
64 // Load the {object}s elements. | 65 // Load the {object}s elements. |
65 Node* source = assembler->LoadObjectField(object, JSObject::kElementsOffset); | 66 Node* source = assembler.LoadObjectField(object, JSObject::kElementsOffset); |
66 | 67 |
67 CodeStubAssembler::ParameterMode mode = assembler->OptimalParameterMode(); | 68 CodeStubAssembler::ParameterMode mode = assembler.OptimalParameterMode(); |
68 Node* length = assembler->UntagParameter( | 69 Node* length = assembler.UntagParameter( |
69 assembler->LoadFixedArrayBaseLength(source), mode); | 70 assembler.LoadFixedArrayBaseLength(source), mode); |
70 | 71 |
71 // Check if we can allocate in new space. | 72 // Check if we can allocate in new space. |
72 ElementsKind kind = FAST_ELEMENTS; | 73 ElementsKind kind = FAST_ELEMENTS; |
73 int max_elements = FixedArrayBase::GetMaxLengthForNewSpaceAllocation(kind); | 74 int max_elements = FixedArrayBase::GetMaxLengthForNewSpaceAllocation(kind); |
74 Label if_newspace(assembler), if_oldspace(assembler); | 75 Label if_newspace(&assembler), if_oldspace(&assembler); |
75 assembler->Branch( | 76 assembler.Branch( |
76 assembler->UintPtrLessThan( | 77 assembler.UintPtrLessThan( |
77 length, assembler->IntPtrOrSmiConstant(max_elements, mode)), | 78 length, assembler.IntPtrOrSmiConstant(max_elements, mode)), |
78 &if_newspace, &if_oldspace); | 79 &if_newspace, &if_oldspace); |
79 | 80 |
80 assembler->Bind(&if_newspace); | 81 assembler.Bind(&if_newspace); |
81 { | 82 { |
82 Node* target = assembler->AllocateFixedArray(kind, length, mode); | 83 Node* target = assembler.AllocateFixedArray(kind, length, mode); |
83 assembler->CopyFixedArrayElements(kind, source, target, length, | 84 assembler.CopyFixedArrayElements(kind, source, target, length, |
84 SKIP_WRITE_BARRIER, mode); | 85 SKIP_WRITE_BARRIER, mode); |
85 assembler->StoreObjectField(object, JSObject::kElementsOffset, target); | 86 assembler.StoreObjectField(object, JSObject::kElementsOffset, target); |
86 assembler->Return(target); | 87 assembler.Return(target); |
87 } | 88 } |
88 | 89 |
89 assembler->Bind(&if_oldspace); | 90 assembler.Bind(&if_oldspace); |
90 { | 91 { |
91 Node* target = assembler->AllocateFixedArray( | 92 Node* target = assembler.AllocateFixedArray(kind, length, mode, |
92 kind, length, mode, CodeStubAssembler::kPretenured); | 93 CodeStubAssembler::kPretenured); |
93 assembler->CopyFixedArrayElements(kind, source, target, length, | 94 assembler.CopyFixedArrayElements(kind, source, target, length, |
94 UPDATE_WRITE_BARRIER, mode); | 95 UPDATE_WRITE_BARRIER, mode); |
95 assembler->StoreObjectField(object, JSObject::kElementsOffset, target); | 96 assembler.StoreObjectField(object, JSObject::kElementsOffset, target); |
96 assembler->Return(target); | 97 assembler.Return(target); |
97 } | 98 } |
98 } | 99 } |
99 | 100 |
100 void Builtins::Generate_GrowFastDoubleElements(CodeStubAssembler* assembler) { | 101 void Builtins::Generate_GrowFastDoubleElements( |
| 102 compiler::CodeAssemblerState* state) { |
101 typedef CodeStubAssembler::Label Label; | 103 typedef CodeStubAssembler::Label Label; |
102 typedef compiler::Node Node; | 104 typedef compiler::Node Node; |
103 typedef GrowArrayElementsDescriptor Descriptor; | 105 typedef GrowArrayElementsDescriptor Descriptor; |
| 106 CodeStubAssembler assembler(state); |
104 | 107 |
105 Node* object = assembler->Parameter(Descriptor::kObject); | 108 Node* object = assembler.Parameter(Descriptor::kObject); |
106 Node* key = assembler->Parameter(Descriptor::kKey); | 109 Node* key = assembler.Parameter(Descriptor::kKey); |
107 Node* context = assembler->Parameter(Descriptor::kContext); | 110 Node* context = assembler.Parameter(Descriptor::kContext); |
108 | 111 |
109 Label runtime(assembler, CodeStubAssembler::Label::kDeferred); | 112 Label runtime(&assembler, CodeStubAssembler::Label::kDeferred); |
110 Node* elements = assembler->LoadElements(object); | 113 Node* elements = assembler.LoadElements(object); |
111 elements = assembler->TryGrowElementsCapacity( | 114 elements = assembler.TryGrowElementsCapacity( |
112 object, elements, FAST_DOUBLE_ELEMENTS, key, &runtime); | 115 object, elements, FAST_DOUBLE_ELEMENTS, key, &runtime); |
113 assembler->Return(elements); | 116 assembler.Return(elements); |
114 | 117 |
115 assembler->Bind(&runtime); | 118 assembler.Bind(&runtime); |
116 assembler->TailCallRuntime(Runtime::kGrowArrayElements, context, object, key); | 119 assembler.TailCallRuntime(Runtime::kGrowArrayElements, context, object, key); |
117 } | 120 } |
118 | 121 |
119 void Builtins::Generate_GrowFastSmiOrObjectElements( | 122 void Builtins::Generate_GrowFastSmiOrObjectElements( |
120 CodeStubAssembler* assembler) { | 123 compiler::CodeAssemblerState* state) { |
121 typedef CodeStubAssembler::Label Label; | 124 typedef CodeStubAssembler::Label Label; |
122 typedef compiler::Node Node; | 125 typedef compiler::Node Node; |
123 typedef GrowArrayElementsDescriptor Descriptor; | 126 typedef GrowArrayElementsDescriptor Descriptor; |
| 127 CodeStubAssembler assembler(state); |
124 | 128 |
125 Node* object = assembler->Parameter(Descriptor::kObject); | 129 Node* object = assembler.Parameter(Descriptor::kObject); |
126 Node* key = assembler->Parameter(Descriptor::kKey); | 130 Node* key = assembler.Parameter(Descriptor::kKey); |
127 Node* context = assembler->Parameter(Descriptor::kContext); | 131 Node* context = assembler.Parameter(Descriptor::kContext); |
128 | 132 |
129 Label runtime(assembler, CodeStubAssembler::Label::kDeferred); | 133 Label runtime(&assembler, CodeStubAssembler::Label::kDeferred); |
130 Node* elements = assembler->LoadElements(object); | 134 Node* elements = assembler.LoadElements(object); |
131 elements = assembler->TryGrowElementsCapacity(object, elements, FAST_ELEMENTS, | 135 elements = assembler.TryGrowElementsCapacity(object, elements, FAST_ELEMENTS, |
132 key, &runtime); | 136 key, &runtime); |
133 assembler->Return(elements); | 137 assembler.Return(elements); |
134 | 138 |
135 assembler->Bind(&runtime); | 139 assembler.Bind(&runtime); |
136 assembler->TailCallRuntime(Runtime::kGrowArrayElements, context, object, key); | 140 assembler.TailCallRuntime(Runtime::kGrowArrayElements, context, object, key); |
137 } | 141 } |
138 | 142 |
139 } // namespace internal | 143 } // namespace internal |
140 } // namespace v8 | 144 } // namespace v8 |
OLD | NEW |