Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(425)

Unified Diff: src/code-stubs.h

Issue 528773002: Sub-minor-key-ify HandlerStubs. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/code-stubs.h
diff --git a/src/code-stubs.h b/src/code-stubs.h
index 5bc59f46f87da7213d22e90d9792a2bea7c58a31..a66d02ff00f051997bf44a2af9ce1586626d9ebd 100644
--- a/src/code-stubs.h
+++ b/src/code-stubs.h
@@ -438,8 +438,9 @@ class HydrogenCodeStub : public CodeStub {
static const int kSubMinorKeyBits = kStubMinorKeyBits - 1;
- private:
class SubMinorKeyBits : public BitField<int, 0, kSubMinorKeyBits> {};
+
+ private:
class IsMissBits : public BitField<bool, kSubMinorKeyBits, 1> {};
void GenerateLightweightMiss(MacroAssembler* masm);
@@ -897,25 +898,27 @@ class HandlerStub : public HydrogenCodeStub {
CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE;
protected:
- explicit HandlerStub(Isolate* isolate)
- : HydrogenCodeStub(isolate), bit_field_(0) {}
- virtual int NotMissMinorKey() const { return bit_field_; }
+ explicit HandlerStub(Isolate* isolate) : HydrogenCodeStub(isolate) {}
virtual Code::Kind kind() const = 0;
- int bit_field_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(HandlerStub);
};
class LoadFieldStub: public HandlerStub {
public:
- LoadFieldStub(Isolate* isolate, FieldIndex index)
- : HandlerStub(isolate), index_(index) {
- int property_index_key = index_.GetFieldAccessStubKey();
- bit_field_ = EncodedLoadFieldByIndexBits::encode(property_index_key);
+ LoadFieldStub(Isolate* isolate, FieldIndex index) : HandlerStub(isolate) {
+ int property_index_key = index.GetFieldAccessStubKey();
+ set_sub_minor_key(LoadFieldByIndexBits::encode(property_index_key));
}
virtual Handle<Code> GenerateCode() V8_OVERRIDE;
- FieldIndex index() const { return index_; }
+ FieldIndex index() const {
+ int property_index_key = LoadFieldByIndexBits::decode(sub_minor_key());
+ return FieldIndex::FromFieldAccessStubKey(property_index_key);
+ }
protected:
explicit LoadFieldStub(Isolate* isolate);
@@ -923,21 +926,26 @@ class LoadFieldStub: public HandlerStub {
virtual Code::StubType GetStubType() { return Code::FAST; }
private:
- class EncodedLoadFieldByIndexBits : public BitField<int, 0, 13> {};
virtual Major MajorKey() const V8_OVERRIDE { return LoadField; }
- FieldIndex index_;
+
+ class LoadFieldByIndexBits : public BitField<int, 0, 13> {};
+
+ DISALLOW_COPY_AND_ASSIGN(LoadFieldStub);
};
class LoadConstantStub : public HandlerStub {
public:
- LoadConstantStub(Isolate* isolate, int descriptor) : HandlerStub(isolate) {
- bit_field_ = descriptor;
+ LoadConstantStub(Isolate* isolate, int constant_index)
+ : HandlerStub(isolate) {
+ set_sub_minor_key(ConstantIndexBits::encode(constant_index));
}
virtual Handle<Code> GenerateCode() V8_OVERRIDE;
- int descriptor() const { return bit_field_; }
+ int constant_index() const {
+ return ConstantIndexBits::decode(sub_minor_key());
+ }
protected:
explicit LoadConstantStub(Isolate* isolate);
@@ -946,6 +954,10 @@ class LoadConstantStub : public HandlerStub {
private:
virtual Major MajorKey() const V8_OVERRIDE { return LoadConstant; }
+
+ class ConstantIndexBits : public BitField<int, 0, kSubMinorKeyBits> {};
+
+ DISALLOW_COPY_AND_ASSIGN(LoadConstantStub);
};
@@ -960,6 +972,8 @@ class StringLengthStub: public HandlerStub {
private:
virtual Major MajorKey() const V8_OVERRIDE { return StringLength; }
+
+ DISALLOW_COPY_AND_ASSIGN(StringLengthStub);
};
@@ -967,17 +981,25 @@ class StoreFieldStub : public HandlerStub {
public:
StoreFieldStub(Isolate* isolate, FieldIndex index,
Representation representation)
- : HandlerStub(isolate), index_(index), representation_(representation) {
- int property_index_key = index_.GetFieldAccessStubKey();
- bit_field_ = EncodedStoreFieldByIndexBits::encode(property_index_key) |
- RepresentationBits::encode(
- PropertyDetails::EncodeRepresentation(representation));
+ : HandlerStub(isolate) {
+ int property_index_key = index.GetFieldAccessStubKey();
+ uint8_t repr = PropertyDetails::EncodeRepresentation(representation);
+ set_sub_minor_key(StoreFieldByIndexBits::encode(property_index_key) |
+ RepresentationBits::encode(repr));
}
virtual Handle<Code> GenerateCode() V8_OVERRIDE;
- FieldIndex index() const { return index_; }
- Representation representation() { return representation_; }
+ FieldIndex index() const {
+ int property_index_key = StoreFieldByIndexBits::decode(sub_minor_key());
+ return FieldIndex::FromFieldAccessStubKey(property_index_key);
+ }
+
+ Representation representation() {
+ uint8_t repr = RepresentationBits::decode(sub_minor_key());
+ return PropertyDetails::DecodeRepresentation(repr);
+ }
+
static void InstallDescriptors(Isolate* isolate);
protected:
@@ -986,11 +1008,12 @@ class StoreFieldStub : public HandlerStub {
virtual Code::StubType GetStubType() { return Code::FAST; }
private:
- class EncodedStoreFieldByIndexBits : public BitField<int, 0, 13> {};
- class RepresentationBits : public BitField<int, 13, 4> {};
virtual Major MajorKey() const V8_OVERRIDE { return StoreField; }
- FieldIndex index_;
- Representation representation_;
+
+ class StoreFieldByIndexBits : public BitField<int, 0, 13> {};
+ class RepresentationBits : public BitField<uint8_t, 13, 4> {};
+
+ DISALLOW_COPY_AND_ASSIGN(StoreFieldStub);
};
@@ -998,8 +1021,8 @@ class StoreGlobalStub : public HandlerStub {
public:
StoreGlobalStub(Isolate* isolate, bool is_constant, bool check_global)
: HandlerStub(isolate) {
- bit_field_ = IsConstantBits::encode(is_constant) |
- CheckGlobalBits::encode(check_global);
+ set_sub_minor_key(IsConstantBits::encode(is_constant) |
+ CheckGlobalBits::encode(check_global));
}
static Handle<HeapObject> global_placeholder(Isolate* isolate) {
@@ -1025,21 +1048,21 @@ class StoreGlobalStub : public HandlerStub {
virtual Handle<Code> GenerateCode() V8_OVERRIDE;
- bool is_constant() const {
- return IsConstantBits::decode(bit_field_);
- }
- bool check_global() const {
- return CheckGlobalBits::decode(bit_field_);
- }
+ bool is_constant() const { return IsConstantBits::decode(sub_minor_key()); }
+
+ bool check_global() const { return CheckGlobalBits::decode(sub_minor_key()); }
+
void set_is_constant(bool value) {
- bit_field_ = IsConstantBits::update(bit_field_, value);
+ set_sub_minor_key(IsConstantBits::update(sub_minor_key(), value));
}
Representation representation() {
- return Representation::FromKind(RepresentationBits::decode(bit_field_));
+ return Representation::FromKind(
+ RepresentationBits::decode(sub_minor_key()));
}
+
void set_representation(Representation r) {
- bit_field_ = RepresentationBits::update(bit_field_, r.kind());
+ set_sub_minor_key(RepresentationBits::update(sub_minor_key(), r.kind()));
}
private:
« no previous file with comments | « no previous file | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698