Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1220)

Side by Side Diff: src/code-stub-assembler.h

Issue 2504403005: [stubs] KeyedStoreGeneric: inline dictionary property stores (Closed)
Patch Set: addressed comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 compiler::Node* object, compiler::Node* offset, compiler::Node* value, 350 compiler::Node* object, compiler::Node* offset, compiler::Node* value,
351 MachineRepresentation rep = MachineRepresentation::kTagged); 351 MachineRepresentation rep = MachineRepresentation::kTagged);
352 // Store the Map of an HeapObject. 352 // Store the Map of an HeapObject.
353 compiler::Node* StoreMapNoWriteBarrier(compiler::Node* object, 353 compiler::Node* StoreMapNoWriteBarrier(compiler::Node* object,
354 compiler::Node* map); 354 compiler::Node* map);
355 compiler::Node* StoreObjectFieldRoot(compiler::Node* object, int offset, 355 compiler::Node* StoreObjectFieldRoot(compiler::Node* object, int offset,
356 Heap::RootListIndex root); 356 Heap::RootListIndex root);
357 // Store an array element to a FixedArray. 357 // Store an array element to a FixedArray.
358 compiler::Node* StoreFixedArrayElement( 358 compiler::Node* StoreFixedArrayElement(
359 compiler::Node* object, int index, compiler::Node* value, 359 compiler::Node* object, int index, compiler::Node* value,
360 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER, 360 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER) {
361 ParameterMode parameter_mode = INTEGER_PARAMETERS) { 361 return StoreFixedArrayElement(object, IntPtrConstant(index), value,
362 return StoreFixedArrayElement(object, Int32Constant(index), value, 362 barrier_mode, 0, INTPTR_PARAMETERS);
363 barrier_mode, parameter_mode);
364 } 363 }
365 364
366 compiler::Node* StoreFixedArrayElement( 365 compiler::Node* StoreFixedArrayElement(
367 compiler::Node* object, compiler::Node* index, compiler::Node* value, 366 compiler::Node* object, compiler::Node* index, compiler::Node* value,
368 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER, 367 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER,
368 int additional_offset = 0,
369 ParameterMode parameter_mode = INTEGER_PARAMETERS); 369 ParameterMode parameter_mode = INTEGER_PARAMETERS);
370 370
371 compiler::Node* StoreFixedDoubleArrayElement( 371 compiler::Node* StoreFixedDoubleArrayElement(
372 compiler::Node* object, compiler::Node* index, compiler::Node* value, 372 compiler::Node* object, compiler::Node* index, compiler::Node* value,
373 ParameterMode parameter_mode = INTEGER_PARAMETERS); 373 ParameterMode parameter_mode = INTEGER_PARAMETERS);
374 374
375 void StoreFieldsNoWriteBarrier(compiler::Node* start_address, 375 void StoreFieldsNoWriteBarrier(compiler::Node* start_address,
376 compiler::Node* end_address, 376 compiler::Node* end_address,
377 compiler::Node* value); 377 compiler::Node* value);
378 378
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 // See Dictionary::EntryToIndex(). 755 // See Dictionary::EntryToIndex().
756 template <typename Dictionary> 756 template <typename Dictionary>
757 compiler::Node* EntryToIndex(compiler::Node* entry, int field_index); 757 compiler::Node* EntryToIndex(compiler::Node* entry, int field_index);
758 template <typename Dictionary> 758 template <typename Dictionary>
759 compiler::Node* EntryToIndex(compiler::Node* entry) { 759 compiler::Node* EntryToIndex(compiler::Node* entry) {
760 return EntryToIndex<Dictionary>(entry, Dictionary::kEntryKeyIndex); 760 return EntryToIndex<Dictionary>(entry, Dictionary::kEntryKeyIndex);
761 } 761 }
762 // Calculate a valid size for the a hash table. 762 // Calculate a valid size for the a hash table.
763 compiler::Node* HashTableComputeCapacity(compiler::Node* at_least_space_for); 763 compiler::Node* HashTableComputeCapacity(compiler::Node* at_least_space_for);
764 764
765 template <class Dictionary>
766 compiler::Node* GetNumberOfElements(compiler::Node* dictionary);
767
768 template <class Dictionary>
769 void SetNumberOfElements(compiler::Node* dictionary,
770 compiler::Node* num_elements_smi);
771
772 template <class Dictionary>
773 compiler::Node* GetCapacity(compiler::Node* dictionary);
774
775 template <class Dictionary>
776 compiler::Node* GetNextEnumerationIndex(compiler::Node* dictionary);
777
778 template <class Dictionary>
779 void SetNextEnumerationIndex(compiler::Node* dictionary,
780 compiler::Node* next_enum_index_smi);
781
765 // Looks up an entry in a NameDictionaryBase successor. If the entry is found 782 // Looks up an entry in a NameDictionaryBase successor. If the entry is found
766 // control goes to {if_found} and {var_name_index} contains an index of the 783 // control goes to {if_found} and {var_name_index} contains an index of the
767 // key field of the entry found. If the key is not found control goes to 784 // key field of the entry found. If the key is not found control goes to
768 // {if_not_found}. 785 // {if_not_found}.
769 static const int kInlinedDictionaryProbes = 4; 786 static const int kInlinedDictionaryProbes = 4;
787 enum LookupMode { kFindExisting, kFindInsertionIndex };
770 template <typename Dictionary> 788 template <typename Dictionary>
771 void NameDictionaryLookup(compiler::Node* dictionary, 789 void NameDictionaryLookup(compiler::Node* dictionary,
772 compiler::Node* unique_name, Label* if_found, 790 compiler::Node* unique_name, Label* if_found,
773 Variable* var_name_index, Label* if_not_found, 791 Variable* var_name_index, Label* if_not_found,
774 int inlined_probes = kInlinedDictionaryProbes); 792 int inlined_probes = kInlinedDictionaryProbes,
793 LookupMode mode = kFindExisting);
775 794
776 compiler::Node* ComputeIntegerHash(compiler::Node* key, compiler::Node* seed); 795 compiler::Node* ComputeIntegerHash(compiler::Node* key, compiler::Node* seed);
777 796
778 template <typename Dictionary> 797 template <typename Dictionary>
779 void NumberDictionaryLookup(compiler::Node* dictionary, 798 void NumberDictionaryLookup(compiler::Node* dictionary,
780 compiler::Node* intptr_index, Label* if_found, 799 compiler::Node* intptr_index, Label* if_found,
781 Variable* var_entry, Label* if_not_found); 800 Variable* var_entry, Label* if_not_found);
782 801
802 template <class Dictionary>
803 void FindInsertionEntry(compiler::Node* dictionary, compiler::Node* key,
804 Variable* var_key_index);
805
806 template <class Dictionary>
807 void InsertEntry(compiler::Node* dictionary, compiler::Node* key,
808 compiler::Node* value, compiler::Node* index,
809 compiler::Node* enum_index);
810
811 template <class Dictionary>
812 void Add(compiler::Node* dictionary, compiler::Node* key,
813 compiler::Node* value, Label* bailout);
814
783 // Tries to check if {object} has own {unique_name} property. 815 // Tries to check if {object} has own {unique_name} property.
784 void TryHasOwnProperty(compiler::Node* object, compiler::Node* map, 816 void TryHasOwnProperty(compiler::Node* object, compiler::Node* map,
785 compiler::Node* instance_type, 817 compiler::Node* instance_type,
786 compiler::Node* unique_name, Label* if_found, 818 compiler::Node* unique_name, Label* if_found,
787 Label* if_not_found, Label* if_bailout); 819 Label* if_not_found, Label* if_bailout);
788 820
789 // Tries to get {object}'s own {unique_name} property value. If the property 821 // Tries to get {object}'s own {unique_name} property value. If the property
790 // is an accessor then it also calls a getter. If the property is a double 822 // is an accessor then it also calls a getter. If the property is a double
791 // field it re-wraps value in an immutable heap number. 823 // field it re-wraps value in an immutable heap number.
792 void TryGetOwnProperty(compiler::Node* context, compiler::Node* receiver, 824 void TryGetOwnProperty(compiler::Node* context, compiler::Node* receiver,
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
1175 } 1207 }
1176 #else 1208 #else
1177 #define CSA_SLOW_ASSERT(csa, x) ((void)0) 1209 #define CSA_SLOW_ASSERT(csa, x) ((void)0)
1178 #endif 1210 #endif
1179 1211
1180 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); 1212 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags);
1181 1213
1182 } // namespace internal 1214 } // namespace internal
1183 } // namespace v8 1215 } // namespace v8
1184 #endif // V8_CODE_STUB_ASSEMBLER_H_ 1216 #endif // V8_CODE_STUB_ASSEMBLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698