| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_IC_H_ | 5 #ifndef V8_IC_H_ |
| 6 #define V8_IC_H_ | 6 #define V8_IC_H_ |
| 7 | 7 |
| 8 #include "src/ic/ic-state.h" | 8 #include "src/ic/ic-state.h" |
| 9 #include "src/macro-assembler.h" | 9 #include "src/macro-assembler.h" |
| 10 | 10 |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 | 407 |
| 408 // Code generator routines. | 408 // Code generator routines. |
| 409 static void GenerateMiss(MacroAssembler* masm); | 409 static void GenerateMiss(MacroAssembler* masm); |
| 410 static void GenerateRuntimeGetProperty(MacroAssembler* masm); | 410 static void GenerateRuntimeGetProperty(MacroAssembler* masm); |
| 411 static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); } | 411 static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); } |
| 412 static void GeneratePreMonomorphic(MacroAssembler* masm) { | 412 static void GeneratePreMonomorphic(MacroAssembler* masm) { |
| 413 GenerateMiss(masm); | 413 GenerateMiss(masm); |
| 414 } | 414 } |
| 415 static void GenerateGeneric(MacroAssembler* masm); | 415 static void GenerateGeneric(MacroAssembler* masm); |
| 416 static void GenerateString(MacroAssembler* masm); | 416 static void GenerateString(MacroAssembler* masm); |
| 417 static void GenerateIndexedInterceptor(MacroAssembler* masm); | |
| 418 static void GenerateSloppyArguments(MacroAssembler* masm); | 417 static void GenerateSloppyArguments(MacroAssembler* masm); |
| 419 | 418 |
| 420 // Bit mask to be tested against bit field for the cases when | 419 // Bit mask to be tested against bit field for the cases when |
| 421 // generic stub should go into slow case. | 420 // generic stub should go into slow case. |
| 422 // Access check is necessary explicitly since generic stub does not perform | 421 // Access check is necessary explicitly since generic stub does not perform |
| 423 // map checks. | 422 // map checks. |
| 424 static const int kSlowCaseBitFieldMask = | 423 static const int kSlowCaseBitFieldMask = |
| 425 (1 << Map::kIsAccessCheckNeeded) | (1 << Map::kHasIndexedInterceptor); | 424 (1 << Map::kIsAccessCheckNeeded) | (1 << Map::kHasIndexedInterceptor); |
| 426 | 425 |
| 427 static Handle<Code> generic_stub(Isolate* isolate); | 426 static Handle<Code> generic_stub(Isolate* isolate); |
| 428 static Handle<Code> pre_monomorphic_stub(Isolate* isolate); | 427 static Handle<Code> pre_monomorphic_stub(Isolate* isolate); |
| 429 | 428 |
| 430 protected: | 429 protected: |
| 431 Handle<Code> LoadElementStub(Handle<JSObject> receiver); | 430 Handle<Code> LoadElementStub(Handle<JSObject> receiver); |
| 432 virtual Handle<Code> pre_monomorphic_stub() const { | 431 virtual Handle<Code> pre_monomorphic_stub() const { |
| 433 return pre_monomorphic_stub(isolate()); | 432 return pre_monomorphic_stub(isolate()); |
| 434 } | 433 } |
| 435 | 434 |
| 436 private: | 435 private: |
| 437 Handle<Code> generic_stub() const { return generic_stub(isolate()); } | 436 Handle<Code> generic_stub() const { return generic_stub(isolate()); } |
| 438 Handle<Code> indexed_interceptor_stub() { | |
| 439 return isolate()->builtins()->KeyedLoadIC_IndexedInterceptor(); | |
| 440 } | |
| 441 Handle<Code> sloppy_arguments_stub() { | 437 Handle<Code> sloppy_arguments_stub() { |
| 442 return isolate()->builtins()->KeyedLoadIC_SloppyArguments(); | 438 return isolate()->builtins()->KeyedLoadIC_SloppyArguments(); |
| 443 } | 439 } |
| 444 Handle<Code> string_stub() { | 440 Handle<Code> string_stub() { |
| 445 return isolate()->builtins()->KeyedLoadIC_String(); | 441 return isolate()->builtins()->KeyedLoadIC_String(); |
| 446 } | 442 } |
| 447 | 443 |
| 448 static void Clear(Isolate* isolate, Address address, Code* target, | 444 static void Clear(Isolate* isolate, Address address, Code* target, |
| 449 ConstantPoolArray* constant_pool); | 445 ConstantPoolArray* constant_pool); |
| 450 | 446 |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 | 713 |
| 718 // Support functions for interceptor handlers. | 714 // Support functions for interceptor handlers. |
| 719 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptorOnly); | 715 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptorOnly); |
| 720 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptor); | 716 DECLARE_RUNTIME_FUNCTION(LoadPropertyWithInterceptor); |
| 721 DECLARE_RUNTIME_FUNCTION(LoadElementWithInterceptor); | 717 DECLARE_RUNTIME_FUNCTION(LoadElementWithInterceptor); |
| 722 DECLARE_RUNTIME_FUNCTION(StorePropertyWithInterceptor); | 718 DECLARE_RUNTIME_FUNCTION(StorePropertyWithInterceptor); |
| 723 } | 719 } |
| 724 } // namespace v8::internal | 720 } // namespace v8::internal |
| 725 | 721 |
| 726 #endif // V8_IC_H_ | 722 #endif // V8_IC_H_ |
| OLD | NEW |