| 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/ic/accessor-assembler.h" | 5 #include "src/ic/accessor-assembler.h" |
| 6 #include "src/ic/accessor-assembler-impl.h" | 6 #include "src/ic/accessor-assembler-impl.h" |
| 7 | 7 |
| 8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
| 9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
| 10 #include "src/ic/handler-configuration.h" | 10 #include "src/ic/handler-configuration.h" |
| (...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 872 Node* value_index = EntryToIndex<SeededNumberDictionary>( | 872 Node* value_index = EntryToIndex<SeededNumberDictionary>( |
| 873 var_entry.value(), SeededNumberDictionary::kEntryValueIndex); | 873 var_entry.value(), SeededNumberDictionary::kEntryValueIndex); |
| 874 Return(LoadFixedArrayElement(elements, value_index, 0, INTPTR_PARAMETERS)); | 874 Return(LoadFixedArrayElement(elements, value_index, 0, INTPTR_PARAMETERS)); |
| 875 } | 875 } |
| 876 | 876 |
| 877 Bind(&if_typed_array); | 877 Bind(&if_typed_array); |
| 878 { | 878 { |
| 879 Comment("typed elements"); | 879 Comment("typed elements"); |
| 880 // Check if buffer has been neutered. | 880 // Check if buffer has been neutered. |
| 881 Node* buffer = LoadObjectField(object, JSArrayBufferView::kBufferOffset); | 881 Node* buffer = LoadObjectField(object, JSArrayBufferView::kBufferOffset); |
| 882 Node* bitfield = LoadObjectField(buffer, JSArrayBuffer::kBitFieldOffset, | 882 GotoIf(IsDetachedBuffer(buffer), miss); |
| 883 MachineType::Uint32()); | |
| 884 GotoIf(IsSetWord32<JSArrayBuffer::WasNeutered>(bitfield), miss); | |
| 885 | 883 |
| 886 // Bounds check. | 884 // Bounds check. |
| 887 Node* length = | 885 Node* length = |
| 888 SmiUntag(LoadObjectField(object, JSTypedArray::kLengthOffset)); | 886 SmiUntag(LoadObjectField(object, JSTypedArray::kLengthOffset)); |
| 889 GotoUnless(UintPtrLessThan(intptr_index, length), out_of_bounds); | 887 GotoUnless(UintPtrLessThan(intptr_index, length), out_of_bounds); |
| 890 | 888 |
| 891 // Backing store = external_pointer + base_pointer. | 889 // Backing store = external_pointer + base_pointer. |
| 892 Node* external_pointer = | 890 Node* external_pointer = |
| 893 LoadObjectField(elements, FixedTypedArrayBase::kExternalPointerOffset, | 891 LoadObjectField(elements, FixedTypedArrayBase::kExternalPointerOffset, |
| 894 MachineType::Pointer()); | 892 MachineType::Pointer()); |
| 895 Node* base_pointer = | 893 Node* base_pointer = |
| 896 LoadObjectField(elements, FixedTypedArrayBase::kBasePointerOffset, | 894 LoadObjectField(elements, FixedTypedArrayBase::kBasePointerOffset); |
| 897 MachineType::Pointer()); | 895 Node* backing_store = |
| 898 Node* backing_store = IntPtrAdd(external_pointer, base_pointer); | 896 IntPtrAdd(external_pointer, BitcastTaggedToWord(base_pointer)); |
| 899 | 897 |
| 900 Label uint8_elements(this), int8_elements(this), uint16_elements(this), | 898 Label uint8_elements(this), int8_elements(this), uint16_elements(this), |
| 901 int16_elements(this), uint32_elements(this), int32_elements(this), | 899 int16_elements(this), uint32_elements(this), int32_elements(this), |
| 902 float32_elements(this), float64_elements(this); | 900 float32_elements(this), float64_elements(this); |
| 903 Label* elements_kind_labels[] = { | 901 Label* elements_kind_labels[] = { |
| 904 &uint8_elements, &uint8_elements, &int8_elements, | 902 &uint8_elements, &uint8_elements, &int8_elements, |
| 905 &uint16_elements, &int16_elements, &uint32_elements, | 903 &uint16_elements, &int16_elements, &uint32_elements, |
| 906 &int32_elements, &float32_elements, &float64_elements}; | 904 &int32_elements, &float32_elements, &float64_elements}; |
| 907 int32_t elements_kinds[] = { | 905 int32_t elements_kinds[] = { |
| 908 UINT8_ELEMENTS, UINT8_CLAMPED_ELEMENTS, INT8_ELEMENTS, | 906 UINT8_ELEMENTS, UINT8_CLAMPED_ELEMENTS, INT8_ELEMENTS, |
| (...skipping 918 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1827 void AccessorAssembler::GenerateKeyedStoreICTrampolineTF( | 1825 void AccessorAssembler::GenerateKeyedStoreICTrampolineTF( |
| 1828 CodeAssemblerState* state, LanguageMode language_mode) { | 1826 CodeAssemblerState* state, LanguageMode language_mode) { |
| 1829 AccessorAssemblerImpl assembler(state); | 1827 AccessorAssemblerImpl assembler(state); |
| 1830 assembler.GenerateKeyedStoreICTrampolineTF(language_mode); | 1828 assembler.GenerateKeyedStoreICTrampolineTF(language_mode); |
| 1831 } | 1829 } |
| 1832 | 1830 |
| 1833 #undef ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE | 1831 #undef ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE |
| 1834 | 1832 |
| 1835 } // namespace internal | 1833 } // namespace internal |
| 1836 } // namespace v8 | 1834 } // namespace v8 |
| OLD | NEW |