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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 CSA_ASSERT(this, TaggedIsSmi(byte_length)); | 106 CSA_ASSERT(this, TaggedIsSmi(byte_length)); |
107 Goto(&setup_holder); | 107 Goto(&setup_holder); |
108 | 108 |
109 Bind(&setup_holder); | 109 Bind(&setup_holder); |
110 { | 110 { |
111 LoadMapAndElementsSize(holder, &fixed_typed_map, &element_size); | 111 LoadMapAndElementsSize(holder, &fixed_typed_map, &element_size); |
112 // Setup the holder (JSArrayBufferView). | 112 // Setup the holder (JSArrayBufferView). |
113 // - Set the length. | 113 // - Set the length. |
114 // - Set the byte_offset. | 114 // - Set the byte_offset. |
115 // - Set the byte_length. | 115 // - Set the byte_length. |
116 // - Set InternalFields to 0. | 116 // - Set EmbedderFields to 0. |
117 StoreObjectField(holder, JSTypedArray::kLengthOffset, length); | 117 StoreObjectField(holder, JSTypedArray::kLengthOffset, length); |
118 StoreObjectField(holder, JSArrayBufferView::kByteOffsetOffset, byte_offset); | 118 StoreObjectField(holder, JSArrayBufferView::kByteOffsetOffset, byte_offset); |
119 StoreObjectField(holder, JSArrayBufferView::kByteLengthOffset, byte_length); | 119 StoreObjectField(holder, JSArrayBufferView::kByteLengthOffset, byte_length); |
120 for (int offset = JSTypedArray::kSize; | 120 for (int offset = JSTypedArray::kSize; |
121 offset < JSTypedArray::kSizeWithInternalFields; | 121 offset < JSTypedArray::kSizeWithEmbedderFields; |
122 offset += kPointerSize) { | 122 offset += kPointerSize) { |
123 StoreObjectField(holder, offset, SmiConstant(Smi::kZero)); | 123 StoreObjectField(holder, offset, SmiConstant(Smi::kZero)); |
124 } | 124 } |
125 | 125 |
126 Branch(IsNull(maybe_buffer), &alloc_array_buffer, &attach_buffer); | 126 Branch(IsNull(maybe_buffer), &alloc_array_buffer, &attach_buffer); |
127 } | 127 } |
128 | 128 |
129 Bind(&alloc_array_buffer); | 129 Bind(&alloc_array_buffer); |
130 { | 130 { |
131 // Allocate a new ArrayBuffer and initialize it with empty properties and | 131 // Allocate a new ArrayBuffer and initialize it with empty properties and |
132 // elements. | 132 // elements. |
133 Node* const native_context = LoadNativeContext(context); | 133 Node* const native_context = LoadNativeContext(context); |
134 Node* const map = | 134 Node* const map = |
135 LoadContextElement(native_context, Context::ARRAY_BUFFER_MAP_INDEX); | 135 LoadContextElement(native_context, Context::ARRAY_BUFFER_MAP_INDEX); |
136 Node* empty_fixed_array = LoadRoot(Heap::kEmptyFixedArrayRootIndex); | 136 Node* empty_fixed_array = LoadRoot(Heap::kEmptyFixedArrayRootIndex); |
137 | 137 |
138 Node* buffer = Allocate(JSArrayBuffer::kSizeWithInternalFields); | 138 Node* buffer = Allocate(JSArrayBuffer::kSizeWithEmbedderFields); |
139 StoreMapNoWriteBarrier(buffer, map); | 139 StoreMapNoWriteBarrier(buffer, map); |
140 StoreObjectFieldNoWriteBarrier(buffer, JSArray::kPropertiesOffset, | 140 StoreObjectFieldNoWriteBarrier(buffer, JSArray::kPropertiesOffset, |
141 empty_fixed_array); | 141 empty_fixed_array); |
142 StoreObjectFieldNoWriteBarrier(buffer, JSArray::kElementsOffset, | 142 StoreObjectFieldNoWriteBarrier(buffer, JSArray::kElementsOffset, |
143 empty_fixed_array); | 143 empty_fixed_array); |
144 // Setup the ArrayBuffer. | 144 // Setup the ArrayBuffer. |
145 // - Set BitField to 0. | 145 // - Set BitField to 0. |
146 // - Set IsExternal and IsNeuterable bits of BitFieldSlot. | 146 // - Set IsExternal and IsNeuterable bits of BitFieldSlot. |
147 // - Set the byte_length field to byte_length. | 147 // - Set the byte_length field to byte_length. |
148 // - Set backing_store to null/Smi(0). | 148 // - Set backing_store to null/Smi(0). |
149 // - Set all internal fields to Smi(0). | 149 // - Set all embedder fields to Smi(0). |
150 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBitFieldSlot, | 150 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBitFieldSlot, |
151 SmiConstant(Smi::kZero)); | 151 SmiConstant(Smi::kZero)); |
152 int32_t bitfield_value = (1 << JSArrayBuffer::IsExternal::kShift) | | 152 int32_t bitfield_value = (1 << JSArrayBuffer::IsExternal::kShift) | |
153 (1 << JSArrayBuffer::IsNeuterable::kShift); | 153 (1 << JSArrayBuffer::IsNeuterable::kShift); |
154 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBitFieldOffset, | 154 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBitFieldOffset, |
155 Int32Constant(bitfield_value), | 155 Int32Constant(bitfield_value), |
156 MachineRepresentation::kWord32); | 156 MachineRepresentation::kWord32); |
157 | 157 |
158 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kByteLengthOffset, | 158 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kByteLengthOffset, |
159 byte_length); | 159 byte_length); |
160 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBackingStoreOffset, | 160 StoreObjectFieldNoWriteBarrier(buffer, JSArrayBuffer::kBackingStoreOffset, |
161 SmiConstant(Smi::kZero)); | 161 SmiConstant(Smi::kZero)); |
162 for (int i = 0; i < v8::ArrayBuffer::kInternalFieldCount; i++) { | 162 for (int i = 0; i < v8::ArrayBuffer::kEmbedderFieldCount; i++) { |
163 int offset = JSArrayBuffer::kSize + i * kPointerSize; | 163 int offset = JSArrayBuffer::kSize + i * kPointerSize; |
164 StoreObjectFieldNoWriteBarrier(buffer, offset, SmiConstant(Smi::kZero)); | 164 StoreObjectFieldNoWriteBarrier(buffer, offset, SmiConstant(Smi::kZero)); |
165 } | 165 } |
166 | 166 |
167 StoreObjectField(holder, JSArrayBufferView::kBufferOffset, buffer); | 167 StoreObjectField(holder, JSArrayBufferView::kBufferOffset, buffer); |
168 | 168 |
169 // Check the alignment. | 169 // Check the alignment. |
170 GotoIf(SmiEqual(SmiMod(element_size.value(), SmiConstant(kObjectAlignment)), | 170 GotoIf(SmiEqual(SmiMod(element_size.value(), SmiConstant(kObjectAlignment)), |
171 SmiConstant(0)), | 171 SmiConstant(0)), |
172 &aligned); | 172 &aligned); |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 Handle<Object> search_element = args.at<Object>(1); | 546 Handle<Object> search_element = args.at<Object>(1); |
547 ElementsAccessor* elements = array->GetElementsAccessor(); | 547 ElementsAccessor* elements = array->GetElementsAccessor(); |
548 Maybe<bool> result = elements->IncludesValue(isolate, array, search_element, | 548 Maybe<bool> result = elements->IncludesValue(isolate, array, search_element, |
549 static_cast<uint32_t>(index), | 549 static_cast<uint32_t>(index), |
550 static_cast<uint32_t>(len)); | 550 static_cast<uint32_t>(len)); |
551 return *isolate->factory()->ToBoolean(result.FromJust()); | 551 return *isolate->factory()->ToBoolean(result.FromJust()); |
552 } | 552 } |
553 | 553 |
554 } // namespace internal | 554 } // namespace internal |
555 } // namespace v8 | 555 } // namespace v8 |
OLD | NEW |