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

Unified Diff: src/code-stubs.h

Issue 300283002: Introduce FieldIndex to unify and abstract property/field offset (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix mutable boxed double runtime function Created 6 years, 6 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 | « src/bootstrapper.cc ('k') | 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 4a93f9920ad7409b70448c216a789864264a6ada..55d8b885c842326f219eb816289bb42e3f36c965 100644
--- a/src/code-stubs.h
+++ b/src/code-stubs.h
@@ -897,11 +897,9 @@ class HandlerStub: public HICStub {
class LoadFieldStub: public HandlerStub {
public:
- LoadFieldStub(Isolate* isolate,
- bool inobject,
- int index, Representation representation)
- : HandlerStub(isolate) {
- Initialize(Code::LOAD_IC, inobject, index, representation);
+ LoadFieldStub(Isolate* isolate, FieldIndex index)
+ : HandlerStub(isolate), index_(index) {
+ Initialize(Code::LOAD_IC);
}
virtual Handle<Code> GenerateCode() V8_OVERRIDE;
@@ -918,42 +916,30 @@ class LoadFieldStub: public HandlerStub {
return KindBits::decode(bit_field_);
}
- bool is_inobject() {
- return InobjectBits::decode(bit_field_);
- }
-
- int offset() {
- int index = IndexBits::decode(bit_field_);
- int offset = index * kPointerSize;
- if (is_inobject()) return offset;
- return FixedArray::kHeaderSize + offset;
- }
+ FieldIndex index() const { return index_; }
bool unboxed_double() {
- return UnboxedDoubleBits::decode(bit_field_);
+ return index_.is_double();
}
virtual Code::StubType GetStubType() { return Code::FAST; }
protected:
- explicit LoadFieldStub(Isolate* isolate) : HandlerStub(isolate) { }
+ explicit LoadFieldStub(Isolate* isolate);
- void Initialize(Code::Kind kind,
- bool inobject,
- int index,
- Representation representation) {
- bit_field_ = KindBits::encode(kind)
- | InobjectBits::encode(inobject)
- | IndexBits::encode(index)
- | UnboxedDoubleBits::encode(representation.IsDouble());
+ 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);
}
private:
STATIC_ASSERT(KindBits::kSize == 4);
- class InobjectBits: public BitField<bool, 4, 1> {};
- class IndexBits: public BitField<int, 5, 11> {};
- class UnboxedDoubleBits: public BitField<bool, 16, 1> {};
+ class EncodedLoadFieldByIndexBits: public BitField<int, 4, 13> {};
virtual CodeStub::Major MajorKey() { return LoadField; }
+ FieldIndex index_;
};
@@ -1098,11 +1084,9 @@ class CallApiGetterStub : public PlatformCodeStub {
class KeyedLoadFieldStub: public LoadFieldStub {
public:
- KeyedLoadFieldStub(Isolate* isolate,
- bool inobject,
- int index, Representation representation)
- : LoadFieldStub(isolate) {
- Initialize(Code::KEYED_LOAD_IC, inobject, index, representation);
+ KeyedLoadFieldStub(Isolate* isolate, FieldIndex index)
+ : LoadFieldStub(isolate, index) {
+ Initialize(Code::KEYED_LOAD_IC);
}
virtual void InitializeInterfaceDescriptor(
« no previous file with comments | « src/bootstrapper.cc ('k') | src/code-stubs-hydrogen.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698