Index: src/code-stubs.h |
=================================================================== |
--- src/code-stubs.h (revision 9957) |
+++ src/code-stubs.h (working copy) |
@@ -193,6 +193,17 @@ |
return UNINITIALIZED; |
} |
+ // Add the code to a specialized cache, specific to an individual |
+ // stub type. Please note, this method must add the code object to a |
+ // roots object, otherwise we will remove the code during GC. |
+ virtual void AddToSpecialCache(Handle<Code> new_object) { } |
+ |
+ // Find code in a specialized cache, work is delegated to the specific stub. |
+ virtual bool FindCodeInSpecialCache(Code** code_out) { return false; } |
+ |
+ // If a stub uses a special cache override this. |
+ virtual bool UseSpecialCache() { return false; } |
+ |
// Returns a name for logging/debugging purposes. |
SmartArrayPointer<const char> GetName(); |
virtual void PrintName(StringStream* stream); |
@@ -437,6 +448,8 @@ |
virtual void Generate(MacroAssembler* masm); |
+ void set_known_map(Handle<Map> map) { known_map_ = map; } |
+ |
private: |
class OpField: public BitField<int, 0, 3> { }; |
class StateField: public BitField<int, 3, 5> { }; |
@@ -454,12 +467,18 @@ |
void GenerateStrings(MacroAssembler* masm); |
void GenerateObjects(MacroAssembler* masm); |
void GenerateMiss(MacroAssembler* masm); |
+ void GenerateKnownObjects(MacroAssembler* masm); |
bool strict() const { return op_ == Token::EQ_STRICT; } |
Condition GetCondition() const { return CompareIC::ComputeCondition(op_); } |
+ virtual void AddToSpecialCache(Handle<Code> new_object); |
+ virtual bool FindCodeInSpecialCache(Code** code_out); |
+ virtual bool UseSpecialCache() { return state_ == CompareIC::KNOWN_OBJECTS; } |
+ |
Token::Value op_; |
CompareIC::State state_; |
+ Handle<Map> known_map_; |
}; |