Index: src/ic.h |
diff --git a/src/ic.h b/src/ic.h |
index 904ab184d231f34b6d831bd25b0869e3099540d3..41882e66890809936332c66762d85094bd4756c4 100644 |
--- a/src/ic.h |
+++ b/src/ic.h |
@@ -42,7 +42,6 @@ const int kMaxKeyedPolymorphism = 4; |
#define IC_UTIL_LIST(ICU) \ |
ICU(LoadIC_Miss) \ |
ICU(KeyedLoadIC_Miss) \ |
- ICU(CallIC_Miss) \ |
ICU(StoreIC_Miss) \ |
ICU(StoreIC_ArrayLength) \ |
ICU(StoreIC_Slow) \ |
@@ -120,10 +119,6 @@ class IC { |
bool IsStoreStub() const { |
return target()->is_store_stub() || target()->is_keyed_store_stub(); |
} |
- |
- bool IsCallStub() const { |
- return target()->is_call_stub(); |
- } |
#endif |
// Determines which map must be used for keeping the code stub. |
@@ -344,128 +339,6 @@ class IC_Utility { |
}; |
-class CallIC: public IC { |
- public: |
- enum CallType { METHOD, FUNCTION }; |
- enum StubType { DEFAULT, MONOMORPHIC }; |
- enum ArgumentCheck { ARGUMENTS_MUST_MATCH, ARGUMENTS_COUNT_UNKNOWN }; |
- |
- class State V8_FINAL BASE_EMBEDDED { |
- public: |
- explicit State(ExtraICState extra_ic_state); |
- |
- static State MonomorphicCallState(int argc, CallType call_type, |
- ArgumentCheck argument_check, |
- StrictMode strict_mode) { |
- return State(argc, call_type, MONOMORPHIC, argument_check, strict_mode); |
- } |
- |
- static State SlowCallState(int argc, CallType call_type) { |
- return State(argc, call_type, DEFAULT, ARGUMENTS_COUNT_UNKNOWN, |
- SLOPPY); |
- } |
- |
- static State DefaultCallState(int argc, CallType call_type) { |
- return State(argc, call_type, DEFAULT, ARGUMENTS_MUST_MATCH, |
- SLOPPY); |
- } |
- |
- // Transition from the current state to another. |
- State ToGenericState(); |
- State ToMonomorphicState(Handle<JSFunction> function); |
- |
- InlineCacheState GetICState() const { |
- return stub_type_ == CallIC::MONOMORPHIC |
- ? ::v8::internal::MONOMORPHIC |
- : ::v8::internal::GENERIC; |
- } |
- |
- ExtraICState GetExtraICState() const; |
- |
- static void GenerateAheadOfTime( |
- Isolate*, void (*Generate)(Isolate*, const State&)); |
- |
- int arg_count() const { return argc_; } |
- CallType call_type() const { return call_type_; } |
- StubType stub_type() const { return stub_type_; } |
- ArgumentCheck argument_check() const { return argument_check_; } |
- StrictMode strict_mode() const { |
- return strict_mode_; |
- } |
- |
- bool ArgumentsMustMatch() const { |
- return argument_check_ == ARGUMENTS_MUST_MATCH; |
- } |
- bool IsGeneric() const { return stub_type_ == DEFAULT; } |
- bool CallAsMethod() const { return call_type_ == METHOD; } |
- bool IsSloppy() const { |
- return strict_mode_ == SLOPPY; |
- } |
- |
- void Print(StringStream* stream) const; |
- |
- bool operator==(const State& other_state) const { |
- return (argc_ == other_state.argc_ && |
- call_type_ == other_state.call_type_ && |
- stub_type_ == other_state.stub_type_ && |
- argument_check_ == other_state.argument_check_ && |
- strict_mode_ == other_state.strict_mode_); |
- } |
- |
- bool operator!=(const State& other_state) const { |
- return !(*this == other_state); |
- } |
- |
- private: |
- State(int argc, |
- CallType call_type, |
- StubType stub_type, |
- ArgumentCheck argument_check, |
- StrictMode strict_mode) |
- : argc_(argc), |
- call_type_(call_type), |
- stub_type_(stub_type), |
- argument_check_(argument_check), |
- strict_mode_(strict_mode) { |
- } |
- |
- class ArgcBits: public BitField<int, 0, Code::kArgumentsBits> {}; |
- class CallTypeBits: public BitField<CallType, Code::kArgumentsBits, 1> {}; |
- class StubTypeBits: |
- public BitField<StubType, Code::kArgumentsBits + 1, 1> {}; // NOLINT |
- class ArgumentCheckBits: |
- public BitField<ArgumentCheck, |
- Code::kArgumentsBits + 2, 1> {}; // NOLINT |
- class StrictModeBits: |
- public BitField<StrictMode, |
- Code::kArgumentsBits + 3, 1> {}; // NOLINT |
- |
- const int argc_; |
- const CallType call_type_; |
- const StubType stub_type_; |
- const ArgumentCheck argument_check_; |
- const StrictMode strict_mode_; |
- }; |
- |
- explicit CallIC(Isolate* isolate) |
- : IC(EXTRA_CALL_FRAME, isolate) { |
- } |
- |
- void HandleMiss(Handle<Object> receiver, |
- Handle<Object> function, |
- Handle<FixedArray> vector, |
- Handle<Smi> slot); |
- |
- // Code generator routines. |
- static Handle<Code> initialize_stub(Isolate* isolate, |
- int argc, |
- CallType call_type); |
- |
- static void Clear(Isolate* isolate, Address address, Code* target, |
- ConstantPoolArray* constant_pool); |
-}; |
- |
- |
class LoadIC: public IC { |
public: |
// ExtraICState bits |