| OLD | NEW |
| 1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 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-gen.h" | 5 #include "src/builtins/builtins-utils-gen.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 | 8 |
| 9 namespace v8 { | 9 namespace v8 { |
| 10 namespace internal { | 10 namespace internal { |
| (...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 internal 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 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 "%TypedArray%.prototype.entries()"); | 574 "%TypedArray%.prototype.entries()"); |
| 575 } | 575 } |
| 576 | 576 |
| 577 TF_BUILTIN(TypedArrayPrototypeKeys, TypedArrayBuiltinsAssembler) { | 577 TF_BUILTIN(TypedArrayPrototypeKeys, TypedArrayBuiltinsAssembler) { |
| 578 GenerateTypedArrayPrototypeIterationMethod<IterationKind::kKeys>( | 578 GenerateTypedArrayPrototypeIterationMethod<IterationKind::kKeys>( |
| 579 "%TypedArray%.prototype.keys()"); | 579 "%TypedArray%.prototype.keys()"); |
| 580 } | 580 } |
| 581 | 581 |
| 582 } // namespace internal | 582 } // namespace internal |
| 583 } // namespace v8 | 583 } // namespace v8 |
| OLD | NEW |