Chromium Code Reviews| Index: src/ic/ic-state.h |
| diff --git a/src/ic/ic-state.h b/src/ic/ic-state.h |
| index dbc504bf6d79f9f95d6a86e14eca0514198507f5..4df355db9022a4c69d8709c68dab23c6d0e16bee 100644 |
| --- a/src/ic/ic-state.h |
| +++ b/src/ic/ic-state.h |
| @@ -201,11 +201,20 @@ class CompareICState { |
| class LoadICState final BASE_EMBEDDED { |
| + private: |
| + class ContextualModeBits : public BitField<ContextualMode, 0, 1> {}; |
|
Toon Verwaest
2015/06/09 11:58:04
Why was this moved up? That looks odd...
conradw
2015/06/09 13:09:27
Because of the initialisation order, if I want to
|
| + class StrengthBits : public BitField<bool, 1, 1> {}; |
| + STATIC_ASSERT(static_cast<int>(NOT_CONTEXTUAL) == 0); |
| + const ExtraICState state_; |
| + |
| public: |
| + static const ExtraICState kStrongModeState = 1 << StrengthBits::kShift; |
| + |
| explicit LoadICState(ExtraICState extra_ic_state) : state_(extra_ic_state) {} |
| - explicit LoadICState(ContextualMode mode) |
| - : state_(ContextualModeBits::encode(mode)) {} |
| + explicit LoadICState(ContextualMode mode, Strength strength) |
| + : state_(ContextualModeBits::encode(mode) | |
| + StrengthBits::encode(is_strong(strength))) {} |
| ExtraICState GetExtraICState() const { return state_; } |
| @@ -213,15 +222,17 @@ class LoadICState final BASE_EMBEDDED { |
| return ContextualModeBits::decode(state_); |
| } |
| + Strength strength() const { |
| + return StrengthBits::decode(state_) ? Strength::STRONG : Strength::WEAK; |
| + } |
| + |
| static ContextualMode GetContextualMode(ExtraICState state) { |
| return LoadICState(state).contextual_mode(); |
| } |
| - private: |
| - class ContextualModeBits : public BitField<ContextualMode, 0, 1> {}; |
| - STATIC_ASSERT(static_cast<int>(NOT_CONTEXTUAL) == 0); |
| - |
| - const ExtraICState state_; |
| + static Strength GetStrength(ExtraICState state) { |
| + return LoadICState(state).strength(); |
| + } |
| }; |