Index: src/code-stubs.h |
diff --git a/src/code-stubs.h b/src/code-stubs.h |
index 7e2a4564135d0d21e249eea0c4ba6e59e5f1b001..89365b934428bf3837a72d816714fd88bbaf0a23 100644 |
--- a/src/code-stubs.h |
+++ b/src/code-stubs.h |
@@ -828,26 +828,6 @@ class MathPowStub: public PlatformCodeStub { |
}; |
-class ICStub: public PlatformCodeStub { |
- public: |
- ICStub(Isolate* isolate, Code::Kind kind) |
- : PlatformCodeStub(isolate), kind_(kind) { } |
- virtual Code::Kind GetCodeKind() const { return kind_; } |
- virtual InlineCacheState GetICState() { return MONOMORPHIC; } |
- |
- bool Describes(Code* code) { return code->stub_key() == GetKey(); } |
- |
- protected: |
- class KindBits: public BitField<Code::Kind, 0, 4> {}; |
- Code::Kind kind() const { return kind_; } |
- |
- virtual int MinorKey() const { return KindBits::encode(kind_); } |
- |
- private: |
- Code::Kind kind_; |
-}; |
- |
- |
class CallICStub: public PlatformCodeStub { |
public: |
CallICStub(Isolate* isolate, const CallIC::State& state) |
@@ -917,47 +897,16 @@ class FunctionPrototypeStub : public PlatformCodeStub { |
}; |
-class StoreICStub: public ICStub { |
- public: |
- StoreICStub(Isolate* isolate, Code::Kind kind, StrictMode strict_mode) |
- : ICStub(isolate, kind), strict_mode_(strict_mode) { } |
- |
- protected: |
- virtual ExtraICState GetExtraICState() const { |
- return StoreIC::ComputeExtraICState(strict_mode_); |
- } |
- |
- private: |
- STATIC_ASSERT(KindBits::kSize == 4); |
- class StrictModeBits: public BitField<bool, 4, 1> {}; |
- virtual int MinorKey() const { |
- return KindBits::encode(kind()) | StrictModeBits::encode(strict_mode_); |
- } |
- |
- StrictMode strict_mode_; |
-}; |
- |
- |
-class HICStub: public HydrogenCodeStub { |
- public: |
- explicit HICStub(Isolate* isolate) : HydrogenCodeStub(isolate) { } |
- virtual Code::Kind GetCodeKind() const { return kind(); } |
- virtual InlineCacheState GetICState() { return MONOMORPHIC; } |
- |
- protected: |
- class KindBits: public BitField<Code::Kind, 0, 4> {}; |
- virtual Code::Kind kind() const = 0; |
-}; |
- |
- |
-class HandlerStub: public HICStub { |
+class HandlerStub : public HydrogenCodeStub { |
public: |
virtual Code::Kind GetCodeKind() const { return Code::HANDLER; } |
virtual ExtraICState GetExtraICState() const { return kind(); } |
protected: |
- explicit HandlerStub(Isolate* isolate) : HICStub(isolate) { } |
+ explicit HandlerStub(Isolate* isolate) |
+ : HydrogenCodeStub(isolate), bit_field_(0) {} |
virtual int NotMissMinorKey() const { return bit_field_; } |
+ virtual Code::Kind kind() const = 0; |
int bit_field_; |
}; |
@@ -966,7 +915,8 @@ class LoadFieldStub: public HandlerStub { |
public: |
LoadFieldStub(Isolate* isolate, FieldIndex index) |
: HandlerStub(isolate), index_(index) { |
- Initialize(Code::LOAD_IC); |
+ int property_index_key = index_.GetLoadFieldStubKey(); |
+ bit_field_ = EncodedLoadFieldByIndexBits::encode(property_index_key); |
} |
virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
@@ -979,32 +929,16 @@ class LoadFieldStub: public HandlerStub { |
return Representation::Tagged(); |
} |
- virtual Code::Kind kind() const { |
- return KindBits::decode(bit_field_); |
- } |
- |
FieldIndex index() const { return index_; } |
- |
- bool unboxed_double() { |
- return index_.is_double(); |
- } |
- |
- virtual Code::StubType GetStubType() { return Code::FAST; } |
+ bool unboxed_double() { return index_.is_double(); } |
protected: |
explicit LoadFieldStub(Isolate* isolate); |
- |
- void Initialize(Code::Kind kind) { |
- int property_index_key = index_.GetLoadFieldStubKey(); |
- // Save a copy of the essence of the property index into the bit field to |
- // make sure that hashing of unique stubs works correctly.. |
- bit_field_ = KindBits::encode(kind) | |
- EncodedLoadFieldByIndexBits::encode(property_index_key); |
- } |
+ virtual Code::Kind kind() const { return Code::LOAD_IC; } |
+ virtual Code::StubType GetStubType() { return Code::FAST; } |
private: |
- STATIC_ASSERT(KindBits::kSize == 4); |
- class EncodedLoadFieldByIndexBits: public BitField<int, 4, 13> {}; |
+ class EncodedLoadFieldByIndexBits : public BitField<int, 0, 13> {}; |
virtual CodeStub::Major MajorKey() const { return LoadField; } |
FieldIndex index_; |
}; |
@@ -1012,21 +946,14 @@ class LoadFieldStub: public HandlerStub { |
class StringLengthStub: public HandlerStub { |
public: |
- explicit StringLengthStub(Isolate* isolate) : HandlerStub(isolate) { |
- Initialize(Code::LOAD_IC); |
- } |
+ explicit StringLengthStub(Isolate* isolate) : HandlerStub(isolate) {} |
virtual Handle<Code> GenerateCode() V8_OVERRIDE; |
virtual void InitializeInterfaceDescriptor( |
CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; |
protected: |
- virtual Code::Kind kind() const { |
- return KindBits::decode(bit_field_); |
- } |
- |
- void Initialize(Code::Kind kind) { |
- bit_field_ = KindBits::encode(kind); |
- } |
+ virtual Code::Kind kind() const { return Code::LOAD_IC; } |
+ virtual Code::StubType GetStubType() { return Code::FAST; } |
private: |
virtual CodeStub::Major MajorKey() const { return StringLength; } |