Chromium Code Reviews| 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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 107 Node* ParameterToTagged(Node* value, ParameterMode mode) { | 107 Node* ParameterToTagged(Node* value, ParameterMode mode) { |
| 108 if (mode != SMI_PARAMETERS) value = SmiTag(value); | 108 if (mode != SMI_PARAMETERS) value = SmiTag(value); |
| 109 return value; | 109 return value; |
| 110 } | 110 } |
| 111 | 111 |
| 112 Node* TaggedToParameter(Node* value, ParameterMode mode) { | 112 Node* TaggedToParameter(Node* value, ParameterMode mode) { |
| 113 if (mode != SMI_PARAMETERS) value = SmiUntag(value); | 113 if (mode != SMI_PARAMETERS) value = SmiUntag(value); |
| 114 return value; | 114 return value; |
| 115 } | 115 } |
| 116 | 116 |
| 117 Node* IsParameterMode(Node* value, ParameterMode mode); | |
|
Camillo Bruni
2017/04/28 15:57:44
A bit a confusing name, how about: IsParameterMode
jgruber
2017/05/03 11:11:50
Agreed, changed to MatchesParameterMode.
| |
| 118 | |
| 117 #define PARAMETER_BINOP(OpName, IntPtrOpName, SmiOpName) \ | 119 #define PARAMETER_BINOP(OpName, IntPtrOpName, SmiOpName) \ |
| 118 Node* OpName(Node* a, Node* b, ParameterMode mode) { \ | 120 Node* OpName(Node* a, Node* b, ParameterMode mode) { \ |
| 119 if (mode == SMI_PARAMETERS) { \ | 121 if (mode == SMI_PARAMETERS) { \ |
| 120 return SmiOpName(a, b); \ | 122 return SmiOpName(a, b); \ |
| 121 } else { \ | 123 } else { \ |
| 122 DCHECK_EQ(INTPTR_PARAMETERS, mode); \ | 124 DCHECK_EQ(INTPTR_PARAMETERS, mode); \ |
| 123 return IntPtrOpName(a, b); \ | 125 return IntPtrOpName(a, b); \ |
| 124 } \ | 126 } \ |
| 125 } | 127 } |
| 126 PARAMETER_BINOP(IntPtrOrSmiMin, IntPtrMin, SmiMin) | 128 PARAMETER_BINOP(IntPtrOrSmiMin, IntPtrMin, SmiMin) |
| (...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 754 Node* IsHeapNumber(Node* object); | 756 Node* IsHeapNumber(Node* object); |
| 755 Node* IsName(Node* object); | 757 Node* IsName(Node* object); |
| 756 Node* IsSymbol(Node* object); | 758 Node* IsSymbol(Node* object); |
| 757 Node* IsPrivateSymbol(Node* object); | 759 Node* IsPrivateSymbol(Node* object); |
| 758 Node* IsJSValueInstanceType(Node* instance_type); | 760 Node* IsJSValueInstanceType(Node* instance_type); |
| 759 Node* IsJSValue(Node* object); | 761 Node* IsJSValue(Node* object); |
| 760 Node* IsJSValueMap(Node* map); | 762 Node* IsJSValueMap(Node* map); |
| 761 Node* IsJSArrayInstanceType(Node* instance_type); | 763 Node* IsJSArrayInstanceType(Node* instance_type); |
| 762 Node* IsJSArray(Node* object); | 764 Node* IsJSArray(Node* object); |
| 763 Node* IsJSArrayMap(Node* object); | 765 Node* IsJSArrayMap(Node* object); |
| 766 Node* IsFixedArray(Node* object); | |
| 764 Node* IsNativeContext(Node* object); | 767 Node* IsNativeContext(Node* object); |
| 765 Node* IsWeakCell(Node* object); | 768 Node* IsWeakCell(Node* object); |
| 766 Node* IsFixedDoubleArray(Node* object); | 769 Node* IsFixedDoubleArray(Node* object); |
| 767 Node* IsHashTable(Node* object); | 770 Node* IsHashTable(Node* object); |
| 768 Node* IsDictionary(Node* object); | 771 Node* IsDictionary(Node* object); |
| 769 Node* IsUnseededNumberDictionary(Node* object); | 772 Node* IsUnseededNumberDictionary(Node* object); |
| 770 Node* IsConstructorMap(Node* map); | 773 Node* IsConstructorMap(Node* map); |
| 771 Node* IsJSFunctionInstanceType(Node* instance_type); | 774 Node* IsJSFunctionInstanceType(Node* instance_type); |
| 772 Node* IsJSFunction(Node* object); | 775 Node* IsJSFunction(Node* object); |
| 773 Node* IsJSFunctionMap(Node* object); | 776 Node* IsJSFunctionMap(Node* object); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 796 // Return the single character string with only {code}. | 799 // Return the single character string with only {code}. |
| 797 Node* StringFromCharCode(Node* code); | 800 Node* StringFromCharCode(Node* code); |
| 798 // Return a new string object which holds a substring containing the range | 801 // Return a new string object which holds a substring containing the range |
| 799 // [from,to[ of string. |from| and |to| are expected to be tagged. | 802 // [from,to[ of string. |from| and |to| are expected to be tagged. |
| 800 Node* SubString(Node* context, Node* string, Node* from, Node* to); | 803 Node* SubString(Node* context, Node* string, Node* from, Node* to); |
| 801 | 804 |
| 802 // Return a new string object produced by concatenating |first| with |second|. | 805 // Return a new string object produced by concatenating |first| with |second|. |
| 803 Node* StringAdd(Node* context, Node* first, Node* second, | 806 Node* StringAdd(Node* context, Node* first, Node* second, |
| 804 AllocationFlags flags = kNone); | 807 AllocationFlags flags = kNone); |
| 805 | 808 |
| 806 // Unpack the external string, returning a pointer that (offset-wise) looks | |
| 807 // like a sequential string. | |
| 808 // Note that this pointer is not tagged and does not point to a real | |
| 809 // sequential string instance, and may only be used to access the string | |
| 810 // data. The pointer is GC-safe as long as a reference to the container | |
| 811 // ExternalString is live. | |
| 812 // |string| must be an external string. Bailout for short external strings. | |
| 813 Node* TryDerefExternalString(Node* const string, Node* const instance_type, | |
| 814 Label* if_bailout); | |
| 815 | |
| 816 // Check if |var_string| has an indirect (thin or flat cons) string type, | 809 // Check if |var_string| has an indirect (thin or flat cons) string type, |
| 817 // and unpack it if so. | 810 // and unpack it if so. |
| 818 void MaybeDerefIndirectString(Variable* var_string, Node* instance_type, | 811 void MaybeDerefIndirectString(Variable* var_string, Node* instance_type, |
| 819 Variable* var_did_something); | 812 Variable* var_did_something); |
| 820 // Check if |var_left| or |var_right| has an indirect (thin or flat cons) | 813 // Check if |var_left| or |var_right| has an indirect (thin or flat cons) |
| 821 // string type, and unpack it/them if so. Fall through if nothing was done. | 814 // string type, and unpack it/them if so. Fall through if nothing was done. |
| 822 void MaybeDerefIndirectStrings(Variable* var_left, Node* left_instance_type, | 815 void MaybeDerefIndirectStrings(Variable* var_left, Node* left_instance_type, |
| 823 Variable* var_right, Node* right_instance_type, | 816 Variable* var_right, Node* right_instance_type, |
| 824 Label* did_something); | 817 Label* did_something); |
| 825 | 818 |
| (...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1546 | 1539 |
| 1547 private: | 1540 private: |
| 1548 Node* TryToSequential(StringPointerKind ptr_kind, Label* if_bailout); | 1541 Node* TryToSequential(StringPointerKind ptr_kind, Label* if_bailout); |
| 1549 | 1542 |
| 1550 Variable var_string_; | 1543 Variable var_string_; |
| 1551 Variable var_instance_type_; | 1544 Variable var_instance_type_; |
| 1552 Variable var_offset_; | 1545 Variable var_offset_; |
| 1553 Variable var_is_external_; | 1546 Variable var_is_external_; |
| 1554 }; | 1547 }; |
| 1555 | 1548 |
| 1556 #ifdef DEBUG | 1549 #if defined(DEBUG) || defined(ENABLE_SLOW_DCHECKS) |
| 1557 #define CSA_ASSERT(csa, x) \ | 1550 #define CSA_ASSERT(csa, x) \ |
| 1558 (csa)->Assert([&] { return (x); }, #x, __FILE__, __LINE__) | 1551 (csa)->Assert([&] { return (x); }, #x, __FILE__, __LINE__) |
| 1559 #define CSA_ASSERT_JS_ARGC_OP(csa, Op, op, expected) \ | 1552 #define CSA_ASSERT_JS_ARGC_OP(csa, Op, op, expected) \ |
| 1560 (csa)->Assert( \ | 1553 (csa)->Assert( \ |
| 1561 [&] { \ | 1554 [&] { \ |
| 1562 compiler::Node* const argc = \ | 1555 compiler::Node* const argc = \ |
| 1563 (csa)->Parameter(Descriptor::kActualArgumentsCount); \ | 1556 (csa)->Parameter(Descriptor::kActualArgumentsCount); \ |
| 1564 return (csa)->Op(argc, (csa)->Int32Constant(expected)); \ | 1557 return (csa)->Op(argc, (csa)->Int32Constant(expected)); \ |
| 1565 }, \ | 1558 }, \ |
| 1566 "argc " #op " " #expected, __FILE__, __LINE__) | 1559 "argc " #op " " #expected, __FILE__, __LINE__) |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 1586 } | 1579 } |
| 1587 #else | 1580 #else |
| 1588 #define CSA_SLOW_ASSERT(csa, x) ((void)0) | 1581 #define CSA_SLOW_ASSERT(csa, x) ((void)0) |
| 1589 #endif | 1582 #endif |
| 1590 | 1583 |
| 1591 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); | 1584 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); |
| 1592 | 1585 |
| 1593 } // namespace internal | 1586 } // namespace internal |
| 1594 } // namespace v8 | 1587 } // namespace v8 |
| 1595 #endif // V8_CODE_STUB_ASSEMBLER_H_ | 1588 #endif // V8_CODE_STUB_ASSEMBLER_H_ |
| OLD | NEW |