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 #ifndef V8_CODE_STUB_ASSEMBLER_H_ | 5 #ifndef V8_CODE_STUB_ASSEMBLER_H_ |
6 #define V8_CODE_STUB_ASSEMBLER_H_ | 6 #define V8_CODE_STUB_ASSEMBLER_H_ |
7 | 7 |
8 #include <functional> | 8 #include <functional> |
9 | 9 |
10 #include "src/compiler/code-assembler.h" | 10 #include "src/compiler/code-assembler.h" |
(...skipping 982 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 (ContainerType::kEntryValueIndex - ContainerType::kEntryKeyIndex) * | 993 (ContainerType::kEntryValueIndex - ContainerType::kEntryKeyIndex) * |
994 kPointerSize; | 994 kPointerSize; |
995 StoreFixedArrayElement(container, key_index, value, UPDATE_WRITE_BARRIER, | 995 StoreFixedArrayElement(container, key_index, value, UPDATE_WRITE_BARRIER, |
996 kKeyToValueOffset); | 996 kKeyToValueOffset); |
997 } | 997 } |
998 | 998 |
999 // Calculate a valid size for the a hash table. | 999 // Calculate a valid size for the a hash table. |
1000 Node* HashTableComputeCapacity(Node* at_least_space_for); | 1000 Node* HashTableComputeCapacity(Node* at_least_space_for); |
1001 | 1001 |
1002 template <class Dictionary> | 1002 template <class Dictionary> |
1003 Node* GetNumberOfElements(Node* dictionary); | 1003 Node* GetNumberOfElements(Node* dictionary) { |
| 1004 return LoadFixedArrayElement(dictionary, |
| 1005 Dictionary::kNumberOfElementsIndex); |
| 1006 } |
1004 | 1007 |
1005 template <class Dictionary> | 1008 template <class Dictionary> |
1006 void SetNumberOfElements(Node* dictionary, Node* num_elements_smi); | 1009 void SetNumberOfElements(Node* dictionary, Node* num_elements_smi) { |
| 1010 StoreFixedArrayElement(dictionary, Dictionary::kNumberOfElementsIndex, |
| 1011 num_elements_smi, SKIP_WRITE_BARRIER); |
| 1012 } |
1007 | 1013 |
1008 template <class Dictionary> | 1014 template <class Dictionary> |
1009 Node* GetNumberOfDeletedElements(Node* dictionary); | 1015 Node* GetNumberOfDeletedElements(Node* dictionary) { |
| 1016 return LoadFixedArrayElement(dictionary, |
| 1017 Dictionary::kNumberOfDeletedElementsIndex); |
| 1018 } |
1010 | 1019 |
1011 template <class Dictionary> | 1020 template <class Dictionary> |
1012 Node* GetCapacity(Node* dictionary); | 1021 void SetNumberOfDeletedElements(Node* dictionary, Node* num_deleted_smi) { |
| 1022 StoreFixedArrayElement(dictionary, |
| 1023 Dictionary::kNumberOfDeletedElementsIndex, |
| 1024 num_deleted_smi, SKIP_WRITE_BARRIER); |
| 1025 } |
| 1026 |
| 1027 template <class Dictionary> |
| 1028 Node* GetCapacity(Node* dictionary) { |
| 1029 return LoadFixedArrayElement(dictionary, Dictionary::kCapacityIndex); |
| 1030 } |
1013 | 1031 |
1014 template <class Dictionary> | 1032 template <class Dictionary> |
1015 Node* GetNextEnumerationIndex(Node* dictionary); | 1033 Node* GetNextEnumerationIndex(Node* dictionary); |
1016 | 1034 |
1017 template <class Dictionary> | 1035 template <class Dictionary> |
1018 void SetNextEnumerationIndex(Node* dictionary, Node* next_enum_index_smi); | 1036 void SetNextEnumerationIndex(Node* dictionary, Node* next_enum_index_smi); |
1019 | 1037 |
1020 // Looks up an entry in a NameDictionaryBase successor. If the entry is found | 1038 // Looks up an entry in a NameDictionaryBase successor. If the entry is found |
1021 // control goes to {if_found} and {var_name_index} contains an index of the | 1039 // control goes to {if_found} and {var_name_index} contains an index of the |
1022 // key field of the entry found. If the key is not found control goes to | 1040 // key field of the entry found. If the key is not found control goes to |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1338 protected: | 1356 protected: |
1339 void DescriptorLookup(Node* unique_name, Node* descriptors, Node* bitfield3, | 1357 void DescriptorLookup(Node* unique_name, Node* descriptors, Node* bitfield3, |
1340 Label* if_found, Variable* var_name_index, | 1358 Label* if_found, Variable* var_name_index, |
1341 Label* if_not_found); | 1359 Label* if_not_found); |
1342 void DescriptorLookupLinear(Node* unique_name, Node* descriptors, Node* nof, | 1360 void DescriptorLookupLinear(Node* unique_name, Node* descriptors, Node* nof, |
1343 Label* if_found, Variable* var_name_index, | 1361 Label* if_found, Variable* var_name_index, |
1344 Label* if_not_found); | 1362 Label* if_not_found); |
1345 void DescriptorLookupBinary(Node* unique_name, Node* descriptors, Node* nof, | 1363 void DescriptorLookupBinary(Node* unique_name, Node* descriptors, Node* nof, |
1346 Label* if_found, Variable* var_name_index, | 1364 Label* if_found, Variable* var_name_index, |
1347 Label* if_not_found); | 1365 Label* if_not_found); |
| 1366 // Implements DescriptorArray::ToKeyIndex. |
| 1367 // Returns an untagged IntPtr. |
| 1368 Node* DescriptorArrayToKeyIndex(Node* descriptor_number); |
1348 | 1369 |
1349 Node* CallGetterIfAccessor(Node* value, Node* details, Node* context, | 1370 Node* CallGetterIfAccessor(Node* value, Node* details, Node* context, |
1350 Node* receiver, Label* if_bailout); | 1371 Node* receiver, Label* if_bailout); |
1351 | 1372 |
1352 Node* TryToIntptr(Node* key, Label* miss); | 1373 Node* TryToIntptr(Node* key, Label* miss); |
1353 | 1374 |
1354 void BranchIfPrototypesHaveNoElements(Node* receiver_map, | 1375 void BranchIfPrototypesHaveNoElements(Node* receiver_map, |
1355 Label* definitely_no_elements, | 1376 Label* definitely_no_elements, |
1356 Label* possibly_elements); | 1377 Label* possibly_elements); |
1357 | 1378 |
(...skipping 23 matching lines...) Expand all Loading... |
1381 | 1402 |
1382 Node* AllocateSlicedString(Heap::RootListIndex map_root_index, Node* length, | 1403 Node* AllocateSlicedString(Heap::RootListIndex map_root_index, Node* length, |
1383 Node* parent, Node* offset); | 1404 Node* parent, Node* offset); |
1384 | 1405 |
1385 Node* AllocateConsString(Heap::RootListIndex map_root_index, Node* length, | 1406 Node* AllocateConsString(Heap::RootListIndex map_root_index, Node* length, |
1386 Node* first, Node* second, AllocationFlags flags); | 1407 Node* first, Node* second, AllocationFlags flags); |
1387 | 1408 |
1388 // Implements DescriptorArray::number_of_entries. | 1409 // Implements DescriptorArray::number_of_entries. |
1389 // Returns an untagged int32. | 1410 // Returns an untagged int32. |
1390 Node* DescriptorArrayNumberOfEntries(Node* descriptors); | 1411 Node* DescriptorArrayNumberOfEntries(Node* descriptors); |
1391 // Implements DescriptorArray::ToKeyIndex. | |
1392 // Returns an untagged IntPtr. | |
1393 Node* DescriptorArrayToKeyIndex(Node* descriptor_number); | |
1394 // Implements DescriptorArray::GetSortedKeyIndex. | 1412 // Implements DescriptorArray::GetSortedKeyIndex. |
1395 // Returns an untagged int32. | 1413 // Returns an untagged int32. |
1396 Node* DescriptorArrayGetSortedKeyIndex(Node* descriptors, | 1414 Node* DescriptorArrayGetSortedKeyIndex(Node* descriptors, |
1397 Node* descriptor_number); | 1415 Node* descriptor_number); |
1398 // Implements DescriptorArray::GetKey. | 1416 // Implements DescriptorArray::GetKey. |
1399 Node* DescriptorArrayGetKey(Node* descriptors, Node* descriptor_number); | 1417 Node* DescriptorArrayGetKey(Node* descriptors, Node* descriptor_number); |
1400 | 1418 |
1401 static const int kElementLoopUnrollThreshold = 8; | 1419 static const int kElementLoopUnrollThreshold = 8; |
1402 }; | 1420 }; |
1403 | 1421 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1523 } | 1541 } |
1524 #else | 1542 #else |
1525 #define CSA_SLOW_ASSERT(csa, x) ((void)0) | 1543 #define CSA_SLOW_ASSERT(csa, x) ((void)0) |
1526 #endif | 1544 #endif |
1527 | 1545 |
1528 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); | 1546 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); |
1529 | 1547 |
1530 } // namespace internal | 1548 } // namespace internal |
1531 } // namespace v8 | 1549 } // namespace v8 |
1532 #endif // V8_CODE_STUB_ASSEMBLER_H_ | 1550 #endif // V8_CODE_STUB_ASSEMBLER_H_ |
OLD | NEW |