Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: src/stub-cache.h

Issue 12340112: Polymorphism support for load IC. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Added ARM port, introduced GenerateTailCall Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/property.h ('k') | src/stub-cache.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 class StubCache { 67 class StubCache {
68 public: 68 public:
69 struct Entry { 69 struct Entry {
70 String* key; 70 String* key;
71 Code* value; 71 Code* value;
72 Map* map; 72 Map* map;
73 }; 73 };
74 74
75 void Initialize(); 75 void Initialize();
76 76
77 Handle<JSObject> StubHolder(Handle<JSObject> receiver,
78 Handle<JSObject> holder);
79
80 Handle<Code> FindStub(Handle<String> name,
81 Handle<JSObject> stub_holder,
82 Code::Kind kind,
83 Code::StubType type,
84 Code::IcFragment fragment);
85
86 Handle<Code> FindHandler(Handle<String> name,
87 Handle<JSObject> stub_holder,
88 Code::Kind kind,
89 Code::StubType type);
90
91 Handle<Code> ComputeMonomorphicIC(Handle<JSObject> receiver,
92 Handle<Code> handler,
93 Handle<String> name);
94 Handle<Code> ComputeKeyedMonomorphicIC(Handle<JSObject> receiver,
95 Handle<Code> handler,
96 Handle<String> name);
77 97
78 // Computes the right stub matching. Inserts the result in the 98 // Computes the right stub matching. Inserts the result in the
79 // cache before returning. This might compile a stub if needed. 99 // cache before returning. This might compile a stub if needed.
80 Handle<Code> ComputeLoadNonexistent(Handle<String> name, 100 Handle<Code> ComputeLoadNonexistent(Handle<String> name,
81 Handle<JSObject> object); 101 Handle<JSObject> object);
82 102
83 Handle<Code> ComputeLoadField(Handle<String> name, 103 Handle<Code> ComputeLoadField(Handle<String> name,
84 Handle<JSObject> object, 104 Handle<JSObject> object,
85 Handle<JSObject> holder, 105 Handle<JSObject> holder,
86 PropertyIndex field_index); 106 PropertyIndex field_index);
(...skipping 10 matching lines...) Expand all
97 117
98 Handle<Code> ComputeLoadConstant(Handle<String> name, 118 Handle<Code> ComputeLoadConstant(Handle<String> name,
99 Handle<JSObject> object, 119 Handle<JSObject> object,
100 Handle<JSObject> holder, 120 Handle<JSObject> holder,
101 Handle<JSFunction> value); 121 Handle<JSFunction> value);
102 122
103 Handle<Code> ComputeLoadInterceptor(Handle<String> name, 123 Handle<Code> ComputeLoadInterceptor(Handle<String> name,
104 Handle<JSObject> object, 124 Handle<JSObject> object,
105 Handle<JSObject> holder); 125 Handle<JSObject> holder);
106 126
107 Handle<Code> ComputeLoadNormal(); 127 Handle<Code> ComputeLoadNormal(Handle<String> name,
128 Handle<JSObject> object);
108 129
109 Handle<Code> ComputeLoadGlobal(Handle<String> name, 130 Handle<Code> ComputeLoadGlobal(Handle<String> name,
110 Handle<JSObject> object, 131 Handle<JSObject> object,
111 Handle<GlobalObject> holder, 132 Handle<GlobalObject> holder,
112 Handle<JSGlobalPropertyCell> cell, 133 Handle<JSGlobalPropertyCell> cell,
113 bool is_dont_delete); 134 bool is_dont_delete);
114 135
115 // --- 136 // ---
116 137
117 Handle<Code> ComputeKeyedLoadField(Handle<String> name, 138 Handle<Code> ComputeKeyedLoadField(Handle<String> name,
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 Code::Kind kind, 259 Code::Kind kind,
239 Code::ExtraICState state); 260 Code::ExtraICState state);
240 261
241 // --- 262 // ---
242 263
243 Handle<Code> ComputeLoadElementPolymorphic(MapHandleList* receiver_maps); 264 Handle<Code> ComputeLoadElementPolymorphic(MapHandleList* receiver_maps);
244 Handle<Code> ComputeStoreElementPolymorphic(MapHandleList* receiver_maps, 265 Handle<Code> ComputeStoreElementPolymorphic(MapHandleList* receiver_maps,
245 KeyedAccessGrowMode grow_mode, 266 KeyedAccessGrowMode grow_mode,
246 StrictModeFlag strict_mode); 267 StrictModeFlag strict_mode);
247 268
269 Handle<Code> ComputePolymorphicIC(MapHandleList* receiver_maps,
270 CodeHandleList* handlers,
271 Handle<String> name);
272
248 // Finds the Code object stored in the Heap::non_monomorphic_cache(). 273 // Finds the Code object stored in the Heap::non_monomorphic_cache().
249 Code* FindCallInitialize(int argc, RelocInfo::Mode mode, Code::Kind kind); 274 Code* FindCallInitialize(int argc, RelocInfo::Mode mode, Code::Kind kind);
250 275
251 #ifdef ENABLE_DEBUGGER_SUPPORT 276 #ifdef ENABLE_DEBUGGER_SUPPORT
252 Handle<Code> ComputeCallDebugBreak(int argc, Code::Kind kind); 277 Handle<Code> ComputeCallDebugBreak(int argc, Code::Kind kind);
253 278
254 Handle<Code> ComputeCallDebugPrepareStepIn(int argc, Code::Kind kind); 279 Handle<Code> ComputeCallDebugPrepareStepIn(int argc, Code::Kind kind);
255 #endif 280 #endif
256 281
257 // Update cache for entry hash(name, map). 282 // Update cache for entry hash(name, map).
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 432
408 // Support functions for IC stubs for interceptors. 433 // Support functions for IC stubs for interceptors.
409 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorOnly); 434 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorOnly);
410 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForLoad); 435 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForLoad);
411 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForCall); 436 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForCall);
412 DECLARE_RUNTIME_FUNCTION(MaybeObject*, StoreInterceptorProperty); 437 DECLARE_RUNTIME_FUNCTION(MaybeObject*, StoreInterceptorProperty);
413 DECLARE_RUNTIME_FUNCTION(MaybeObject*, CallInterceptorProperty); 438 DECLARE_RUNTIME_FUNCTION(MaybeObject*, CallInterceptorProperty);
414 DECLARE_RUNTIME_FUNCTION(MaybeObject*, KeyedLoadPropertyWithInterceptor); 439 DECLARE_RUNTIME_FUNCTION(MaybeObject*, KeyedLoadPropertyWithInterceptor);
415 440
416 441
442 enum PrototypeCheckType { CHECK_ALL_MAPS, SKIP_RECEIVER };
443 enum IcCheckType { ELEMENT, PROPERTY };
444
445
417 // The stub compilers compile stubs for the stub cache. 446 // The stub compilers compile stubs for the stub cache.
418 class StubCompiler BASE_EMBEDDED { 447 class StubCompiler BASE_EMBEDDED {
419 public: 448 public:
420 explicit StubCompiler(Isolate* isolate) 449 explicit StubCompiler(Isolate* isolate)
421 : isolate_(isolate), masm_(isolate, NULL, 256), failure_(NULL) { } 450 : isolate_(isolate), masm_(isolate, NULL, 256), failure_(NULL) { }
422 451
423 // Functions to compile either CallIC or KeyedCallIC. The specific kind 452 // Functions to compile either CallIC or KeyedCallIC. The specific kind
424 // is extracted from the code flags. 453 // is extracted from the code flags.
425 Handle<Code> CompileCallInitialize(Code::Flags flags); 454 Handle<Code> CompileCallInitialize(Code::Flags flags);
426 Handle<Code> CompileCallPreMonomorphic(Code::Flags flags); 455 Handle<Code> CompileCallPreMonomorphic(Code::Flags flags);
(...skipping 21 matching lines...) Expand all
448 static void GenerateDirectLoadGlobalFunctionPrototype(MacroAssembler* masm, 477 static void GenerateDirectLoadGlobalFunctionPrototype(MacroAssembler* masm,
449 int index, 478 int index,
450 Register prototype, 479 Register prototype,
451 Label* miss); 480 Label* miss);
452 481
453 static void GenerateFastPropertyLoad(MacroAssembler* masm, 482 static void GenerateFastPropertyLoad(MacroAssembler* masm,
454 Register dst, 483 Register dst,
455 Register src, 484 Register src,
456 Handle<JSObject> holder, 485 Handle<JSObject> holder,
457 PropertyIndex index); 486 PropertyIndex index);
487 static void DoGenerateFastPropertyLoad(MacroAssembler* masm,
488 Register dst,
489 Register src,
490 bool inobject,
491 int index);
458 492
459 static void GenerateLoadArrayLength(MacroAssembler* masm, 493 static void GenerateLoadArrayLength(MacroAssembler* masm,
460 Register receiver, 494 Register receiver,
461 Register scratch, 495 Register scratch,
462 Label* miss_label); 496 Label* miss_label);
463 497
464 static void GenerateLoadStringLength(MacroAssembler* masm, 498 static void GenerateLoadStringLength(MacroAssembler* masm,
465 Register receiver, 499 Register receiver,
466 Register scratch1, 500 Register scratch1,
467 Register scratch2, 501 Register scratch2,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 // The function can optionally (when save_at_depth != 539 // The function can optionally (when save_at_depth !=
506 // kInvalidProtoDepth) save the object at the given depth by moving 540 // kInvalidProtoDepth) save the object at the given depth by moving
507 // it to [esp + kPointerSize]. 541 // it to [esp + kPointerSize].
508 Register CheckPrototypes(Handle<JSObject> object, 542 Register CheckPrototypes(Handle<JSObject> object,
509 Register object_reg, 543 Register object_reg,
510 Handle<JSObject> holder, 544 Handle<JSObject> holder,
511 Register holder_reg, 545 Register holder_reg,
512 Register scratch1, 546 Register scratch1,
513 Register scratch2, 547 Register scratch2,
514 Handle<String> name, 548 Handle<String> name,
515 Label* miss) { 549 Label* miss,
550 PrototypeCheckType check = CHECK_ALL_MAPS) {
516 return CheckPrototypes(object, object_reg, holder, holder_reg, scratch1, 551 return CheckPrototypes(object, object_reg, holder, holder_reg, scratch1,
517 scratch2, name, kInvalidProtoDepth, miss); 552 scratch2, name, kInvalidProtoDepth, miss, check);
518 } 553 }
519 554
520 Register CheckPrototypes(Handle<JSObject> object, 555 Register CheckPrototypes(Handle<JSObject> object,
521 Register object_reg, 556 Register object_reg,
522 Handle<JSObject> holder, 557 Handle<JSObject> holder,
523 Register holder_reg, 558 Register holder_reg,
524 Register scratch1, 559 Register scratch1,
525 Register scratch2, 560 Register scratch2,
526 Handle<String> name, 561 Handle<String> name,
527 int save_at_depth, 562 int save_at_depth,
528 Label* miss); 563 Label* miss,
564 PrototypeCheckType check = CHECK_ALL_MAPS);
529 565
530 566
531 protected: 567 protected:
532 Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name); 568 Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name);
533 Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<String> name); 569 Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<String> name);
534 570
535 MacroAssembler* masm() { return &masm_; } 571 MacroAssembler* masm() { return &masm_; }
536 void set_failure(Failure* failure) { failure_ = failure; } 572 void set_failure(Failure* failure) { failure_ = failure; }
537 573
538 static void LookupPostInterceptor(Handle<JSObject> holder, 574 static void LookupPostInterceptor(Handle<JSObject> holder,
539 Handle<String> name, 575 Handle<String> name,
540 LookupResult* lookup); 576 LookupResult* lookup);
541 577
542 Isolate* isolate() { return isolate_; } 578 Isolate* isolate() { return isolate_; }
543 Heap* heap() { return isolate()->heap(); } 579 Heap* heap() { return isolate()->heap(); }
544 Factory* factory() { return isolate()->factory(); } 580 Factory* factory() { return isolate()->factory(); }
545 581
582 void GenerateTailCall(Handle<Code> code);
583
546 private: 584 private:
547 Isolate* isolate_; 585 Isolate* isolate_;
548 MacroAssembler masm_; 586 MacroAssembler masm_;
549 Failure* failure_; 587 Failure* failure_;
550 }; 588 };
551 589
552 590
553 enum FrontendCheckType { PERFORM_INITIAL_CHECKS, SKIP_INITIAL_CHECKS }; 591 enum FrontendCheckType { PERFORM_INITIAL_CHECKS, SKIP_INITIAL_CHECKS };
554 592
555 593
(...skipping 15 matching lines...) Expand all
571 609
572 Handle<Code> CompileLoadConstant(Handle<JSObject> object, 610 Handle<Code> CompileLoadConstant(Handle<JSObject> object,
573 Handle<JSObject> holder, 611 Handle<JSObject> holder,
574 Handle<String> name, 612 Handle<String> name,
575 Handle<JSFunction> value); 613 Handle<JSFunction> value);
576 614
577 Handle<Code> CompileLoadInterceptor(Handle<JSObject> object, 615 Handle<Code> CompileLoadInterceptor(Handle<JSObject> object,
578 Handle<JSObject> holder, 616 Handle<JSObject> holder,
579 Handle<String> name); 617 Handle<String> name);
580 618
619 Handle<Code> CompileMonomorphicIC(Handle<Map> receiver_map,
620 Handle<Code> handler,
621 Handle<String> name);
622 Handle<Code> CompilePolymorphicIC(MapHandleList* receiver_maps,
623 CodeHandleList* handlers,
624 Handle<String> name,
625 Code::StubType type,
626 IcCheckType check);
627
581 protected: 628 protected:
582 Register HandlerFrontendHeader(Handle<JSObject> object, 629 Register HandlerFrontendHeader(Handle<JSObject> object,
583 Register object_reg, 630 Register object_reg,
584 Handle<JSObject> holder, 631 Handle<JSObject> holder,
585 Handle<String> name, 632 Handle<String> name,
586 Label* success, 633 Label* success);
587 FrontendCheckType check);
588 void HandlerFrontendFooter(Label* success, Label* miss); 634 void HandlerFrontendFooter(Label* success, Label* miss);
589 635
590 Register HandlerFrontend(Handle<JSObject> object, 636 Register HandlerFrontend(Handle<JSObject> object,
591 Register object_reg, 637 Register object_reg,
592 Handle<JSObject> holder, 638 Handle<JSObject> holder,
593 Handle<String> name, 639 Handle<String> name,
594 Label* success, 640 Label* success);
595 FrontendCheckType check);
596 Register CallbackHandlerFrontend(Handle<JSObject> object, 641 Register CallbackHandlerFrontend(Handle<JSObject> object,
597 Register object_reg, 642 Register object_reg,
598 Handle<JSObject> holder, 643 Handle<JSObject> holder,
599 Handle<String> name, 644 Handle<String> name,
600 Label* success, 645 Label* success,
601 FrontendCheckType check,
602 Handle<ExecutableAccessorInfo> callback); 646 Handle<ExecutableAccessorInfo> callback);
603 void NonexistentHandlerFrontend(Handle<JSObject> object, 647 void NonexistentHandlerFrontend(Handle<JSObject> object,
604 Handle<JSObject> last, 648 Handle<JSObject> last,
605 Handle<String> name, 649 Handle<String> name,
606 Label* success, 650 Label* success,
607 Handle<GlobalObject> global); 651 Handle<GlobalObject> global);
608 652
609 void GenerateLoadField(Register reg, 653 void GenerateLoadField(Register reg,
610 Handle<JSObject> holder, 654 Handle<JSObject> holder,
611 PropertyIndex index); 655 PropertyIndex index);
612 void GenerateLoadConstant(Handle<JSFunction> value); 656 void GenerateLoadConstant(Handle<JSFunction> value);
613 void GenerateLoadCallback(Register reg, 657 void GenerateLoadCallback(Register reg,
614 Handle<ExecutableAccessorInfo> callback); 658 Handle<ExecutableAccessorInfo> callback);
615 void GenerateLoadInterceptor(Register holder_reg, 659 void GenerateLoadInterceptor(Register holder_reg,
616 Handle<JSObject> object, 660 Handle<JSObject> object,
617 Handle<JSObject> holder, 661 Handle<JSObject> holder,
618 LookupResult* lookup, 662 LookupResult* lookup,
619 Handle<String> name); 663 Handle<String> name);
620 void GenerateLoadPostInterceptor(Register reg, 664 void GenerateLoadPostInterceptor(Register reg,
621 Handle<JSObject> interceptor_holder, 665 Handle<JSObject> interceptor_holder,
622 Handle<String> name, 666 Handle<String> name,
623 LookupResult* lookup); 667 LookupResult* lookup);
624 668
669 Handle<Code> GetCode(Code::IcFragment fragment,
670 Code::StubType type,
671 Handle<String> name,
672 InlineCacheState state = MONOMORPHIC);
625 673
626 Register receiver() { return registers_[0]; } 674 Register receiver() { return registers_[0]; }
627 Register name() { return registers_[1]; } 675 Register name() { return registers_[1]; }
628 Register scratch1() { return registers_[2]; } 676 Register scratch1() { return registers_[2]; }
629 Register scratch2() { return registers_[3]; } 677 Register scratch2() { return registers_[3]; }
630 Register scratch3() { return registers_[4]; } 678 Register scratch3() { return registers_[4]; }
631 Register scratch4() { return registers_[5]; } 679 Register scratch4() { return registers_[5]; }
632 680
633 private: 681 private:
634 virtual Code::Kind kind() = 0; 682 virtual Code::Kind kind() = 0;
683 virtual Logger::LogEventsAndTags log_kind(Handle<Code> code) = 0;
684 virtual void JitEvent(Handle<String> name, Handle<Code> code) = 0;
635 virtual void GenerateNameCheck(Handle<String> name, 685 virtual void GenerateNameCheck(Handle<String> name,
636 Register name_reg, 686 Register name_reg,
637 Label* miss) { } 687 Label* miss) { }
638 virtual Handle<Code> GetCode(Code::StubType type,
639 Handle<String> name,
640 InlineCacheState state = MONOMORPHIC) = 0;
641 Register* registers_; 688 Register* registers_;
642 }; 689 };
643 690
644 691
645 class LoadStubCompiler: public BaseLoadStubCompiler { 692 class LoadStubCompiler: public BaseLoadStubCompiler {
646 public: 693 public:
647 explicit LoadStubCompiler(Isolate* isolate) 694 explicit LoadStubCompiler(Isolate* isolate)
648 : BaseLoadStubCompiler(isolate, registers()) { } 695 : BaseLoadStubCompiler(isolate, registers()) { }
649 696
650 Handle<Code> CompileLoadNonexistent(Handle<JSObject> object, 697 Handle<Code> CompileLoadNonexistent(Handle<JSObject> object,
651 Handle<JSObject> last, 698 Handle<JSObject> last,
652 Handle<String> name, 699 Handle<String> name,
653 Handle<GlobalObject> global); 700 Handle<GlobalObject> global);
654 701
655 static void GenerateLoadViaGetter(MacroAssembler* masm, 702 static void GenerateLoadViaGetter(MacroAssembler* masm,
656 Handle<JSFunction> getter); 703 Handle<JSFunction> getter);
657 704
658 Handle<Code> CompileLoadViaGetter(Handle<JSObject> object, 705 Handle<Code> CompileLoadViaGetter(Handle<JSObject> object,
659 Handle<JSObject> holder, 706 Handle<JSObject> holder,
660 Handle<String> name, 707 Handle<String> name,
661 Handle<JSFunction> getter); 708 Handle<JSFunction> getter);
662 709
663 Handle<Code> CompileLoadGlobal(Handle<JSObject> object, 710 Handle<Code> CompileLoadGlobal(Handle<JSObject> object,
664 Handle<GlobalObject> holder, 711 Handle<GlobalObject> holder,
665 Handle<JSGlobalPropertyCell> cell, 712 Handle<JSGlobalPropertyCell> cell,
666 Handle<String> name, 713 Handle<String> name,
667 bool is_dont_delete); 714 bool is_dont_delete);
668 715
716 static Register receiver() { return registers()[0]; }
717
669 private: 718 private:
670 Register* registers(); 719 static Register* registers();
671 virtual Code::Kind kind() { return Code::LOAD_IC; } 720 virtual Code::Kind kind() { return Code::LOAD_IC; }
672 virtual Handle<Code> GetCode(Code::StubType type, 721 virtual Logger::LogEventsAndTags log_kind(Handle<Code> code) {
673 Handle<String> name, 722 return code->ic_state() == MONOMORPHIC
674 InlineCacheState state = MONOMORPHIC); 723 ? Logger::LOAD_IC_TAG : Logger::LOAD_POLYMORPHIC_IC_TAG;
724 }
725 virtual void JitEvent(Handle<String> name, Handle<Code> code);
675 }; 726 };
676 727
677 728
678 class KeyedLoadStubCompiler: public BaseLoadStubCompiler { 729 class KeyedLoadStubCompiler: public BaseLoadStubCompiler {
679 public: 730 public:
680 explicit KeyedLoadStubCompiler(Isolate* isolate) 731 explicit KeyedLoadStubCompiler(Isolate* isolate)
681 : BaseLoadStubCompiler(isolate, registers()) { } 732 : BaseLoadStubCompiler(isolate, registers()) { }
682 733
683 Handle<Code> CompileLoadElement(Handle<Map> receiver_map); 734 Handle<Code> CompileLoadElement(Handle<Map> receiver_map);
684 735
685 Handle<Code> CompileLoadPolymorphic(MapHandleList* receiver_maps, 736 void CompileElementHandlers(MapHandleList* receiver_maps,
686 CodeHandleList* handler_ics); 737 CodeHandleList* handlers);
687 738
688 Handle<Code> CompileLoadElementPolymorphic(MapHandleList* receiver_maps); 739 Handle<Code> CompileLoadElementPolymorphic(MapHandleList* receiver_maps);
689 740
690 static void GenerateLoadDictionaryElement(MacroAssembler* masm); 741 static void GenerateLoadDictionaryElement(MacroAssembler* masm);
691 742
743 static Register receiver() { return registers()[0]; }
744
692 private: 745 private:
693 Register* registers(); 746 static Register* registers();
694 virtual Code::Kind kind() { return Code::KEYED_LOAD_IC; } 747 virtual Code::Kind kind() { return Code::KEYED_LOAD_IC; }
695 virtual Handle<Code> GetCode(Code::StubType type, 748 virtual Logger::LogEventsAndTags log_kind(Handle<Code> code) {
696 Handle<String> name, 749 return code->ic_state() == MONOMORPHIC
697 InlineCacheState state = MONOMORPHIC); 750 ? Logger::KEYED_LOAD_IC_TAG : Logger::KEYED_LOAD_POLYMORPHIC_IC_TAG;
751 }
752 virtual void JitEvent(Handle<String> name, Handle<Code> code);
698 virtual void GenerateNameCheck(Handle<String> name, 753 virtual void GenerateNameCheck(Handle<String> name,
699 Register name_reg, 754 Register name_reg,
700 Label* miss); 755 Label* miss);
701 }; 756 };
702 757
703 758
704 class StoreStubCompiler: public StubCompiler { 759 class StoreStubCompiler: public StubCompiler {
705 public: 760 public:
706 StoreStubCompiler(Isolate* isolate, StrictModeFlag strict_mode) 761 StoreStubCompiler(Isolate* isolate, StrictModeFlag strict_mode)
707 : StubCompiler(isolate), strict_mode_(strict_mode) { } 762 : StubCompiler(isolate), strict_mode_(strict_mode) { }
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 Handle<JSFunction> constant_function_; 1003 Handle<JSFunction> constant_function_;
949 bool is_simple_api_call_; 1004 bool is_simple_api_call_;
950 Handle<FunctionTemplateInfo> expected_receiver_type_; 1005 Handle<FunctionTemplateInfo> expected_receiver_type_;
951 Handle<CallHandlerInfo> api_call_info_; 1006 Handle<CallHandlerInfo> api_call_info_;
952 }; 1007 };
953 1008
954 1009
955 } } // namespace v8::internal 1010 } } // namespace v8::internal
956 1011
957 #endif // V8_STUB_CACHE_H_ 1012 #endif // V8_STUB_CACHE_H_
OLDNEW
« no previous file with comments | « src/property.h ('k') | src/stub-cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698