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-utils.h" | 5 #include "src/builtins/builtins-utils.h" |
6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" |
7 #include "src/code-stub-assembler.h" | 7 #include "src/code-stub-assembler.h" |
8 #include "src/counters.h" | 8 #include "src/counters.h" |
9 #include "src/elements.h" | 9 #include "src/elements.h" |
10 #include "src/objects-inl.h" | 10 #include "src/objects-inl.h" |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 CSA_ASSERT(this, TaggedIsSmi(byte_length)); | 139 CSA_ASSERT(this, TaggedIsSmi(byte_length)); |
140 Goto(&setup_holder); | 140 Goto(&setup_holder); |
141 | 141 |
142 Bind(&setup_holder); | 142 Bind(&setup_holder); |
143 { | 143 { |
144 LoadMapAndElementsSize(holder, &fixed_typed_map, &element_size); | 144 LoadMapAndElementsSize(holder, &fixed_typed_map, &element_size); |
145 // Setup the holder (JSArrayBufferView). | 145 // Setup the holder (JSArrayBufferView). |
146 // - Set the length. | 146 // - Set the length. |
147 // - Set the byte_offset. | 147 // - Set the byte_offset. |
148 // - Set the byte_length. | 148 // - Set the byte_length. |
149 // - Set InternalFields to 0. | 149 // - Set EmbedderFields to 0. |
150 StoreObjectField(holder, JSTypedArray::kLengthOffset, length); | 150 StoreObjectField(holder, JSTypedArray::kLengthOffset, length); |
151 StoreObjectField(holder, JSArrayBufferView::kByteOffsetOffset, byte_offset); | 151 StoreObjectField(holder, JSArrayBufferView::kByteOffsetOffset, byte_offset); |
152 StoreObjectField(holder, JSArrayBufferView::kByteLengthOffset, byte_length); | 152 StoreObjectField(holder, JSArrayBufferView::kByteLengthOffset, byte_length); |
153 for (int offset = JSTypedArray::kSize; | 153 for (int offset = JSTypedArray::kSize; |
154 offset < JSTypedArray::kSizeWithInternalFields; | 154 offset < JSTypedArray::kSizeWithEmbedderFields; |
155 offset += kPointerSize) { | 155 offset += kPointerSize) { |
156 StoreObjectField(holder, offset, SmiConstant(Smi::kZero)); | 156 StoreObjectField(holder, offset, SmiConstant(Smi::kZero)); |
157 } | 157 } |
158 | 158 |
159 Branch(IsNull(maybe_buffer), &alloc_array_buffer, &attach_buffer); | 159 Branch(IsNull(maybe_buffer), &alloc_array_buffer, &attach_buffer); |
160 } | 160 } |
161 | 161 |
162 Bind(&alloc_array_buffer); | 162 Bind(&alloc_array_buffer); |
163 { | 163 { |
164 // Allocate a new ArrayBuffer and initialize it with empty properties and | 164 // Allocate a new ArrayBuffer and initialize it with empty properties and |
165 // elements. | 165 // elements. |
166 Node* const native_context = LoadNativeContext(context); | 166 Node* const native_context = LoadNativeContext(context); |
167 Node* const map = | 167 Node* const map = |
168 LoadContextElement(native_context, Context::ARRAY_BUFFER_MAP_INDEX); | 168 LoadContextElement(native_context, Context::ARRAY_BUFFER_MAP_INDEX); |
169 Node* empty_fixed_array = LoadRoot(Heap::kEmptyFixedArrayRootIndex); | 169 Node* empty_fixed_array = LoadRoot(Heap::kEmptyFixedArrayRootIndex); |
170 | 170 |
171 Node* const buffer = Allocate(JSArrayBuffer::kSizeWithInternalFields); | 171 Node* const buffer = Allocate(JSArrayBuffer::kSizeWithEmbedderFields); |
172 StoreMapNoWriteBarrier(buffer, map); | 172 StoreMapNoWriteBarrier(buffer, map); |
173 StoreObjectFieldNoWriteBarrier(buffer, JSArray::kPropertiesOffset, | 173 StoreObjectFieldNoWriteBarrier(buffer, JSArray::kPropertiesOffset, |
174 empty_fixed_array); | 174 empty_fixed_array); |
175 StoreObjectFieldNoWriteBarrier(buffer, JSArray::kElementsOffset, | 175 StoreObjectFieldNoWriteBarrier(buffer, JSArray::kElementsOffset, |
176 empty_fixed_array); | 176 empty_fixed_array); |
177 // Setup the ArrayBuffer. | 177 // Setup the ArrayBuffer. |
178 // - Set BitField to 0. | 178 // - Set BitField to 0. |
179 // - Set IsExternal and IsNeuterable bits of BitFieldSlot. | 179 // - Set IsExternal and IsNeuterable bits of BitFieldSlot. |
180 // - Set the byte_length field to byte_length. | 180 // - Set the byte_length field to byte_length. |
181 // - Set backing_store to null/Smi(0). | 181 // - Set backing_store to null/Smi(0). |
182 // - Set all internal fields to Smi(0). | 182 // - Set all embedder fields to Smi(0). |
183 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBitFieldSlot, | 183 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBitFieldSlot, |
184 SmiConstant(Smi::kZero)); | 184 SmiConstant(Smi::kZero)); |
185 int32_t bitfield_value = (1 << JSArrayBuffer::IsExternal::kShift) | | 185 int32_t bitfield_value = (1 << JSArrayBuffer::IsExternal::kShift) | |
186 (1 << JSArrayBuffer::IsNeuterable::kShift); | 186 (1 << JSArrayBuffer::IsNeuterable::kShift); |
187 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBitFieldOffset, | 187 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBitFieldOffset, |
188 Int32Constant(bitfield_value), | 188 Int32Constant(bitfield_value), |
189 MachineRepresentation::kWord32); | 189 MachineRepresentation::kWord32); |
190 | 190 |
191 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kByteLengthOffset, | 191 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kByteLengthOffset, |
192 byte_length); | 192 byte_length); |
193 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBackingStoreOffset, | 193 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBackingStoreOffset, |
194 SmiConstant(Smi::kZero)); | 194 SmiConstant(Smi::kZero)); |
195 for (int i = 0; i < v8::ArrayBuffer::kInternalFieldCount; i++) { | 195 for (int i = 0; i < v8::ArrayBuffer::kEmbedderFieldCount; i++) { |
196 int offset = JSArrayBuffer::kSize + i * kPointerSize; | 196 int offset = JSArrayBuffer::kSize + i * kPointerSize; |
197 StoreObjectFieldNoWriteBarrier(buffer, offset, SmiConstant(Smi::kZero)); | 197 StoreObjectFieldNoWriteBarrier(buffer, offset, SmiConstant(Smi::kZero)); |
198 } | 198 } |
199 | 199 |
200 StoreObjectField(holder, JSArrayBufferView::kBufferOffset, buffer); | 200 StoreObjectField(holder, JSArrayBufferView::kBufferOffset, buffer); |
201 | 201 |
202 // Check the alignment. | 202 // Check the alignment. |
203 GotoIf(SmiEqual(SmiMod(element_size.value(), SmiConstant(kObjectAlignment)), | 203 GotoIf(SmiEqual(SmiMod(element_size.value(), SmiConstant(kObjectAlignment)), |
204 SmiConstant(0)), | 204 SmiConstant(0)), |
205 &aligned); | 205 &aligned); |
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 ElementsAccessor* elements = array->GetElementsAccessor(); | 735 ElementsAccessor* elements = array->GetElementsAccessor(); |
736 Maybe<int64_t> result = elements->IndexOfValue(isolate, array, search_element, | 736 Maybe<int64_t> result = elements->IndexOfValue(isolate, array, search_element, |
737 static_cast<uint32_t>(index), | 737 static_cast<uint32_t>(index), |
738 static_cast<uint32_t>(len)); | 738 static_cast<uint32_t>(len)); |
739 MAYBE_RETURN(result, isolate->heap()->exception()); | 739 MAYBE_RETURN(result, isolate->heap()->exception()); |
740 return *isolate->factory()->NewNumberFromInt64(result.FromJust()); | 740 return *isolate->factory()->NewNumberFromInt64(result.FromJust()); |
741 } | 741 } |
742 | 742 |
743 } // namespace internal | 743 } // namespace internal |
744 } // namespace v8 | 744 } // namespace v8 |
OLD | NEW |