| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 8e87fd7b7336c3d2de8b8f998e4254036cc1113f..4e6ef8e37da6f819c06a0837ebc86ceb048f0d91 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -2572,14 +2572,20 @@ bool Code::is_inline_cache_stub() {
|
| Code::Flags Code::ComputeFlags(Kind kind,
|
| InLoopFlag in_loop,
|
| InlineCacheState ic_state,
|
| + ExtraICState extra_ic_state,
|
| PropertyType type,
|
| int argc,
|
| InlineCacheHolderFlag holder) {
|
| + // Extra IC state is only allowed for monomorphic call IC stubs.
|
| + ASSERT(extra_ic_state == kNoExtraICState ||
|
| + (kind == CALL_IC && (ic_state == MONOMORPHIC ||
|
| + ic_state == MONOMORPHIC_PROTOTYPE_FAILURE)));
|
| // Compute the bit mask.
|
| int bits = kind << kFlagsKindShift;
|
| if (in_loop) bits |= kFlagsICInLoopMask;
|
| bits |= ic_state << kFlagsICStateShift;
|
| bits |= type << kFlagsTypeShift;
|
| + bits |= extra_ic_state << kFlagsExtraICStateShift;
|
| bits |= argc << kFlagsArgumentsCountShift;
|
| if (holder == PROTOTYPE_MAP) bits |= kFlagsCacheInPrototypeMapMask;
|
| // Cast to flags and validate result before returning it.
|
| @@ -2588,6 +2594,7 @@ Code::Flags Code::ComputeFlags(Kind kind,
|
| ASSERT(ExtractICStateFromFlags(result) == ic_state);
|
| ASSERT(ExtractICInLoopFromFlags(result) == in_loop);
|
| ASSERT(ExtractTypeFromFlags(result) == type);
|
| + ASSERT(ExtractExtraICStateFromFlags(result) == extra_ic_state);
|
| ASSERT(ExtractArgumentsCountFromFlags(result) == argc);
|
| return result;
|
| }
|
| @@ -2595,10 +2602,12 @@ Code::Flags Code::ComputeFlags(Kind kind,
|
|
|
| Code::Flags Code::ComputeMonomorphicFlags(Kind kind,
|
| PropertyType type,
|
| + ExtraICState extra_ic_state,
|
| InlineCacheHolderFlag holder,
|
| InLoopFlag in_loop,
|
| int argc) {
|
| - return ComputeFlags(kind, in_loop, MONOMORPHIC, type, argc, holder);
|
| + return ComputeFlags(
|
| + kind, in_loop, MONOMORPHIC, extra_ic_state, type, argc, holder);
|
| }
|
|
|
|
|
| @@ -2614,6 +2623,12 @@ InlineCacheState Code::ExtractICStateFromFlags(Flags flags) {
|
| }
|
|
|
|
|
| +Code::ExtraICState Code::ExtractExtraICStateFromFlags(Flags flags) {
|
| + int bits = (flags & kFlagsExtraICStateMask) >> kFlagsExtraICStateShift;
|
| + return static_cast<ExtraICState>(bits);
|
| +}
|
| +
|
| +
|
| InLoopFlag Code::ExtractICInLoopFromFlags(Flags flags) {
|
| int bits = (flags & kFlagsICInLoopMask);
|
| return bits != 0 ? IN_LOOP : NOT_IN_LOOP;
|
|
|