Index: src/ic/ic.h |
diff --git a/src/ic/ic.h b/src/ic/ic.h |
index 15479371cb6f80e217309bd801f222add71b0637..25081edbfb15633c87aea79d85b1bf5f97f7c0ac 100644 |
--- a/src/ic/ic.h |
+++ b/src/ic/ic.h |
@@ -84,6 +84,7 @@ class IC { |
// Clear the inline cache to initial state. |
static void Clear(Isolate* isolate, Address address, |
+ TypeFeedbackVector* vector, FeedbackVectorICSlot slot, |
ConstantPoolArray* constant_pool); |
#ifdef DEBUG |
@@ -294,26 +295,39 @@ class CallIC : public IC { |
explicit CallIC(Isolate* isolate) : IC(EXTRA_CALL_FRAME, isolate) {} |
void PatchMegamorphic(Handle<Object> function, |
- Handle<TypeFeedbackVector> vector, Handle<Smi> slot); |
+ Handle<TypeFeedbackVector> vector, |
+ FeedbackVectorICSlot slot); |
void HandleMiss(Handle<Object> receiver, Handle<Object> function, |
- Handle<TypeFeedbackVector> vector, Handle<Smi> slot); |
+ Handle<TypeFeedbackVector> vector, FeedbackVectorICSlot slot); |
// Returns true if a custom handler was installed. |
bool DoCustomHandler(Handle<Object> receiver, Handle<Object> function, |
- Handle<TypeFeedbackVector> vector, Handle<Smi> slot, |
- const CallICState& state); |
+ Handle<TypeFeedbackVector> vector, |
+ FeedbackVectorICSlot slot, const CallICState& state); |
// Code generator routines. |
static Handle<Code> initialize_stub(Isolate* isolate, int argc, |
CallICState::CallType call_type); |
static void Clear(Isolate* isolate, Address address, Code* target, |
+ TypeFeedbackVector* vector, FeedbackVectorICSlot slot, |
ConstantPoolArray* constant_pool); |
private: |
+ static inline IC::State FeedbackToState(Isolate* isolate, |
+ TypeFeedbackVector* vector, |
+ FeedbackVectorICSlot slot); |
+ |
inline IC::State FeedbackToState(Handle<TypeFeedbackVector> vector, |
- Handle<Smi> slot) const; |
+ FeedbackVectorICSlot slot) const; |
+ |
+ // As a vector-based IC, type feedback must be updated differently. |
+ static void OnTypeFeedbackChanged(Isolate* isolate, Address address, |
+ TypeFeedbackVector* vector, State old_state, |
+ State new_state); |
+ inline void OnTypeFeedbackChanged(Handle<TypeFeedbackVector> vector, |
+ State old_state, State new_state); |
}; |
@@ -389,6 +403,7 @@ class LoadIC : public IC { |
Handle<Code> SimpleFieldLoad(FieldIndex index); |
static void Clear(Isolate* isolate, Address address, Code* target, |
+ TypeFeedbackVector* vector, FeedbackVectorICSlot slot, |
ConstantPoolArray* constant_pool); |
friend class IC; |
@@ -440,6 +455,7 @@ class KeyedLoadIC : public LoadIC { |
} |
static void Clear(Isolate* isolate, Address address, Code* target, |
+ TypeFeedbackVector* vector, FeedbackVectorICSlot slot, |
ConstantPoolArray* constant_pool); |
friend class IC; |