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

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

Issue 2528583002: Revert of [stubs] KeyedStoreGeneric: inline dictionary property stores (Closed)
Patch Set: Created 4 years 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
« no previous file with comments | « src/builtins/builtins-regexp.cc ('k') | src/code-stub-assembler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
11 #include "src/globals.h" 11 #include "src/globals.h"
12 #include "src/objects.h" 12 #include "src/objects.h"
13 13
14 namespace v8 { 14 namespace v8 {
15 namespace internal { 15 namespace internal {
16 16
17 class CallInterfaceDescriptor; 17 class CallInterfaceDescriptor;
18 class StatsCounter; 18 class StatsCounter;
19 class StubCache; 19 class StubCache;
20 20
21 enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol }; 21 enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol };
22 22
23 #define HEAP_CONSTANT_LIST(V) \ 23 #define HEAP_CONSTANT_LIST(V) \
24 V(AccessorPairMap, AccessorPairMap) \ 24 V(BooleanMap, BooleanMap) \
25 V(BooleanMap, BooleanMap) \ 25 V(CodeMap, CodeMap) \
26 V(CodeMap, CodeMap) \ 26 V(empty_string, EmptyString) \
27 V(empty_string, EmptyString) \ 27 V(EmptyFixedArray, EmptyFixedArray) \
28 V(EmptyFixedArray, EmptyFixedArray) \ 28 V(FalseValue, False) \
29 V(FalseValue, False) \ 29 V(FixedArrayMap, FixedArrayMap) \
30 V(FixedArrayMap, FixedArrayMap) \ 30 V(FixedCOWArrayMap, FixedCOWArrayMap) \
31 V(FixedCOWArrayMap, FixedCOWArrayMap) \ 31 V(FixedDoubleArrayMap, FixedDoubleArrayMap) \
32 V(FixedDoubleArrayMap, FixedDoubleArrayMap) \ 32 V(HeapNumberMap, HeapNumberMap) \
33 V(FunctionTemplateInfoMap, FunctionTemplateInfoMap) \ 33 V(MinusZeroValue, MinusZero) \
34 V(HeapNumberMap, HeapNumberMap) \ 34 V(NanValue, Nan) \
35 V(MinusZeroValue, MinusZero) \ 35 V(NullValue, Null) \
36 V(NanValue, Nan) \ 36 V(TheHoleValue, TheHole) \
37 V(NullValue, Null) \ 37 V(TrueValue, True) \
38 V(TheHoleValue, TheHole) \
39 V(TrueValue, True) \
40 V(UndefinedValue, Undefined) 38 V(UndefinedValue, Undefined)
41 39
42 // Provides JavaScript-specific "macro-assembler" functionality on top of the 40 // Provides JavaScript-specific "macro-assembler" functionality on top of the
43 // CodeAssembler. By factoring the JavaScript-isms out of the CodeAssembler, 41 // CodeAssembler. By factoring the JavaScript-isms out of the CodeAssembler,
44 // it's possible to add JavaScript-specific useful CodeAssembler "macros" 42 // it's possible to add JavaScript-specific useful CodeAssembler "macros"
45 // without modifying files in the compiler directory (and requiring a review 43 // without modifying files in the compiler directory (and requiring a review
46 // from a compiler directory OWNER). 44 // from a compiler directory OWNER).
47 class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler { 45 class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
48 public: 46 public:
49 CodeStubAssembler(compiler::CodeAssemblerState* state) 47 CodeStubAssembler(compiler::CodeAssemblerState* state)
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 compiler::Node* object, compiler::Node* offset, compiler::Node* value, 350 compiler::Node* object, compiler::Node* offset, compiler::Node* value,
353 MachineRepresentation rep = MachineRepresentation::kTagged); 351 MachineRepresentation rep = MachineRepresentation::kTagged);
354 // Store the Map of an HeapObject. 352 // Store the Map of an HeapObject.
355 compiler::Node* StoreMapNoWriteBarrier(compiler::Node* object, 353 compiler::Node* StoreMapNoWriteBarrier(compiler::Node* object,
356 compiler::Node* map); 354 compiler::Node* map);
357 compiler::Node* StoreObjectFieldRoot(compiler::Node* object, int offset, 355 compiler::Node* StoreObjectFieldRoot(compiler::Node* object, int offset,
358 Heap::RootListIndex root); 356 Heap::RootListIndex root);
359 // Store an array element to a FixedArray. 357 // Store an array element to a FixedArray.
360 compiler::Node* StoreFixedArrayElement( 358 compiler::Node* StoreFixedArrayElement(
361 compiler::Node* object, int index, compiler::Node* value, 359 compiler::Node* object, int index, compiler::Node* value,
362 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER) { 360 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER,
363 return StoreFixedArrayElement(object, IntPtrConstant(index), value, 361 ParameterMode parameter_mode = INTEGER_PARAMETERS) {
364 barrier_mode, 0, INTPTR_PARAMETERS); 362 return StoreFixedArrayElement(object, Int32Constant(index), value,
363 barrier_mode, parameter_mode);
365 } 364 }
366 365
367 compiler::Node* StoreFixedArrayElement( 366 compiler::Node* StoreFixedArrayElement(
368 compiler::Node* object, compiler::Node* index, compiler::Node* value, 367 compiler::Node* object, compiler::Node* index, compiler::Node* value,
369 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER, 368 WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER,
370 int additional_offset = 0,
371 ParameterMode parameter_mode = INTEGER_PARAMETERS); 369 ParameterMode parameter_mode = INTEGER_PARAMETERS);
372 370
373 compiler::Node* StoreFixedDoubleArrayElement( 371 compiler::Node* StoreFixedDoubleArrayElement(
374 compiler::Node* object, compiler::Node* index, compiler::Node* value, 372 compiler::Node* object, compiler::Node* index, compiler::Node* value,
375 ParameterMode parameter_mode = INTEGER_PARAMETERS); 373 ParameterMode parameter_mode = INTEGER_PARAMETERS);
376 374
377 void StoreFieldsNoWriteBarrier(compiler::Node* start_address, 375 void StoreFieldsNoWriteBarrier(compiler::Node* start_address,
378 compiler::Node* end_address, 376 compiler::Node* end_address,
379 compiler::Node* value); 377 compiler::Node* value);
380 378
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
757 // See Dictionary::EntryToIndex(). 755 // See Dictionary::EntryToIndex().
758 template <typename Dictionary> 756 template <typename Dictionary>
759 compiler::Node* EntryToIndex(compiler::Node* entry, int field_index); 757 compiler::Node* EntryToIndex(compiler::Node* entry, int field_index);
760 template <typename Dictionary> 758 template <typename Dictionary>
761 compiler::Node* EntryToIndex(compiler::Node* entry) { 759 compiler::Node* EntryToIndex(compiler::Node* entry) {
762 return EntryToIndex<Dictionary>(entry, Dictionary::kEntryKeyIndex); 760 return EntryToIndex<Dictionary>(entry, Dictionary::kEntryKeyIndex);
763 } 761 }
764 // Calculate a valid size for the a hash table. 762 // Calculate a valid size for the a hash table.
765 compiler::Node* HashTableComputeCapacity(compiler::Node* at_least_space_for); 763 compiler::Node* HashTableComputeCapacity(compiler::Node* at_least_space_for);
766 764
767 template <class Dictionary>
768 compiler::Node* GetNumberOfElements(compiler::Node* dictionary);
769
770 template <class Dictionary>
771 void SetNumberOfElements(compiler::Node* dictionary,
772 compiler::Node* num_elements_smi);
773
774 template <class Dictionary>
775 compiler::Node* GetCapacity(compiler::Node* dictionary);
776
777 template <class Dictionary>
778 compiler::Node* GetNextEnumerationIndex(compiler::Node* dictionary);
779
780 template <class Dictionary>
781 void SetNextEnumerationIndex(compiler::Node* dictionary,
782 compiler::Node* next_enum_index_smi);
783
784 // Looks up an entry in a NameDictionaryBase successor. If the entry is found 765 // Looks up an entry in a NameDictionaryBase successor. If the entry is found
785 // control goes to {if_found} and {var_name_index} contains an index of the 766 // control goes to {if_found} and {var_name_index} contains an index of the
786 // key field of the entry found. If the key is not found control goes to 767 // key field of the entry found. If the key is not found control goes to
787 // {if_not_found}. 768 // {if_not_found}.
788 static const int kInlinedDictionaryProbes = 4; 769 static const int kInlinedDictionaryProbes = 4;
789 enum LookupMode { kFindExisting, kFindInsertionIndex };
790 template <typename Dictionary> 770 template <typename Dictionary>
791 void NameDictionaryLookup(compiler::Node* dictionary, 771 void NameDictionaryLookup(compiler::Node* dictionary,
792 compiler::Node* unique_name, Label* if_found, 772 compiler::Node* unique_name, Label* if_found,
793 Variable* var_name_index, Label* if_not_found, 773 Variable* var_name_index, Label* if_not_found,
794 int inlined_probes = kInlinedDictionaryProbes, 774 int inlined_probes = kInlinedDictionaryProbes);
795 LookupMode mode = kFindExisting);
796 775
797 compiler::Node* ComputeIntegerHash(compiler::Node* key, compiler::Node* seed); 776 compiler::Node* ComputeIntegerHash(compiler::Node* key, compiler::Node* seed);
798 777
799 template <typename Dictionary> 778 template <typename Dictionary>
800 void NumberDictionaryLookup(compiler::Node* dictionary, 779 void NumberDictionaryLookup(compiler::Node* dictionary,
801 compiler::Node* intptr_index, Label* if_found, 780 compiler::Node* intptr_index, Label* if_found,
802 Variable* var_entry, Label* if_not_found); 781 Variable* var_entry, Label* if_not_found);
803 782
804 template <class Dictionary>
805 void FindInsertionEntry(compiler::Node* dictionary, compiler::Node* key,
806 Variable* var_key_index);
807
808 template <class Dictionary>
809 void InsertEntry(compiler::Node* dictionary, compiler::Node* key,
810 compiler::Node* value, compiler::Node* index,
811 compiler::Node* enum_index);
812
813 template <class Dictionary>
814 void Add(compiler::Node* dictionary, compiler::Node* key,
815 compiler::Node* value, Label* bailout);
816
817 // Tries to check if {object} has own {unique_name} property. 783 // Tries to check if {object} has own {unique_name} property.
818 void TryHasOwnProperty(compiler::Node* object, compiler::Node* map, 784 void TryHasOwnProperty(compiler::Node* object, compiler::Node* map,
819 compiler::Node* instance_type, 785 compiler::Node* instance_type,
820 compiler::Node* unique_name, Label* if_found, 786 compiler::Node* unique_name, Label* if_found,
821 Label* if_not_found, Label* if_bailout); 787 Label* if_not_found, Label* if_bailout);
822 788
823 // Tries to get {object}'s own {unique_name} property value. If the property 789 // Tries to get {object}'s own {unique_name} property value. If the property
824 // is an accessor then it also calls a getter. If the property is a double 790 // is an accessor then it also calls a getter. If the property is a double
825 // field it re-wraps value in an immutable heap number. 791 // field it re-wraps value in an immutable heap number.
826 void TryGetOwnProperty(compiler::Node* context, compiler::Node* receiver, 792 void TryGetOwnProperty(compiler::Node* context, compiler::Node* receiver,
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 } 1175 }
1210 #else 1176 #else
1211 #define CSA_SLOW_ASSERT(csa, x) ((void)0) 1177 #define CSA_SLOW_ASSERT(csa, x) ((void)0)
1212 #endif 1178 #endif
1213 1179
1214 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); 1180 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags);
1215 1181
1216 } // namespace internal 1182 } // namespace internal
1217 } // namespace v8 1183 } // namespace v8
1218 #endif // V8_CODE_STUB_ASSEMBLER_H_ 1184 #endif // V8_CODE_STUB_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « src/builtins/builtins-regexp.cc ('k') | src/code-stub-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698