| Index: src/code-stub-assembler.h
|
| diff --git a/src/code-stub-assembler.h b/src/code-stub-assembler.h
|
| index 9cee969cfd6c34ce4f9daa9e5654d12b3dad0723..c5520d92d17ba9460141184335ed17188e591f3a 100644
|
| --- a/src/code-stub-assembler.h
|
| +++ b/src/code-stub-assembler.h
|
| @@ -18,44 +18,6 @@
|
| class CodeStubArguments;
|
| class StatsCounter;
|
| class StubCache;
|
| -
|
| -#define CSA_CHECK(csa, x) \
|
| - (csa)->Check([&] { return (x); }, #x, __FILE__, __LINE__)
|
| -
|
| -#ifdef DEBUG
|
| -#define CSA_ASSERT(csa, x) \
|
| - (csa)->Assert([&] { return (x); }, #x, __FILE__, __LINE__)
|
| -#define CSA_ASSERT_JS_ARGC_OP(csa, Op, op, expected) \
|
| - (csa)->Assert( \
|
| - [&] { \
|
| - compiler::Node* const argc = \
|
| - (csa)->Parameter(Descriptor::kActualArgumentsCount); \
|
| - return (csa)->Op(argc, (csa)->Int32Constant(expected)); \
|
| - }, \
|
| - "argc " #op " " #expected, __FILE__, __LINE__)
|
| -
|
| -#define CSA_ASSERT_JS_ARGC_EQ(csa, expected) \
|
| - CSA_ASSERT_JS_ARGC_OP(csa, Word32Equal, ==, expected)
|
| -
|
| -#define BIND(label) Bind(label, {#label, __FILE__, __LINE__})
|
| -#define VARIABLE(name, ...) \
|
| - Variable name(this, {#name, __FILE__, __LINE__}, __VA_ARGS__);
|
| -
|
| -#else // DEBUG
|
| -#define CSA_ASSERT(csa, x) ((void)0)
|
| -#define CSA_ASSERT_JS_ARGC_EQ(csa, expected) ((void)0)
|
| -#define BIND(label) Bind(label);
|
| -#define VARIABLE(name, ...) Variable name(this, __VA_ARGS__);
|
| -#endif // DEBUG
|
| -
|
| -#ifdef ENABLE_SLOW_DCHECKS
|
| -#define CSA_SLOW_ASSERT(csa, x) \
|
| - if (FLAG_enable_slow_asserts) { \
|
| - CSA_ASSERT(csa, x); \
|
| - }
|
| -#else
|
| -#define CSA_SLOW_ASSERT(csa, x) ((void)0)
|
| -#endif
|
|
|
| enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol };
|
|
|
| @@ -65,8 +27,10 @@
|
| V(AllocationSiteMap, AllocationSiteMap) \
|
| V(BooleanMap, BooleanMap) \
|
| V(CodeMap, CodeMap) \
|
| + V(empty_string, EmptyString) \
|
| + V(length_string, LengthString) \
|
| + V(prototype_string, PrototypeString) \
|
| V(EmptyFixedArray, EmptyFixedArray) \
|
| - V(empty_string, EmptyString) \
|
| V(EmptyWeakCell, EmptyWeakCell) \
|
| V(FalseValue, False) \
|
| V(FeedbackVectorMap, FeedbackVectorMap) \
|
| @@ -74,27 +38,23 @@
|
| V(FixedCOWArrayMap, FixedCOWArrayMap) \
|
| V(FixedDoubleArrayMap, FixedDoubleArrayMap) \
|
| V(FunctionTemplateInfoMap, FunctionTemplateInfoMap) \
|
| - V(GlobalPropertyCellMap, PropertyCellMap) \
|
| V(has_instance_symbol, HasInstanceSymbol) \
|
| V(HeapNumberMap, HeapNumberMap) \
|
| - V(length_string, LengthString) \
|
| + V(NoClosuresCellMap, NoClosuresCellMap) \
|
| + V(OneClosureCellMap, OneClosureCellMap) \
|
| V(ManyClosuresCellMap, ManyClosuresCellMap) \
|
| - V(MetaMap, MetaMap) \
|
| V(MinusZeroValue, MinusZero) \
|
| - V(MutableHeapNumberMap, MutableHeapNumberMap) \
|
| V(NanValue, Nan) \
|
| - V(NoClosuresCellMap, NoClosuresCellMap) \
|
| V(NullValue, Null) \
|
| - V(OneClosureCellMap, OneClosureCellMap) \
|
| - V(prototype_string, PrototypeString) \
|
| - V(SpeciesProtector, SpeciesProtector) \
|
| + V(GlobalPropertyCellMap, PropertyCellMap) \
|
| V(SymbolMap, SymbolMap) \
|
| V(TheHoleValue, TheHole) \
|
| V(TrueValue, True) \
|
| V(Tuple2Map, Tuple2Map) \
|
| V(Tuple3Map, Tuple3Map) \
|
| V(UndefinedValue, Undefined) \
|
| - V(WeakCellMap, WeakCellMap)
|
| + V(WeakCellMap, WeakCellMap) \
|
| + V(SpeciesProtector, SpeciesProtector)
|
|
|
| // Provides JavaScript-specific "macro-assembler" functionality on top of the
|
| // CodeAssembler. By factoring the JavaScript-isms out of the CodeAssembler,
|
| @@ -156,8 +116,6 @@
|
| if (mode != SMI_PARAMETERS) value = SmiUntag(value);
|
| return value;
|
| }
|
| -
|
| - Node* MatchesParameterMode(Node* value, ParameterMode mode);
|
|
|
| #define PARAMETER_BINOP(OpName, IntPtrOpName, SmiOpName) \
|
| Node* OpName(Node* a, Node* b, ParameterMode mode) { \
|
| @@ -227,8 +185,6 @@
|
| // Smi operations.
|
| #define SMI_ARITHMETIC_BINOP(SmiOpName, IntPtrOpName) \
|
| Node* SmiOpName(Node* a, Node* b) { \
|
| - CSA_SLOW_ASSERT(this, TaggedIsSmi(a)); \
|
| - CSA_SLOW_ASSERT(this, TaggedIsSmi(b)); \
|
| return BitcastWordToTaggedSigned( \
|
| IntPtrOpName(BitcastTaggedToWord(a), BitcastTaggedToWord(b))); \
|
| }
|
| @@ -239,12 +195,10 @@
|
| #undef SMI_ARITHMETIC_BINOP
|
|
|
| Node* SmiShl(Node* a, int shift) {
|
| - CSA_SLOW_ASSERT(this, TaggedIsSmi(a));
|
| return BitcastWordToTaggedSigned(WordShl(BitcastTaggedToWord(a), shift));
|
| }
|
|
|
| Node* SmiShr(Node* a, int shift) {
|
| - CSA_SLOW_ASSERT(this, TaggedIsSmi(a));
|
| return BitcastWordToTaggedSigned(
|
| WordAnd(WordShr(BitcastTaggedToWord(a), shift),
|
| BitcastTaggedToWord(SmiConstant(-1))));
|
| @@ -270,8 +224,6 @@
|
|
|
| #define SMI_COMPARISON_OP(SmiOpName, IntPtrOpName) \
|
| Node* SmiOpName(Node* a, Node* b) { \
|
| - CSA_SLOW_ASSERT(this, TaggedIsSmi(a)); \
|
| - CSA_SLOW_ASSERT(this, TaggedIsSmi(b)); \
|
| return IntPtrOpName(BitcastTaggedToWord(a), BitcastTaggedToWord(b)); \
|
| }
|
| SMI_COMPARISON_OP(SmiEqual, WordEqual)
|
| @@ -811,8 +763,6 @@
|
| Node* IsPropertyCell(Node* object);
|
| Node* IsAccessorInfo(Node* object);
|
| Node* IsAccessorPair(Node* object);
|
| - Node* IsAnyHeapNumber(Node* object);
|
| - Node* IsMutableHeapNumber(Node* object);
|
| Node* IsHeapNumber(Node* object);
|
| Node* IsName(Node* object);
|
| Node* IsSymbol(Node* object);
|
| @@ -823,9 +773,6 @@
|
| Node* IsJSArrayInstanceType(Node* instance_type);
|
| Node* IsJSArray(Node* object);
|
| Node* IsJSArrayMap(Node* object);
|
| - Node* IsFixedArray(Node* object);
|
| - Node* IsFixedArrayWithKindOrEmpty(Node* object, ElementsKind kind);
|
| - Node* IsFixedArrayWithKind(Node* object, ElementsKind kind);
|
| Node* IsNativeContext(Node* object);
|
| Node* IsWeakCell(Node* object);
|
| Node* IsFixedDoubleArray(Node* object);
|
| @@ -875,6 +822,16 @@
|
| // Return a new string object produced by concatenating |first| with |second|.
|
| Node* StringAdd(Node* context, Node* first, Node* second,
|
| AllocationFlags flags = kNone);
|
| +
|
| + // Unpack the external string, returning a pointer that (offset-wise) looks
|
| + // like a sequential string.
|
| + // Note that this pointer is not tagged and does not point to a real
|
| + // sequential string instance, and may only be used to access the string
|
| + // data. The pointer is GC-safe as long as a reference to the container
|
| + // ExternalString is live.
|
| + // |string| must be an external string. Bailout for short external strings.
|
| + Node* TryDerefExternalString(Node* const string, Node* const instance_type,
|
| + Label* if_bailout);
|
|
|
| // Check if |var_string| has an indirect (thin or flat cons) string type,
|
| // and unpack it if so.
|
| @@ -1645,6 +1602,44 @@
|
| const Flags flags_;
|
| };
|
|
|
| +#define CSA_CHECK(csa, x) \
|
| + (csa)->Check([&] { return (x); }, #x, __FILE__, __LINE__)
|
| +
|
| +#ifdef DEBUG
|
| +#define CSA_ASSERT(csa, x) \
|
| + (csa)->Assert([&] { return (x); }, #x, __FILE__, __LINE__)
|
| +#define CSA_ASSERT_JS_ARGC_OP(csa, Op, op, expected) \
|
| + (csa)->Assert( \
|
| + [&] { \
|
| + compiler::Node* const argc = \
|
| + (csa)->Parameter(Descriptor::kActualArgumentsCount); \
|
| + return (csa)->Op(argc, (csa)->Int32Constant(expected)); \
|
| + }, \
|
| + "argc " #op " " #expected, __FILE__, __LINE__)
|
| +
|
| +#define CSA_ASSERT_JS_ARGC_EQ(csa, expected) \
|
| + CSA_ASSERT_JS_ARGC_OP(csa, Word32Equal, ==, expected)
|
| +
|
| +#define BIND(label) Bind(label, {#label, __FILE__, __LINE__})
|
| +#define VARIABLE(name, ...) \
|
| + Variable name(this, {#name, __FILE__, __LINE__}, __VA_ARGS__);
|
| +
|
| +#else // DEBUG
|
| +#define CSA_ASSERT(csa, x) ((void)0)
|
| +#define CSA_ASSERT_JS_ARGC_EQ(csa, expected) ((void)0)
|
| +#define BIND(label) Bind(label);
|
| +#define VARIABLE(name, ...) Variable name(this, __VA_ARGS__);
|
| +#endif // DEBUG
|
| +
|
| +#ifdef ENABLE_SLOW_DCHECKS
|
| +#define CSA_SLOW_ASSERT(csa, x) \
|
| + if (FLAG_enable_slow_asserts) { \
|
| + CSA_ASSERT(csa, x); \
|
| + }
|
| +#else
|
| +#define CSA_SLOW_ASSERT(csa, x) ((void)0)
|
| +#endif
|
| +
|
| DEFINE_OPERATORS_FOR_FLAGS(CodeStubAssembler::AllocationFlags);
|
|
|
| } // namespace internal
|
|
|