Index: src/code-stubs.h |
diff --git a/src/code-stubs.h b/src/code-stubs.h |
index 45b64d226db61f926c6341f5219a058cb1b7e409..a3f0bf7aa2ded8b545fbab1f1cc9ec3c270dc8ae 100644 |
--- a/src/code-stubs.h |
+++ b/src/code-stubs.h |
@@ -644,9 +644,9 @@ class FastNewContextStub V8_FINAL : public HydrogenCodeStub { |
public: |
static const int kMaximumSlots = 64; |
- FastNewContextStub(Isolate* isolate, int slots) |
- : HydrogenCodeStub(isolate), slots_(slots) { |
- DCHECK(slots_ > 0 && slots_ <= kMaximumSlots); |
+ FastNewContextStub(Isolate* isolate, int slots) : HydrogenCodeStub(isolate) { |
+ DCHECK(slots > 0 && slots <= kMaximumSlots); |
+ set_sub_minor_key(SlotsBits::encode(slots)); |
} |
virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
@@ -656,16 +656,17 @@ class FastNewContextStub V8_FINAL : public HydrogenCodeStub { |
static void InstallDescriptors(Isolate* isolate); |
- int slots() const { return slots_; } |
- |
- virtual Major MajorKey() const V8_OVERRIDE { return FastNewContext; } |
- virtual int NotMissMinorKey() const V8_OVERRIDE { return slots_; } |
+ int slots() const { return SlotsBits::decode(sub_minor_key()); } |
// Parameters accessed via CodeStubGraphBuilder::GetParameter() |
static const int kFunction = 0; |
private: |
- int slots_; |
+ virtual Major MajorKey() const V8_OVERRIDE { return FastNewContext; } |
+ |
+ class SlotsBits : public BitField<int, 0, 8> {}; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FastNewContextStub); |
}; |
@@ -673,11 +674,12 @@ class FastCloneShallowArrayStub : public HydrogenCodeStub { |
public: |
FastCloneShallowArrayStub(Isolate* isolate, |
AllocationSiteMode allocation_site_mode) |
- : HydrogenCodeStub(isolate), |
- allocation_site_mode_(allocation_site_mode) {} |
+ : HydrogenCodeStub(isolate) { |
+ set_sub_minor_key(AllocationSiteModeBits::encode(allocation_site_mode)); |
+ } |
AllocationSiteMode allocation_site_mode() const { |
- return allocation_site_mode_; |
+ return AllocationSiteModeBits::decode(sub_minor_key()); |
} |
virtual Handle<Code> GenerateCode(); |
@@ -688,14 +690,11 @@ class FastCloneShallowArrayStub : public HydrogenCodeStub { |
static void InstallDescriptors(Isolate* isolate); |
private: |
- AllocationSiteMode allocation_site_mode_; |
+ virtual Major MajorKey() const V8_OVERRIDE { return FastCloneShallowArray; } |
class AllocationSiteModeBits: public BitField<AllocationSiteMode, 0, 1> {}; |
- // Ensure data fits within available bits. |
- virtual Major MajorKey() const V8_OVERRIDE { return FastCloneShallowArray; } |
- int NotMissMinorKey() const { |
- return AllocationSiteModeBits::encode(allocation_site_mode_); |
- } |
+ |
+ DISALLOW_COPY_AND_ASSIGN(FastCloneShallowArrayStub); |
}; |
@@ -2498,15 +2497,20 @@ class ToBooleanStub: public HydrogenCodeStub { |
}; |
ToBooleanStub(Isolate* isolate, ResultMode mode, Types types = Types()) |
- : HydrogenCodeStub(isolate), types_(types), mode_(mode) {} |
+ : HydrogenCodeStub(isolate) { |
+ set_sub_minor_key(TypesBits::encode(types.ToByte()) | |
+ ResultModeBits::encode(mode)); |
+ } |
+ |
ToBooleanStub(Isolate* isolate, ExtraICState state) |
- : HydrogenCodeStub(isolate), |
- types_(static_cast<byte>(state)), |
- mode_(RESULT_AS_SMI) {} |
+ : HydrogenCodeStub(isolate) { |
+ set_sub_minor_key(TypesBits::encode(static_cast<byte>(state)) | |
+ ResultModeBits::encode(RESULT_AS_SMI)); |
+ } |
bool UpdateStatus(Handle<Object> object); |
- Types GetTypes() { return types_; } |
- ResultMode GetMode() { return mode_; } |
+ Types types() const { return Types(TypesBits::decode(sub_minor_key())); } |
+ ResultMode mode() const { return ResultModeBits::decode(sub_minor_key()); } |
virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
virtual void InitializeInterfaceDescriptor( |
@@ -2527,10 +2531,10 @@ class ToBooleanStub: public HydrogenCodeStub { |
return ToBooleanStub(isolate, UNINITIALIZED).GetCode(); |
} |
- virtual ExtraICState GetExtraICState() const { return types_.ToIntegral(); } |
+ virtual ExtraICState GetExtraICState() const { return types().ToIntegral(); } |
virtual InlineCacheState GetICState() const { |
- if (types_.IsEmpty()) { |
+ if (types().IsEmpty()) { |
return ::v8::internal::UNINITIALIZED; |
} else { |
return MONOMORPHIC; |
@@ -2538,19 +2542,17 @@ class ToBooleanStub: public HydrogenCodeStub { |
} |
private: |
- class TypesBits : public BitField<byte, 0, NUMBER_OF_TYPES> {}; |
- class ResultModeBits : public BitField<ResultMode, NUMBER_OF_TYPES, 2> {}; |
- |
virtual Major MajorKey() const V8_OVERRIDE { return ToBoolean; } |
- int NotMissMinorKey() const { |
- return TypesBits::encode(types_.ToByte()) | ResultModeBits::encode(mode_); |
- } |
ToBooleanStub(Isolate* isolate, InitializationState init_state) |
- : HydrogenCodeStub(isolate, init_state), mode_(RESULT_AS_SMI) {} |
+ : HydrogenCodeStub(isolate, init_state) { |
+ set_sub_minor_key(ResultModeBits::encode(RESULT_AS_SMI)); |
+ } |
- Types types_; |
- ResultMode mode_; |
+ class TypesBits : public BitField<byte, 0, NUMBER_OF_TYPES> {}; |
+ class ResultModeBits : public BitField<ResultMode, NUMBER_OF_TYPES, 2> {}; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ToBooleanStub); |
}; |
@@ -2559,21 +2561,21 @@ OStream& operator<<(OStream& os, const ToBooleanStub::Types& t); |
class ElementsTransitionAndStoreStub : public HydrogenCodeStub { |
public: |
- ElementsTransitionAndStoreStub(Isolate* isolate, |
- ElementsKind from_kind, |
- ElementsKind to_kind, |
- bool is_jsarray, |
+ ElementsTransitionAndStoreStub(Isolate* isolate, ElementsKind from_kind, |
+ ElementsKind to_kind, bool is_jsarray, |
KeyedAccessStoreMode store_mode) |
- : HydrogenCodeStub(isolate), |
- from_kind_(from_kind), |
- to_kind_(to_kind), |
- is_jsarray_(is_jsarray), |
- store_mode_(store_mode) {} |
+ : HydrogenCodeStub(isolate) { |
+ set_sub_minor_key(FromBits::encode(from_kind) | ToBits::encode(to_kind) | |
+ IsJSArrayBits::encode(is_jsarray) | |
+ StoreModeBits::encode(store_mode)); |
+ } |
- ElementsKind from_kind() const { return from_kind_; } |
- ElementsKind to_kind() const { return to_kind_; } |
- bool is_jsarray() const { return is_jsarray_; } |
- KeyedAccessStoreMode store_mode() const { return store_mode_; } |
+ ElementsKind from_kind() const { return FromBits::decode(sub_minor_key()); } |
+ ElementsKind to_kind() const { return ToBits::decode(sub_minor_key()); } |
+ bool is_jsarray() const { return IsJSArrayBits::decode(sub_minor_key()); } |
+ KeyedAccessStoreMode store_mode() const { |
+ return StoreModeBits::decode(sub_minor_key()); |
+ } |
virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
@@ -2601,25 +2603,14 @@ class ElementsTransitionAndStoreStub : public HydrogenCodeStub { |
} |
private: |
- class FromBits: public BitField<ElementsKind, 0, 8> {}; |
- class ToBits: public BitField<ElementsKind, 8, 8> {}; |
- class IsJSArrayBits: public BitField<bool, 16, 1> {}; |
- class StoreModeBits: public BitField<KeyedAccessStoreMode, 17, 4> {}; |
- |
virtual Major MajorKey() const V8_OVERRIDE { |
return ElementsTransitionAndStore; |
} |
- int NotMissMinorKey() const { |
- return FromBits::encode(from_kind_) | |
- ToBits::encode(to_kind_) | |
- IsJSArrayBits::encode(is_jsarray_) | |
- StoreModeBits::encode(store_mode_); |
- } |
- ElementsKind from_kind_; |
- ElementsKind to_kind_; |
- bool is_jsarray_; |
- KeyedAccessStoreMode store_mode_; |
+ class FromBits : public BitField<ElementsKind, 0, 8> {}; |
+ class ToBits : public BitField<ElementsKind, 8, 8> {}; |
+ class IsJSArrayBits : public BitField<bool, 16, 1> {}; |
+ class StoreModeBits : public BitField<KeyedAccessStoreMode, 17, 4> {}; |
DISALLOW_COPY_AND_ASSIGN(ElementsTransitionAndStoreStub); |
}; |