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

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

Issue 2892023002: Revert of [csa] Add assertions to CSA (Closed)
Patch Set: Created 3 years, 7 months 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 | « no previous file | 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 CodeStubArguments; 18 class CodeStubArguments;
19 class StatsCounter; 19 class StatsCounter;
20 class StubCache; 20 class StubCache;
21 21
22 #define CSA_CHECK(csa, x) \
23 (csa)->Check([&] { return (x); }, #x, __FILE__, __LINE__)
24
25 #ifdef DEBUG
26 #define CSA_ASSERT(csa, x) \
27 (csa)->Assert([&] { return (x); }, #x, __FILE__, __LINE__)
28 #define CSA_ASSERT_JS_ARGC_OP(csa, Op, op, expected) \
29 (csa)->Assert( \
30 [&] { \
31 compiler::Node* const argc = \
32 (csa)->Parameter(Descriptor::kActualArgumentsCount); \
33 return (csa)->Op(argc, (csa)->Int32Constant(expected)); \
34 }, \
35 "argc " #op " " #expected, __FILE__, __LINE__)
36
37 #define CSA_ASSERT_JS_ARGC_EQ(csa, expected) \
38 CSA_ASSERT_JS_ARGC_OP(csa, Word32Equal, ==, expected)
39
40 #define BIND(label) Bind(label, {#label, __FILE__, __LINE__})
41 #define VARIABLE(name, ...) \
42 Variable name(this, {#name, __FILE__, __LINE__}, __VA_ARGS__);
43
44 #else // DEBUG
45 #define CSA_ASSERT(csa, x) ((void)0)
46 #define CSA_ASSERT_JS_ARGC_EQ(csa, expected) ((void)0)
47 #define BIND(label) Bind(label);
48 #define VARIABLE(name, ...) Variable name(this, __VA_ARGS__);
49 #endif // DEBUG
50
51 #ifdef ENABLE_SLOW_DCHECKS
52 #define CSA_SLOW_ASSERT(csa, x) \
53 if (FLAG_enable_slow_asserts) { \
54 CSA_ASSERT(csa, x); \
55 }
56 #else
57 #define CSA_SLOW_ASSERT(csa, x) ((void)0)
58 #endif
59
60 enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol }; 22 enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol };
61 23
62 #define HEAP_CONSTANT_LIST(V) \ 24 #define HEAP_CONSTANT_LIST(V) \
63 V(AccessorInfoMap, AccessorInfoMap) \ 25 V(AccessorInfoMap, AccessorInfoMap) \
64 V(AccessorPairMap, AccessorPairMap) \ 26 V(AccessorPairMap, AccessorPairMap) \
65 V(AllocationSiteMap, AllocationSiteMap) \ 27 V(AllocationSiteMap, AllocationSiteMap) \
66 V(BooleanMap, BooleanMap) \ 28 V(BooleanMap, BooleanMap) \
67 V(CodeMap, CodeMap) \ 29 V(CodeMap, CodeMap) \
30 V(empty_string, EmptyString) \
31 V(length_string, LengthString) \
32 V(prototype_string, PrototypeString) \
68 V(EmptyFixedArray, EmptyFixedArray) \ 33 V(EmptyFixedArray, EmptyFixedArray) \
69 V(empty_string, EmptyString) \
70 V(EmptyWeakCell, EmptyWeakCell) \ 34 V(EmptyWeakCell, EmptyWeakCell) \
71 V(FalseValue, False) \ 35 V(FalseValue, False) \
72 V(FeedbackVectorMap, FeedbackVectorMap) \ 36 V(FeedbackVectorMap, FeedbackVectorMap) \
73 V(FixedArrayMap, FixedArrayMap) \ 37 V(FixedArrayMap, FixedArrayMap) \
74 V(FixedCOWArrayMap, FixedCOWArrayMap) \ 38 V(FixedCOWArrayMap, FixedCOWArrayMap) \
75 V(FixedDoubleArrayMap, FixedDoubleArrayMap) \ 39 V(FixedDoubleArrayMap, FixedDoubleArrayMap) \
76 V(FunctionTemplateInfoMap, FunctionTemplateInfoMap) \ 40 V(FunctionTemplateInfoMap, FunctionTemplateInfoMap) \
77 V(GlobalPropertyCellMap, PropertyCellMap) \
78 V(has_instance_symbol, HasInstanceSymbol) \ 41 V(has_instance_symbol, HasInstanceSymbol) \
79 V(HeapNumberMap, HeapNumberMap) \ 42 V(HeapNumberMap, HeapNumberMap) \
80 V(length_string, LengthString) \ 43 V(NoClosuresCellMap, NoClosuresCellMap) \
44 V(OneClosureCellMap, OneClosureCellMap) \
81 V(ManyClosuresCellMap, ManyClosuresCellMap) \ 45 V(ManyClosuresCellMap, ManyClosuresCellMap) \
82 V(MetaMap, MetaMap) \
83 V(MinusZeroValue, MinusZero) \ 46 V(MinusZeroValue, MinusZero) \
84 V(MutableHeapNumberMap, MutableHeapNumberMap) \
85 V(NanValue, Nan) \ 47 V(NanValue, Nan) \
86 V(NoClosuresCellMap, NoClosuresCellMap) \
87 V(NullValue, Null) \ 48 V(NullValue, Null) \
88 V(OneClosureCellMap, OneClosureCellMap) \ 49 V(GlobalPropertyCellMap, PropertyCellMap) \
89 V(prototype_string, PrototypeString) \
90 V(SpeciesProtector, SpeciesProtector) \
91 V(SymbolMap, SymbolMap) \ 50 V(SymbolMap, SymbolMap) \
92 V(TheHoleValue, TheHole) \ 51 V(TheHoleValue, TheHole) \
93 V(TrueValue, True) \ 52 V(TrueValue, True) \
94 V(Tuple2Map, Tuple2Map) \ 53 V(Tuple2Map, Tuple2Map) \
95 V(Tuple3Map, Tuple3Map) \ 54 V(Tuple3Map, Tuple3Map) \
96 V(UndefinedValue, Undefined) \ 55 V(UndefinedValue, Undefined) \
97 V(WeakCellMap, WeakCellMap) 56 V(WeakCellMap, WeakCellMap) \
57 V(SpeciesProtector, SpeciesProtector)
98 58
99 // Provides JavaScript-specific "macro-assembler" functionality on top of the 59 // Provides JavaScript-specific "macro-assembler" functionality on top of the
100 // CodeAssembler. By factoring the JavaScript-isms out of the CodeAssembler, 60 // CodeAssembler. By factoring the JavaScript-isms out of the CodeAssembler,
101 // it's possible to add JavaScript-specific useful CodeAssembler "macros" 61 // it's possible to add JavaScript-specific useful CodeAssembler "macros"
102 // without modifying files in the compiler directory (and requiring a review 62 // without modifying files in the compiler directory (and requiring a review
103 // from a compiler directory OWNER). 63 // from a compiler directory OWNER).
104 class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler { 64 class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
105 public: 65 public:
106 typedef compiler::Node Node; 66 typedef compiler::Node Node;
107 67
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 Node* ParameterToTagged(Node* value, ParameterMode mode) { 110 Node* ParameterToTagged(Node* value, ParameterMode mode) {
151 if (mode != SMI_PARAMETERS) value = SmiTag(value); 111 if (mode != SMI_PARAMETERS) value = SmiTag(value);
152 return value; 112 return value;
153 } 113 }
154 114
155 Node* TaggedToParameter(Node* value, ParameterMode mode) { 115 Node* TaggedToParameter(Node* value, ParameterMode mode) {
156 if (mode != SMI_PARAMETERS) value = SmiUntag(value); 116 if (mode != SMI_PARAMETERS) value = SmiUntag(value);
157 return value; 117 return value;
158 } 118 }
159 119
160 Node* MatchesParameterMode(Node* value, ParameterMode mode);
161
162 #define PARAMETER_BINOP(OpName, IntPtrOpName, SmiOpName) \ 120 #define PARAMETER_BINOP(OpName, IntPtrOpName, SmiOpName) \
163 Node* OpName(Node* a, Node* b, ParameterMode mode) { \ 121 Node* OpName(Node* a, Node* b, ParameterMode mode) { \
164 if (mode == SMI_PARAMETERS) { \ 122 if (mode == SMI_PARAMETERS) { \
165 return SmiOpName(a, b); \ 123 return SmiOpName(a, b); \
166 } else { \ 124 } else { \
167 DCHECK_EQ(INTPTR_PARAMETERS, mode); \ 125 DCHECK_EQ(INTPTR_PARAMETERS, mode); \
168 return IntPtrOpName(a, b); \ 126 return IntPtrOpName(a, b); \
169 } \ 127 } \
170 } 128 }
171 PARAMETER_BINOP(IntPtrOrSmiMin, IntPtrMin, SmiMin) 129 PARAMETER_BINOP(IntPtrOrSmiMin, IntPtrMin, SmiMin)
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 // Smi conversions. 178 // Smi conversions.
221 Node* SmiToFloat64(Node* value); 179 Node* SmiToFloat64(Node* value);
222 Node* SmiFromWord(Node* value) { return SmiTag(value); } 180 Node* SmiFromWord(Node* value) { return SmiTag(value); }
223 Node* SmiFromWord32(Node* value); 181 Node* SmiFromWord32(Node* value);
224 Node* SmiToWord(Node* value) { return SmiUntag(value); } 182 Node* SmiToWord(Node* value) { return SmiUntag(value); }
225 Node* SmiToWord32(Node* value); 183 Node* SmiToWord32(Node* value);
226 184
227 // Smi operations. 185 // Smi operations.
228 #define SMI_ARITHMETIC_BINOP(SmiOpName, IntPtrOpName) \ 186 #define SMI_ARITHMETIC_BINOP(SmiOpName, IntPtrOpName) \
229 Node* SmiOpName(Node* a, Node* b) { \ 187 Node* SmiOpName(Node* a, Node* b) { \
230 CSA_SLOW_ASSERT(this, TaggedIsSmi(a)); \
231 CSA_SLOW_ASSERT(this, TaggedIsSmi(b)); \
232 return BitcastWordToTaggedSigned( \ 188 return BitcastWordToTaggedSigned( \
233 IntPtrOpName(BitcastTaggedToWord(a), BitcastTaggedToWord(b))); \ 189 IntPtrOpName(BitcastTaggedToWord(a), BitcastTaggedToWord(b))); \
234 } 190 }
235 SMI_ARITHMETIC_BINOP(SmiAdd, IntPtrAdd) 191 SMI_ARITHMETIC_BINOP(SmiAdd, IntPtrAdd)
236 SMI_ARITHMETIC_BINOP(SmiSub, IntPtrSub) 192 SMI_ARITHMETIC_BINOP(SmiSub, IntPtrSub)
237 SMI_ARITHMETIC_BINOP(SmiAnd, WordAnd) 193 SMI_ARITHMETIC_BINOP(SmiAnd, WordAnd)
238 SMI_ARITHMETIC_BINOP(SmiOr, WordOr) 194 SMI_ARITHMETIC_BINOP(SmiOr, WordOr)
239 #undef SMI_ARITHMETIC_BINOP 195 #undef SMI_ARITHMETIC_BINOP
240 196
241 Node* SmiShl(Node* a, int shift) { 197 Node* SmiShl(Node* a, int shift) {
242 CSA_SLOW_ASSERT(this, TaggedIsSmi(a));
243 return BitcastWordToTaggedSigned(WordShl(BitcastTaggedToWord(a), shift)); 198 return BitcastWordToTaggedSigned(WordShl(BitcastTaggedToWord(a), shift));
244 } 199 }
245 200
246 Node* SmiShr(Node* a, int shift) { 201 Node* SmiShr(Node* a, int shift) {
247 CSA_SLOW_ASSERT(this, TaggedIsSmi(a));
248 return BitcastWordToTaggedSigned( 202 return BitcastWordToTaggedSigned(
249 WordAnd(WordShr(BitcastTaggedToWord(a), shift), 203 WordAnd(WordShr(BitcastTaggedToWord(a), shift),
250 BitcastTaggedToWord(SmiConstant(-1)))); 204 BitcastTaggedToWord(SmiConstant(-1))));
251 } 205 }
252 206
253 Node* WordOrSmiShl(Node* a, int shift, ParameterMode mode) { 207 Node* WordOrSmiShl(Node* a, int shift, ParameterMode mode) {
254 if (mode == SMI_PARAMETERS) { 208 if (mode == SMI_PARAMETERS) {
255 return SmiShl(a, shift); 209 return SmiShl(a, shift);
256 } else { 210 } else {
257 DCHECK_EQ(INTPTR_PARAMETERS, mode); 211 DCHECK_EQ(INTPTR_PARAMETERS, mode);
258 return WordShl(a, shift); 212 return WordShl(a, shift);
259 } 213 }
260 } 214 }
261 215
262 Node* WordOrSmiShr(Node* a, int shift, ParameterMode mode) { 216 Node* WordOrSmiShr(Node* a, int shift, ParameterMode mode) {
263 if (mode == SMI_PARAMETERS) { 217 if (mode == SMI_PARAMETERS) {
264 return SmiShr(a, shift); 218 return SmiShr(a, shift);
265 } else { 219 } else {
266 DCHECK_EQ(INTPTR_PARAMETERS, mode); 220 DCHECK_EQ(INTPTR_PARAMETERS, mode);
267 return WordShr(a, shift); 221 return WordShr(a, shift);
268 } 222 }
269 } 223 }
270 224
271 #define SMI_COMPARISON_OP(SmiOpName, IntPtrOpName) \ 225 #define SMI_COMPARISON_OP(SmiOpName, IntPtrOpName) \
272 Node* SmiOpName(Node* a, Node* b) { \ 226 Node* SmiOpName(Node* a, Node* b) { \
273 CSA_SLOW_ASSERT(this, TaggedIsSmi(a)); \
274 CSA_SLOW_ASSERT(this, TaggedIsSmi(b)); \
275 return IntPtrOpName(BitcastTaggedToWord(a), BitcastTaggedToWord(b)); \ 227 return IntPtrOpName(BitcastTaggedToWord(a), BitcastTaggedToWord(b)); \
276 } 228 }
277 SMI_COMPARISON_OP(SmiEqual, WordEqual) 229 SMI_COMPARISON_OP(SmiEqual, WordEqual)
278 SMI_COMPARISON_OP(SmiNotEqual, WordNotEqual) 230 SMI_COMPARISON_OP(SmiNotEqual, WordNotEqual)
279 SMI_COMPARISON_OP(SmiAbove, UintPtrGreaterThan) 231 SMI_COMPARISON_OP(SmiAbove, UintPtrGreaterThan)
280 SMI_COMPARISON_OP(SmiAboveOrEqual, UintPtrGreaterThanOrEqual) 232 SMI_COMPARISON_OP(SmiAboveOrEqual, UintPtrGreaterThanOrEqual)
281 SMI_COMPARISON_OP(SmiBelow, UintPtrLessThan) 233 SMI_COMPARISON_OP(SmiBelow, UintPtrLessThan)
282 SMI_COMPARISON_OP(SmiLessThan, IntPtrLessThan) 234 SMI_COMPARISON_OP(SmiLessThan, IntPtrLessThan)
283 SMI_COMPARISON_OP(SmiLessThanOrEqual, IntPtrLessThanOrEqual) 235 SMI_COMPARISON_OP(SmiLessThanOrEqual, IntPtrLessThanOrEqual)
284 SMI_COMPARISON_OP(SmiGreaterThan, IntPtrGreaterThan) 236 SMI_COMPARISON_OP(SmiGreaterThan, IntPtrGreaterThan)
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 Node* IsJSReceiver(Node* object); 756 Node* IsJSReceiver(Node* object);
805 Node* IsJSReceiverMap(Node* map); 757 Node* IsJSReceiverMap(Node* map);
806 Node* IsMap(Node* object); 758 Node* IsMap(Node* object);
807 Node* IsCallableMap(Node* map); 759 Node* IsCallableMap(Node* map);
808 Node* IsDeprecatedMap(Node* map); 760 Node* IsDeprecatedMap(Node* map);
809 Node* IsCallable(Node* object); 761 Node* IsCallable(Node* object);
810 Node* IsBoolean(Node* object); 762 Node* IsBoolean(Node* object);
811 Node* IsPropertyCell(Node* object); 763 Node* IsPropertyCell(Node* object);
812 Node* IsAccessorInfo(Node* object); 764 Node* IsAccessorInfo(Node* object);
813 Node* IsAccessorPair(Node* object); 765 Node* IsAccessorPair(Node* object);
814 Node* IsAnyHeapNumber(Node* object);
815 Node* IsMutableHeapNumber(Node* object);
816 Node* IsHeapNumber(Node* object); 766 Node* IsHeapNumber(Node* object);
817 Node* IsName(Node* object); 767 Node* IsName(Node* object);
818 Node* IsSymbol(Node* object); 768 Node* IsSymbol(Node* object);
819 Node* IsPrivateSymbol(Node* object); 769 Node* IsPrivateSymbol(Node* object);
820 Node* IsJSValueInstanceType(Node* instance_type); 770 Node* IsJSValueInstanceType(Node* instance_type);
821 Node* IsJSValue(Node* object); 771 Node* IsJSValue(Node* object);
822 Node* IsJSValueMap(Node* map); 772 Node* IsJSValueMap(Node* map);
823 Node* IsJSArrayInstanceType(Node* instance_type); 773 Node* IsJSArrayInstanceType(Node* instance_type);
824 Node* IsJSArray(Node* object); 774 Node* IsJSArray(Node* object);
825 Node* IsJSArrayMap(Node* object); 775 Node* IsJSArrayMap(Node* object);
826 Node* IsFixedArray(Node* object);
827 Node* IsFixedArrayWithKindOrEmpty(Node* object, ElementsKind kind);
828 Node* IsFixedArrayWithKind(Node* object, ElementsKind kind);
829 Node* IsNativeContext(Node* object); 776 Node* IsNativeContext(Node* object);
830 Node* IsWeakCell(Node* object); 777 Node* IsWeakCell(Node* object);
831 Node* IsFixedDoubleArray(Node* object); 778 Node* IsFixedDoubleArray(Node* object);
832 Node* IsHashTable(Node* object); 779 Node* IsHashTable(Node* object);
833 Node* IsDictionary(Node* object); 780 Node* IsDictionary(Node* object);
834 Node* IsUnseededNumberDictionary(Node* object); 781 Node* IsUnseededNumberDictionary(Node* object);
835 Node* IsConstructorMap(Node* map); 782 Node* IsConstructorMap(Node* map);
836 Node* IsJSFunctionInstanceType(Node* instance_type); 783 Node* IsJSFunctionInstanceType(Node* instance_type);
837 Node* IsJSFunction(Node* object); 784 Node* IsJSFunction(Node* object);
838 Node* IsJSFunctionMap(Node* object); 785 Node* IsJSFunctionMap(Node* object);
(...skipping 30 matching lines...) Expand all
869 // [from,to[ of string. |from| and |to| are expected to be tagged. 816 // [from,to[ of string. |from| and |to| are expected to be tagged.
870 // If flags has the value FROM_TO_ARE_BOUNDED then from and to are in 817 // If flags has the value FROM_TO_ARE_BOUNDED then from and to are in
871 // the range [0, string-length) 818 // the range [0, string-length)
872 Node* SubString(Node* context, Node* string, Node* from, Node* to, 819 Node* SubString(Node* context, Node* string, Node* from, Node* to,
873 SubStringFlags flags = SubStringFlags::NONE); 820 SubStringFlags flags = SubStringFlags::NONE);
874 821
875 // Return a new string object produced by concatenating |first| with |second|. 822 // Return a new string object produced by concatenating |first| with |second|.
876 Node* StringAdd(Node* context, Node* first, Node* second, 823 Node* StringAdd(Node* context, Node* first, Node* second,
877 AllocationFlags flags = kNone); 824 AllocationFlags flags = kNone);
878 825
826 // Unpack the external string, returning a pointer that (offset-wise) looks
827 // like a sequential string.
828 // Note that this pointer is not tagged and does not point to a real
829 // sequential string instance, and may only be used to access the string
830 // data. The pointer is GC-safe as long as a reference to the container
831 // ExternalString is live.
832 // |string| must be an external string. Bailout for short external strings.
833 Node* TryDerefExternalString(Node* const string, Node* const instance_type,
834 Label* if_bailout);
835
879 // Check if |var_string| has an indirect (thin or flat cons) string type, 836 // Check if |var_string| has an indirect (thin or flat cons) string type,
880 // and unpack it if so. 837 // and unpack it if so.
881 void MaybeDerefIndirectString(Variable* var_string, Node* instance_type, 838 void MaybeDerefIndirectString(Variable* var_string, Node* instance_type,
882 Variable* var_did_something); 839 Variable* var_did_something);
883 // Check if |var_left| or |var_right| has an indirect (thin or flat cons) 840 // Check if |var_left| or |var_right| has an indirect (thin or flat cons)
884 // string type, and unpack it/them if so. Fall through if nothing was done. 841 // string type, and unpack it/them if so. Fall through if nothing was done.
885 void MaybeDerefIndirectStrings(Variable* var_left, Node* left_instance_type, 842 void MaybeDerefIndirectStrings(Variable* var_left, Node* left_instance_type,
886 Variable* var_right, Node* right_instance_type, 843 Variable* var_right, Node* right_instance_type,
887 Label* did_something); 844 Label* did_something);
888 845
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
1638 Node* TryToSequential(StringPointerKind ptr_kind, Label* if_bailout); 1595 Node* TryToSequential(StringPointerKind ptr_kind, Label* if_bailout);
1639 1596
1640 Variable var_string_; 1597 Variable var_string_;
1641 Variable var_instance_type_; 1598 Variable var_instance_type_;
1642 Variable var_offset_; 1599 Variable var_offset_;
1643 Variable var_is_external_; 1600 Variable var_is_external_;
1644 1601
1645 const Flags flags_; 1602 const Flags flags_;
1646 }; 1603 };
1647 1604
1605 #define CSA_CHECK(csa, x) \
1606 (csa)->Check([&] { return (x); }, #x, __FILE__, __LINE__)
1607
1608 #ifdef DEBUG
1609 #define CSA_ASSERT(csa, x) \
1610 (csa)->Assert([&] { return (x); }, #x, __FILE__, __LINE__)
1611 #define CSA_ASSERT_JS_ARGC_OP(csa, Op, op, expected) \
1612 (csa)->Assert( \
1613 [&] { \
1614 compiler::Node* const argc = \
1615 (csa)->Parameter(Descriptor::kActualArgumentsCount); \
1616 return (csa)->Op(argc, (csa)->Int32Constant(expected)); \
1617 }, \
1618 "argc " #op " " #expected, __FILE__, __LINE__)
1619
1620 #define CSA_ASSERT_JS_ARGC_EQ(csa, expected) \
1621 CSA_ASSERT_JS_ARGC_OP(csa, Word32Equal, ==, expected)
1622
1623 #define BIND(label) Bind(label, {#label, __FILE__, __LINE__})
1624 #define VARIABLE(name, ...) \
1625 Variable name(this, {#name, __FILE__, __LINE__}, __VA_ARGS__);
1626
1627 #else // DEBUG
1628 #define CSA_ASSERT(csa, x) ((void)0)
1629 #define CSA_ASSERT_JS_ARGC_EQ(csa, expected) ((void)0)
1630 #define BIND(label) Bind(label);
1631 #define VARIABLE(name, ...) Variable name(this, __VA_ARGS__);
1632 #endif // DEBUG
1633
1634 #ifdef ENABLE_SLOW_DCHECKS
1635 #define CSA_SLOW_ASSERT(csa, x) \
1636 if (FLAG_enable_slow_asserts) { \
1637 CSA_ASSERT(csa, x); \
1638 }
1639 #else
1640 #define CSA_SLOW_ASSERT(csa, x) ((void)0)
1641 #endif
1642
1648 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags); 1643 DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags);
1649 1644
1650 } // namespace internal 1645 } // namespace internal
1651 } // namespace v8 1646 } // namespace v8
1652 #endif // V8_CODE_STUB_ASSEMBLER_H_ 1647 #endif // V8_CODE_STUB_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « no previous file | src/code-stub-assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698