Commit 0748ee42 authored by yangguo@chromium.org's avatar yangguo@chromium.org

Sub-minor-key-ify seven HydrogenCodeStubs.

- FastCloneShallowObjectStub
- StringAddStub
- LoadFastElementStub
- StoreFastElementStub
- TransitionElementsKindStub
- ArrayConstructorStubBase
- InternalArrayConstructorStubBase

R=mvstanton@chromium.org

Review URL: https://codereview.chromium.org/511853002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23477 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 3cfef1e0
...@@ -704,12 +704,13 @@ class FastCloneShallowObjectStub : public HydrogenCodeStub { ...@@ -704,12 +704,13 @@ class FastCloneShallowObjectStub : public HydrogenCodeStub {
static const int kMaximumClonedProperties = 6; static const int kMaximumClonedProperties = 6;
FastCloneShallowObjectStub(Isolate* isolate, int length) FastCloneShallowObjectStub(Isolate* isolate, int length)
: HydrogenCodeStub(isolate), length_(length) { : HydrogenCodeStub(isolate) {
DCHECK_GE(length_, 0); DCHECK_GE(length, 0);
DCHECK_LE(length_, kMaximumClonedProperties); DCHECK_LE(length, kMaximumClonedProperties);
set_sub_minor_key(LengthBits::encode(length));
} }
int length() const { return length_; } int length() const { return LengthBits::decode(sub_minor_key()); }
virtual Handle<Code> GenerateCode() V8_OVERRIDE; virtual Handle<Code> GenerateCode() V8_OVERRIDE;
...@@ -717,10 +718,9 @@ class FastCloneShallowObjectStub : public HydrogenCodeStub { ...@@ -717,10 +718,9 @@ class FastCloneShallowObjectStub : public HydrogenCodeStub {
CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
private: private:
int length_;
virtual Major MajorKey() const V8_OVERRIDE { return FastCloneShallowObject; } virtual Major MajorKey() const V8_OVERRIDE { return FastCloneShallowObject; }
int NotMissMinorKey() const { return length_; }
class LengthBits : public BitField<int, 0, 4> {};
DISALLOW_COPY_AND_ASSIGN(FastCloneShallowObjectStub); DISALLOW_COPY_AND_ASSIGN(FastCloneShallowObjectStub);
}; };
...@@ -1301,19 +1301,19 @@ enum StringAddFlags { ...@@ -1301,19 +1301,19 @@ enum StringAddFlags {
class StringAddStub V8_FINAL : public HydrogenCodeStub { class StringAddStub V8_FINAL : public HydrogenCodeStub {
public: public:
StringAddStub(Isolate* isolate, StringAddStub(Isolate* isolate, StringAddFlags flags,
StringAddFlags flags,
PretenureFlag pretenure_flag) PretenureFlag pretenure_flag)
: HydrogenCodeStub(isolate), : HydrogenCodeStub(isolate) {
bit_field_(StringAddFlagsBits::encode(flags) | set_sub_minor_key(StringAddFlagsBits::encode(flags) |
PretenureFlagBits::encode(pretenure_flag)) {} PretenureFlagBits::encode(pretenure_flag));
}
StringAddFlags flags() const { StringAddFlags flags() const {
return StringAddFlagsBits::decode(bit_field_); return StringAddFlagsBits::decode(sub_minor_key());
} }
PretenureFlag pretenure_flag() const { PretenureFlag pretenure_flag() const {
return PretenureFlagBits::decode(bit_field_); return PretenureFlagBits::decode(sub_minor_key());
} }
virtual Handle<Code> GenerateCode() V8_OVERRIDE; virtual Handle<Code> GenerateCode() V8_OVERRIDE;
...@@ -1328,12 +1328,10 @@ class StringAddStub V8_FINAL : public HydrogenCodeStub { ...@@ -1328,12 +1328,10 @@ class StringAddStub V8_FINAL : public HydrogenCodeStub {
static const int kRight = 1; static const int kRight = 1;
private: private:
virtual Major MajorKey() const V8_OVERRIDE { return StringAdd; }
class StringAddFlagsBits: public BitField<StringAddFlags, 0, 2> {}; class StringAddFlagsBits: public BitField<StringAddFlags, 0, 2> {};
class PretenureFlagBits: public BitField<PretenureFlag, 2, 1> {}; class PretenureFlagBits: public BitField<PretenureFlag, 2, 1> {};
uint32_t bit_field_;
virtual Major MajorKey() const V8_OVERRIDE { return StringAdd; }
virtual int NotMissMinorKey() const V8_OVERRIDE { return bit_field_; }
virtual void PrintBaseName(OStream& os) const V8_OVERRIDE; // NOLINT virtual void PrintBaseName(OStream& os) const V8_OVERRIDE; // NOLINT
...@@ -2109,16 +2107,14 @@ class LoadFastElementStub : public HydrogenCodeStub { ...@@ -2109,16 +2107,14 @@ class LoadFastElementStub : public HydrogenCodeStub {
LoadFastElementStub(Isolate* isolate, bool is_js_array, LoadFastElementStub(Isolate* isolate, bool is_js_array,
ElementsKind elements_kind) ElementsKind elements_kind)
: HydrogenCodeStub(isolate) { : HydrogenCodeStub(isolate) {
bit_field_ = ElementsKindBits::encode(elements_kind) | set_sub_minor_key(ElementsKindBits::encode(elements_kind) |
IsJSArrayBits::encode(is_js_array); IsJSArrayBits::encode(is_js_array));
} }
bool is_js_array() const { bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); }
return IsJSArrayBits::decode(bit_field_);
}
ElementsKind elements_kind() const { ElementsKind elements_kind() const {
return ElementsKindBits::decode(bit_field_); return ElementsKindBits::decode(sub_minor_key());
} }
virtual Handle<Code> GenerateCode() V8_OVERRIDE; virtual Handle<Code> GenerateCode() V8_OVERRIDE;
...@@ -2129,12 +2125,10 @@ class LoadFastElementStub : public HydrogenCodeStub { ...@@ -2129,12 +2125,10 @@ class LoadFastElementStub : public HydrogenCodeStub {
CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
private: private:
virtual Major MajorKey() const V8_OVERRIDE { return LoadElement; }
class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
class IsJSArrayBits: public BitField<bool, 8, 1> {}; class IsJSArrayBits: public BitField<bool, 8, 1> {};
uint32_t bit_field_;
virtual Major MajorKey() const V8_OVERRIDE { return LoadElement; }
int NotMissMinorKey() const { return bit_field_; }
DISALLOW_COPY_AND_ASSIGN(LoadFastElementStub); DISALLOW_COPY_AND_ASSIGN(LoadFastElementStub);
}; };
...@@ -2145,21 +2139,19 @@ class StoreFastElementStub : public HydrogenCodeStub { ...@@ -2145,21 +2139,19 @@ class StoreFastElementStub : public HydrogenCodeStub {
StoreFastElementStub(Isolate* isolate, bool is_js_array, StoreFastElementStub(Isolate* isolate, bool is_js_array,
ElementsKind elements_kind, KeyedAccessStoreMode mode) ElementsKind elements_kind, KeyedAccessStoreMode mode)
: HydrogenCodeStub(isolate) { : HydrogenCodeStub(isolate) {
bit_field_ = ElementsKindBits::encode(elements_kind) | set_sub_minor_key(ElementsKindBits::encode(elements_kind) |
IsJSArrayBits::encode(is_js_array) | IsJSArrayBits::encode(is_js_array) |
StoreModeBits::encode(mode); StoreModeBits::encode(mode));
} }
bool is_js_array() const { bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); }
return IsJSArrayBits::decode(bit_field_);
}
ElementsKind elements_kind() const { ElementsKind elements_kind() const {
return ElementsKindBits::decode(bit_field_); return ElementsKindBits::decode(sub_minor_key());
} }
KeyedAccessStoreMode store_mode() const { KeyedAccessStoreMode store_mode() const {
return StoreModeBits::decode(bit_field_); return StoreModeBits::decode(sub_minor_key());
} }
virtual Handle<Code> GenerateCode() V8_OVERRIDE; virtual Handle<Code> GenerateCode() V8_OVERRIDE;
...@@ -2168,13 +2160,11 @@ class StoreFastElementStub : public HydrogenCodeStub { ...@@ -2168,13 +2160,11 @@ class StoreFastElementStub : public HydrogenCodeStub {
CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
private: private:
virtual Major MajorKey() const V8_OVERRIDE { return StoreElement; }
class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
class StoreModeBits: public BitField<KeyedAccessStoreMode, 8, 4> {}; class StoreModeBits: public BitField<KeyedAccessStoreMode, 8, 4> {};
class IsJSArrayBits: public BitField<bool, 12, 1> {}; class IsJSArrayBits: public BitField<bool, 12, 1> {};
uint32_t bit_field_;
virtual Major MajorKey() const V8_OVERRIDE { return StoreElement; }
int NotMissMinorKey() const { return bit_field_; }
DISALLOW_COPY_AND_ASSIGN(StoreFastElementStub); DISALLOW_COPY_AND_ASSIGN(StoreFastElementStub);
}; };
...@@ -2186,22 +2176,18 @@ class TransitionElementsKindStub : public HydrogenCodeStub { ...@@ -2186,22 +2176,18 @@ class TransitionElementsKindStub : public HydrogenCodeStub {
ElementsKind from_kind, ElementsKind from_kind,
ElementsKind to_kind, ElementsKind to_kind,
bool is_js_array) : HydrogenCodeStub(isolate) { bool is_js_array) : HydrogenCodeStub(isolate) {
bit_field_ = FromKindBits::encode(from_kind) | set_sub_minor_key(FromKindBits::encode(from_kind) |
ToKindBits::encode(to_kind) | ToKindBits::encode(to_kind) |
IsJSArrayBits::encode(is_js_array); IsJSArrayBits::encode(is_js_array));
} }
ElementsKind from_kind() const { ElementsKind from_kind() const {
return FromKindBits::decode(bit_field_); return FromKindBits::decode(sub_minor_key());
} }
ElementsKind to_kind() const { ElementsKind to_kind() const { return ToKindBits::decode(sub_minor_key()); }
return ToKindBits::decode(bit_field_);
}
bool is_js_array() const { bool is_js_array() const { return IsJSArrayBits::decode(sub_minor_key()); }
return IsJSArrayBits::decode(bit_field_);
}
virtual Handle<Code> GenerateCode() V8_OVERRIDE; virtual Handle<Code> GenerateCode() V8_OVERRIDE;
...@@ -2209,13 +2195,11 @@ class TransitionElementsKindStub : public HydrogenCodeStub { ...@@ -2209,13 +2195,11 @@ class TransitionElementsKindStub : public HydrogenCodeStub {
CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
private: private:
virtual Major MajorKey() const V8_OVERRIDE { return TransitionElementsKind; }
class FromKindBits: public BitField<ElementsKind, 8, 8> {}; class FromKindBits: public BitField<ElementsKind, 8, 8> {};
class ToKindBits: public BitField<ElementsKind, 0, 8> {}; class ToKindBits: public BitField<ElementsKind, 0, 8> {};
class IsJSArrayBits: public BitField<bool, 16, 1> {}; class IsJSArrayBits: public BitField<bool, 16, 1> {};
uint32_t bit_field_;
virtual Major MajorKey() const V8_OVERRIDE { return TransitionElementsKind; }
int NotMissMinorKey() const { return bit_field_; }
DISALLOW_COPY_AND_ASSIGN(TransitionElementsKindStub); DISALLOW_COPY_AND_ASSIGN(TransitionElementsKindStub);
}; };
...@@ -2232,16 +2216,16 @@ class ArrayConstructorStubBase : public HydrogenCodeStub { ...@@ -2232,16 +2216,16 @@ class ArrayConstructorStubBase : public HydrogenCodeStub {
// for an ElementsKind and the desired usage of the stub. // for an ElementsKind and the desired usage of the stub.
DCHECK(override_mode != DISABLE_ALLOCATION_SITES || DCHECK(override_mode != DISABLE_ALLOCATION_SITES ||
AllocationSite::GetMode(kind) == TRACK_ALLOCATION_SITE); AllocationSite::GetMode(kind) == TRACK_ALLOCATION_SITE);
bit_field_ = ElementsKindBits::encode(kind) | set_sub_minor_key(ElementsKindBits::encode(kind) |
AllocationSiteOverrideModeBits::encode(override_mode); AllocationSiteOverrideModeBits::encode(override_mode));
} }
ElementsKind elements_kind() const { ElementsKind elements_kind() const {
return ElementsKindBits::decode(bit_field_); return ElementsKindBits::decode(sub_minor_key());
} }
AllocationSiteOverrideMode override_mode() const { AllocationSiteOverrideMode override_mode() const {
return AllocationSiteOverrideModeBits::decode(bit_field_); return AllocationSiteOverrideModeBits::decode(sub_minor_key());
} }
static void GenerateStubsAheadOfTime(Isolate* isolate); static void GenerateStubsAheadOfTime(Isolate* isolate);
...@@ -2255,15 +2239,12 @@ class ArrayConstructorStubBase : public HydrogenCodeStub { ...@@ -2255,15 +2239,12 @@ class ArrayConstructorStubBase : public HydrogenCodeStub {
OStream& BasePrintName(OStream& os, const char* name) const; // NOLINT OStream& BasePrintName(OStream& os, const char* name) const; // NOLINT
private: private:
int NotMissMinorKey() const { return bit_field_; }
// Ensure data fits within available bits. // Ensure data fits within available bits.
STATIC_ASSERT(LAST_ALLOCATION_SITE_OVERRIDE_MODE == 1); STATIC_ASSERT(LAST_ALLOCATION_SITE_OVERRIDE_MODE == 1);
class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
class AllocationSiteOverrideModeBits: public class AllocationSiteOverrideModeBits: public
BitField<AllocationSiteOverrideMode, 8, 1> {}; // NOLINT BitField<AllocationSiteOverrideMode, 8, 1> {}; // NOLINT
uint32_t bit_field_;
DISALLOW_COPY_AND_ASSIGN(ArrayConstructorStubBase); DISALLOW_COPY_AND_ASSIGN(ArrayConstructorStubBase);
}; };
...@@ -2354,7 +2335,7 @@ class InternalArrayConstructorStubBase : public HydrogenCodeStub { ...@@ -2354,7 +2335,7 @@ class InternalArrayConstructorStubBase : public HydrogenCodeStub {
public: public:
InternalArrayConstructorStubBase(Isolate* isolate, ElementsKind kind) InternalArrayConstructorStubBase(Isolate* isolate, ElementsKind kind)
: HydrogenCodeStub(isolate) { : HydrogenCodeStub(isolate) {
kind_ = kind; set_sub_minor_key(ElementsKindBits::encode(kind));
} }
static void GenerateStubsAheadOfTime(Isolate* isolate); static void GenerateStubsAheadOfTime(Isolate* isolate);
...@@ -2363,12 +2344,12 @@ class InternalArrayConstructorStubBase : public HydrogenCodeStub { ...@@ -2363,12 +2344,12 @@ class InternalArrayConstructorStubBase : public HydrogenCodeStub {
// Parameters accessed via CodeStubGraphBuilder::GetParameter() // Parameters accessed via CodeStubGraphBuilder::GetParameter()
static const int kConstructor = 0; static const int kConstructor = 0;
ElementsKind elements_kind() const { return kind_; } ElementsKind elements_kind() const {
return ElementsKindBits::decode(sub_minor_key());
}
private: private:
int NotMissMinorKey() const { return kind_; } class ElementsKindBits : public BitField<ElementsKind, 0, 8> {};
ElementsKind kind_;
DISALLOW_COPY_AND_ASSIGN(InternalArrayConstructorStubBase); DISALLOW_COPY_AND_ASSIGN(InternalArrayConstructorStubBase);
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment