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 10 matching lines...) Expand all Loading... |
21 | 21 |
22 enum class UnicodeEncoding { | 22 enum class UnicodeEncoding { |
23 // Different unicode encodings in a |word32|: | 23 // Different unicode encodings in a |word32|: |
24 UTF16, // hi 16bits -> trailing surrogate or 0, low 16bits -> lead surrogate | 24 UTF16, // hi 16bits -> trailing surrogate or 0, low 16bits -> lead surrogate |
25 UTF32, // full UTF32 code unit / Unicode codepoint | 25 UTF32, // full UTF32 code unit / Unicode codepoint |
26 }; | 26 }; |
27 | 27 |
28 #define HEAP_CONSTANT_LIST(V) \ | 28 #define HEAP_CONSTANT_LIST(V) \ |
29 V(BooleanMap, BooleanMap) \ | 29 V(BooleanMap, BooleanMap) \ |
30 V(empty_string, EmptyString) \ | 30 V(empty_string, EmptyString) \ |
| 31 V(EmptyFixedArray, EmptyFixedArray) \ |
31 V(FixedArrayMap, FixedArrayMap) \ | 32 V(FixedArrayMap, FixedArrayMap) \ |
32 V(FixedCOWArrayMap, FixedCOWArrayMap) \ | 33 V(FixedCOWArrayMap, FixedCOWArrayMap) \ |
33 V(FixedDoubleArrayMap, FixedDoubleArrayMap) \ | 34 V(FixedDoubleArrayMap, FixedDoubleArrayMap) \ |
34 V(HeapNumberMap, HeapNumberMap) \ | 35 V(HeapNumberMap, HeapNumberMap) \ |
35 V(MinusZeroValue, MinusZero) \ | 36 V(MinusZeroValue, MinusZero) \ |
36 V(NanValue, Nan) \ | 37 V(NanValue, Nan) \ |
37 V(NullValue, Null) \ | 38 V(NullValue, Null) \ |
38 V(TheHoleValue, TheHole) \ | 39 V(TheHoleValue, TheHole) \ |
39 V(UndefinedValue, Undefined) | 40 V(UndefinedValue, Undefined) |
40 | 41 |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 // |length| and |offset| are expected to be tagged. | 349 // |length| and |offset| are expected to be tagged. |
349 compiler::Node* AllocateSlicedOneByteString(compiler::Node* length, | 350 compiler::Node* AllocateSlicedOneByteString(compiler::Node* length, |
350 compiler::Node* parent, | 351 compiler::Node* parent, |
351 compiler::Node* offset); | 352 compiler::Node* offset); |
352 // Allocate a SlicedTwoByteString with the given length, parent and offset. | 353 // Allocate a SlicedTwoByteString with the given length, parent and offset. |
353 // |length| and |offset| are expected to be tagged. | 354 // |length| and |offset| are expected to be tagged. |
354 compiler::Node* AllocateSlicedTwoByteString(compiler::Node* length, | 355 compiler::Node* AllocateSlicedTwoByteString(compiler::Node* length, |
355 compiler::Node* parent, | 356 compiler::Node* parent, |
356 compiler::Node* offset); | 357 compiler::Node* offset); |
357 | 358 |
| 359 // Allocate a RegExpResult with the given length (the number of captures, |
| 360 // including the match itself), index (the index where the match starts), |
| 361 // and input string. |length| and |index| are expected to be tagged, and |
| 362 // |input| must be a string. |
| 363 compiler::Node* AllocateRegExpResult(compiler::Node* context, |
| 364 compiler::Node* length, |
| 365 compiler::Node* index, |
| 366 compiler::Node* input); |
| 367 |
358 // Allocate a JSArray without elements and initialize the header fields. | 368 // Allocate a JSArray without elements and initialize the header fields. |
359 compiler::Node* AllocateUninitializedJSArrayWithoutElements( | 369 compiler::Node* AllocateUninitializedJSArrayWithoutElements( |
360 ElementsKind kind, compiler::Node* array_map, compiler::Node* length, | 370 ElementsKind kind, compiler::Node* array_map, compiler::Node* length, |
361 compiler::Node* allocation_site); | 371 compiler::Node* allocation_site); |
362 // Allocate and return a JSArray with initialized header fields and its | 372 // Allocate and return a JSArray with initialized header fields and its |
363 // uninitialized elements. | 373 // uninitialized elements. |
364 // The ParameterMode argument is only used for the capacity parameter. | 374 // The ParameterMode argument is only used for the capacity parameter. |
365 std::pair<compiler::Node*, compiler::Node*> | 375 std::pair<compiler::Node*, compiler::Node*> |
366 AllocateUninitializedJSArrayWithElements( | 376 AllocateUninitializedJSArrayWithElements( |
367 ElementsKind kind, compiler::Node* array_map, compiler::Node* length, | 377 ElementsKind kind, compiler::Node* array_map, compiler::Node* length, |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
807 // Create a new weak cell with a specified value and install it into a | 817 // Create a new weak cell with a specified value and install it into a |
808 // feedback vector. | 818 // feedback vector. |
809 compiler::Node* CreateWeakCellInFeedbackVector( | 819 compiler::Node* CreateWeakCellInFeedbackVector( |
810 compiler::Node* feedback_vector, compiler::Node* slot, | 820 compiler::Node* feedback_vector, compiler::Node* slot, |
811 compiler::Node* value); | 821 compiler::Node* value); |
812 | 822 |
813 // Create a new AllocationSite and install it into a feedback vector. | 823 // Create a new AllocationSite and install it into a feedback vector. |
814 compiler::Node* CreateAllocationSiteInFeedbackVector( | 824 compiler::Node* CreateAllocationSiteInFeedbackVector( |
815 compiler::Node* feedback_vector, compiler::Node* slot); | 825 compiler::Node* feedback_vector, compiler::Node* slot); |
816 | 826 |
817 compiler::Node* GetFixedAarrayAllocationSize(compiler::Node* element_count, | 827 compiler::Node* GetFixedArrayAllocationSize(compiler::Node* element_count, |
818 ElementsKind kind, | 828 ElementsKind kind, |
819 ParameterMode mode) { | 829 ParameterMode mode) { |
820 return ElementOffsetFromIndex(element_count, kind, mode, | 830 return ElementOffsetFromIndex(element_count, kind, mode, |
821 FixedArray::kHeaderSize); | 831 FixedArray::kHeaderSize); |
822 } | 832 } |
823 | 833 |
824 private: | 834 private: |
825 enum ElementSupport { kOnlyProperties, kSupportElements }; | 835 enum ElementSupport { kOnlyProperties, kSupportElements }; |
826 | 836 |
827 void DescriptorLookupLinear(compiler::Node* unique_name, | 837 void DescriptorLookupLinear(compiler::Node* unique_name, |
828 compiler::Node* descriptors, compiler::Node* nof, | 838 compiler::Node* descriptors, compiler::Node* nof, |
829 Label* if_found, Variable* var_name_index, | 839 Label* if_found, Variable* var_name_index, |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
883 Label* bailout); | 893 Label* bailout); |
884 | 894 |
885 static const int kElementLoopUnrollThreshold = 8; | 895 static const int kElementLoopUnrollThreshold = 8; |
886 }; | 896 }; |
887 | 897 |
888 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); | 898 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); |
889 | 899 |
890 } // namespace internal | 900 } // namespace internal |
891 } // namespace v8 | 901 } // namespace v8 |
892 #endif // V8_CODE_STUB_ASSEMBLER_H_ | 902 #endif // V8_CODE_STUB_ASSEMBLER_H_ |
OLD | NEW |