Chromium Code Reviews| Index: src/objects.h |
| diff --git a/src/objects.h b/src/objects.h |
| index 56e90dd3f980c13416bde4d734147f2023f3c0e6..145e1ac67a5309524252bdc63f57bc6c3b1d13b8 100644 |
| --- a/src/objects.h |
| +++ b/src/objects.h |
| @@ -4353,6 +4353,7 @@ class Code: public HeapObject { |
| V(UNARY_OP_IC) \ |
| V(BINARY_OP_IC) \ |
| V(COMPARE_IC) \ |
| + V(COMPARE_NIL_IC) \ |
| V(TO_BOOLEAN_IC) |
| enum Kind { |
| @@ -4464,6 +4465,8 @@ class Code: public HeapObject { |
| inline Kind kind(); |
| inline InlineCacheState ic_state(); // Only valid for IC stubs. |
| inline ExtraICState extra_ic_state(); // Only valid for IC stubs. |
| + inline ExtraICState extended_extra_ic_state(); // Only valid for |
| + // non-call IC stubs. |
| inline StubType type(); // Only valid for monomorphic IC stubs. |
| inline int arguments_count(); // Only valid for call IC stubs. |
| @@ -4479,6 +4482,7 @@ class Code: public HeapObject { |
| inline bool is_unary_op_stub() { return kind() == UNARY_OP_IC; } |
| inline bool is_binary_op_stub() { return kind() == BINARY_OP_IC; } |
| inline bool is_compare_ic_stub() { return kind() == COMPARE_IC; } |
| + inline bool is_compare_nil_ic_stub() { return kind() == COMPARE_NIL_IC; } |
| inline bool is_to_boolean_ic_stub() { return kind() == TO_BOOLEAN_IC; } |
| // [major_key]: For kind STUB or BINARY_OP_IC, the major key. |
| @@ -4557,6 +4561,9 @@ class Code: public HeapObject { |
| inline byte to_boolean_state(); |
| inline void set_to_boolean_state(byte value); |
| + // [compare_nil]: For kind COMPARE_NIL_IC tells what state the stub is in. |
| + byte compare_nil_state(); |
| + |
| // [has_function_cache]: For kind STUB tells whether there is a function |
| // cache is passed to the stub. |
| inline bool has_function_cache(); |
| @@ -4576,6 +4583,7 @@ class Code: public HeapObject { |
| // Find the first map in an IC stub. |
| Map* FindFirstMap(); |
| void FindAllMaps(MapHandleList* maps); |
| + void ReplaceFirstMap(Map* replace); |
| // Find the first code in an IC stub. |
| Code* FindFirstCode(); |
| @@ -4628,6 +4636,7 @@ class Code: public HeapObject { |
| static inline Kind ExtractKindFromFlags(Flags flags); |
| static inline InlineCacheHolderFlag ExtractCacheHolderFromFlags(Flags flags); |
| static inline ExtraICState ExtractExtraICStateFromFlags(Flags flags); |
| + static inline ExtraICState ExtractExtendedExtraICStateFromFlags(Flags flags); |
| static inline int ExtractArgumentsCountFromFlags(Flags flags); |
| static inline Flags RemoveTypeFromFlags(Flags flags); |
| @@ -4767,8 +4776,11 @@ class Code: public HeapObject { |
| class TypeField: public BitField<StubType, 3, 3> {}; |
| class CacheHolderField: public BitField<InlineCacheHolderFlag, 6, 1> {}; |
| class KindField: public BitField<Kind, 7, 4> {}; |
| - class ExtraICStateField: public BitField<ExtraICState, 11, 5> {}; |
| - class IsPregeneratedField: public BitField<bool, 16, 1> {}; |
| + class IsPregeneratedField: public BitField<bool, 11, 1> {}; |
| + class ExtraICStateField: public BitField<ExtraICState, 12, 5> {}; |
| + class ExtendedExtraICStateField: public BitField<ExtraICState, 12, |
| + PlatformSmiTagging::kSmiValueSize - 12 + 1> {}; // NOLINT |
| + STATIC_ASSERT(ExtraICStateField::kShift == ExtendedExtraICStateField::kShift); |
|
mvstanton
2013/04/23 09:27:30
This is getting pretty hairy. I'm glad for the sta
|
| // KindSpecificFlags1 layout (STUB and OPTIMIZED_FUNCTION) |
| static const int kStackSlotsFirstBit = 0; |
| @@ -4841,6 +4853,13 @@ class Code: public HeapObject { |
| PlatformSmiTagging::kSmiValueSize - Code::kArgumentsCountShift + 1; |
| static const int kMaxArguments = (1 << kArgumentsBits) - 1; |
| + // ICs can use either argument count or ExtendedExtraIC, since their storage |
| + // overlaps. |
| + STATIC_ASSERT(ExtraICStateField::kShift + |
| + ExtraICStateField::kSize + kArgumentsBits == |
| + ExtendedExtraICStateField::kShift + |
| + ExtendedExtraICStateField::kSize); |
| + |
| // This constant should be encodable in an ARM instruction. |
| static const int kFlagsNotUsedInLookup = |
| TypeField::kMask | CacheHolderField::kMask; |