Index: src/code-stubs.h |
diff --git a/src/code-stubs.h b/src/code-stubs.h |
index cd90b70e9073e16ea5cf6dcde29f8120d3483630..cf2119fcf6de941093e060f493e85c7a984e4531 100644 |
--- a/src/code-stubs.h |
+++ b/src/code-stubs.h |
@@ -80,7 +80,9 @@ namespace internal { |
V(TransitionElementsKind) \ |
V(StoreArrayLiteralElement) \ |
V(StubFailureTrampoline) \ |
- V(ProfileEntryHook) |
+ V(ProfileEntryHook) \ |
+ /* IC Handler stubs */ \ |
+ V(LoadField) |
// List of code stubs only used on ARM platforms. |
#ifdef V8_TARGET_ARCH_ARM |
@@ -185,6 +187,9 @@ class CodeStub BASE_EMBEDDED { |
virtual Code::ExtraICState GetExtraICState() { |
return Code::kNoExtraICState; |
} |
+ virtual Code::StubType GetStubType() { |
+ return Code::NORMAL; |
+ } |
// Returns whether the code generated for this stub needs to be allocated as |
// a fixed (non-moveable) code object. |
@@ -649,6 +654,46 @@ class StoreArrayLengthStub: public StoreICStub { |
}; |
+class HandlerStub: public ICStub { |
+ public: |
+ explicit HandlerStub(Code::Kind kind) : ICStub(kind) { } |
+ |
+ protected: |
+ virtual Code::ExtraICState GetExtraICState() { |
+ return Code::HANDLER_FRAGMENT; |
+ } |
+}; |
+ |
+ |
+class LoadFieldStub: public HandlerStub { |
+ public: |
+ enum FieldMode { HEADER, INOBJECT, PROPERTIES }; |
+ LoadFieldStub(Register reg, bool inobject, int index) |
+ : HandlerStub(Code::LOAD_IC), reg_(reg), |
Jakob Kummerow
2013/03/01 22:21:04
nit: let's give each initializer statement its own
Toon Verwaest
2013/03/04 10:54:08
Done.
|
+ inobject_(inobject), index_(index) { } |
+ virtual void Generate(MacroAssembler* masm); |
+ |
+ protected: |
+ virtual Code::StubType GetStubType() { return Code::FIELD; } |
+ |
+ private: |
+ class RegisterBits: public BitField<int, 1, 4> {}; |
Jakob Kummerow
2013/03/01 22:21:04
Looks like something's wrong with those bit fields
Toon Verwaest
2013/03/04 10:54:08
Doh, what did I do there.
2**11 is a reasonable u
|
+ class InobjectBits: public BitField<bool, 6, 4> {}; |
+ class IndexBits: public BitField<int, 10, 11> {}; |
+ virtual CodeStub::Major MajorKey() { return LoadField; } |
+ virtual int MinorKey() { |
+ return HandlerStub::MinorKey() |
+ | RegisterBits::encode(reg_.code()) |
+ | InobjectBits::encode(inobject_) |
+ | IndexBits::encode(index_); |
+ } |
+ |
+ Register reg_; |
+ bool inobject_; |
+ int index_; |
+}; |
+ |
+ |
class BinaryOpStub: public PlatformCodeStub { |
public: |
BinaryOpStub(Token::Value op, OverwriteMode mode) |