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

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

Issue 102563004: Zonify types in compiler frontend (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased Created 7 years 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/scopes.cc ('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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 Code::Kind kind, 85 Code::Kind kind,
86 ExtraICState extra_state = kNoExtraICState, 86 ExtraICState extra_state = kNoExtraICState,
87 InlineCacheHolderFlag cache_holder = OWN_MAP); 87 InlineCacheHolderFlag cache_holder = OWN_MAP);
88 88
89 Handle<Code> FindHandler(Handle<Name> name, 89 Handle<Code> FindHandler(Handle<Name> name,
90 Handle<Map> map, 90 Handle<Map> map,
91 Code::Kind kind, 91 Code::Kind kind,
92 InlineCacheHolderFlag cache_holder = OWN_MAP); 92 InlineCacheHolderFlag cache_holder = OWN_MAP);
93 93
94 Handle<Code> ComputeMonomorphicIC(Handle<Name> name, 94 Handle<Code> ComputeMonomorphicIC(Handle<Name> name,
95 Handle<Type> type, 95 Handle<HeapType> type,
96 Handle<Code> handler, 96 Handle<Code> handler,
97 ExtraICState extra_ic_state); 97 ExtraICState extra_ic_state);
98 98
99 Handle<Code> ComputeLoadNonexistent(Handle<Name> name, Handle<Type> type); 99 Handle<Code> ComputeLoadNonexistent(Handle<Name> name, Handle<HeapType> type);
100 100
101 Handle<Code> ComputeKeyedLoadElement(Handle<Map> receiver_map); 101 Handle<Code> ComputeKeyedLoadElement(Handle<Map> receiver_map);
102 102
103 Handle<Code> ComputeKeyedStoreElement(Handle<Map> receiver_map, 103 Handle<Code> ComputeKeyedStoreElement(Handle<Map> receiver_map,
104 StrictModeFlag strict_mode, 104 StrictModeFlag strict_mode,
105 KeyedAccessStoreMode store_mode); 105 KeyedAccessStoreMode store_mode);
106 106
107 Handle<Code> ComputeCallField(int argc, 107 Handle<Code> ComputeCallField(int argc,
108 Code::Kind, 108 Code::Kind,
109 ExtraICState extra_state, 109 ExtraICState extra_state,
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 // code for security check in case of global object holders. Helps to make 454 // code for security check in case of global object holders. Helps to make
455 // sure that the current IC is still valid. 455 // sure that the current IC is still valid.
456 // 456 //
457 // The scratch and holder registers are always clobbered, but the object 457 // The scratch and holder registers are always clobbered, but the object
458 // register is only clobbered if it the same as the holder register. The 458 // register is only clobbered if it the same as the holder register. The
459 // function returns a register containing the holder - either object_reg or 459 // function returns a register containing the holder - either object_reg or
460 // holder_reg. 460 // holder_reg.
461 // The function can optionally (when save_at_depth != 461 // The function can optionally (when save_at_depth !=
462 // kInvalidProtoDepth) save the object at the given depth by moving 462 // kInvalidProtoDepth) save the object at the given depth by moving
463 // it to [esp + kPointerSize]. 463 // it to [esp + kPointerSize].
464 Register CheckPrototypes(Handle<Type> type, 464 Register CheckPrototypes(Handle<HeapType> type,
465 Register object_reg, 465 Register object_reg,
466 Handle<JSObject> holder, 466 Handle<JSObject> holder,
467 Register holder_reg, 467 Register holder_reg,
468 Register scratch1, 468 Register scratch1,
469 Register scratch2, 469 Register scratch2,
470 Handle<Name> name, 470 Handle<Name> name,
471 Label* miss, 471 Label* miss,
472 PrototypeCheckType check = CHECK_ALL_MAPS) { 472 PrototypeCheckType check = CHECK_ALL_MAPS) {
473 return CheckPrototypes(type, object_reg, holder, holder_reg, scratch1, 473 return CheckPrototypes(type, object_reg, holder, holder_reg, scratch1,
474 scratch2, name, kInvalidProtoDepth, miss, check); 474 scratch2, name, kInvalidProtoDepth, miss, check);
475 } 475 }
476 476
477 Register CheckPrototypes(Handle<Type> type, 477 Register CheckPrototypes(Handle<HeapType> type,
478 Register object_reg, 478 Register object_reg,
479 Handle<JSObject> holder, 479 Handle<JSObject> holder,
480 Register holder_reg, 480 Register holder_reg,
481 Register scratch1, 481 Register scratch1,
482 Register scratch2, 482 Register scratch2,
483 Handle<Name> name, 483 Handle<Name> name,
484 int save_at_depth, 484 int save_at_depth,
485 Label* miss, 485 Label* miss,
486 PrototypeCheckType check = CHECK_ALL_MAPS); 486 PrototypeCheckType check = CHECK_ALL_MAPS);
487 487
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 Code::Kind kind, 523 Code::Kind kind,
524 ExtraICState extra_ic_state = kNoExtraICState, 524 ExtraICState extra_ic_state = kNoExtraICState,
525 InlineCacheHolderFlag cache_holder = OWN_MAP) 525 InlineCacheHolderFlag cache_holder = OWN_MAP)
526 : StubCompiler(isolate, extra_ic_state), 526 : StubCompiler(isolate, extra_ic_state),
527 kind_(kind), 527 kind_(kind),
528 cache_holder_(cache_holder) { 528 cache_holder_(cache_holder) {
529 InitializeRegisters(); 529 InitializeRegisters();
530 } 530 }
531 virtual ~BaseLoadStoreStubCompiler() { } 531 virtual ~BaseLoadStoreStubCompiler() { }
532 532
533 Handle<Code> CompileMonomorphicIC(Handle<Type> type, 533 Handle<Code> CompileMonomorphicIC(Handle<HeapType> type,
534 Handle<Code> handler, 534 Handle<Code> handler,
535 Handle<Name> name); 535 Handle<Name> name);
536 536
537 Handle<Code> CompilePolymorphicIC(TypeHandleList* types, 537 Handle<Code> CompilePolymorphicIC(TypeHandleList* types,
538 CodeHandleList* handlers, 538 CodeHandleList* handlers,
539 Handle<Name> name, 539 Handle<Name> name,
540 Code::StubType type, 540 Code::StubType type,
541 IcCheckType check); 541 IcCheckType check);
542 542
543 virtual void GenerateNameCheck(Handle<Name> name, 543 virtual void GenerateNameCheck(Handle<Name> name,
544 Register name_reg, 544 Register name_reg,
545 Label* miss) { } 545 Label* miss) { }
546 546
547 static Builtins::Name MissBuiltin(Code::Kind kind) { 547 static Builtins::Name MissBuiltin(Code::Kind kind) {
548 switch (kind) { 548 switch (kind) {
549 case Code::LOAD_IC: return Builtins::kLoadIC_Miss; 549 case Code::LOAD_IC: return Builtins::kLoadIC_Miss;
550 case Code::STORE_IC: return Builtins::kStoreIC_Miss; 550 case Code::STORE_IC: return Builtins::kStoreIC_Miss;
551 case Code::KEYED_LOAD_IC: return Builtins::kKeyedLoadIC_Miss; 551 case Code::KEYED_LOAD_IC: return Builtins::kKeyedLoadIC_Miss;
552 case Code::KEYED_STORE_IC: return Builtins::kKeyedStoreIC_Miss; 552 case Code::KEYED_STORE_IC: return Builtins::kKeyedStoreIC_Miss;
553 default: UNREACHABLE(); 553 default: UNREACHABLE();
554 } 554 }
555 return Builtins::kLoadIC_Miss; 555 return Builtins::kLoadIC_Miss;
556 } 556 }
557 557
558 protected: 558 protected:
559 virtual Register HandlerFrontendHeader(Handle<Type> type, 559 virtual Register HandlerFrontendHeader(Handle<HeapType> type,
560 Register object_reg, 560 Register object_reg,
561 Handle<JSObject> holder, 561 Handle<JSObject> holder,
562 Handle<Name> name, 562 Handle<Name> name,
563 Label* miss) = 0; 563 Label* miss) = 0;
564 564
565 virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss) = 0; 565 virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss) = 0;
566 566
567 Register HandlerFrontend(Handle<Type> type, 567 Register HandlerFrontend(Handle<HeapType> type,
568 Register object_reg, 568 Register object_reg,
569 Handle<JSObject> holder, 569 Handle<JSObject> holder,
570 Handle<Name> name); 570 Handle<Name> name);
571 571
572 Handle<Code> GetCode(Code::Kind kind, 572 Handle<Code> GetCode(Code::Kind kind,
573 Code::StubType type, 573 Code::StubType type,
574 Handle<Name> name); 574 Handle<Name> name);
575 575
576 Handle<Code> GetICCode(Code::Kind kind, 576 Handle<Code> GetICCode(Code::Kind kind,
577 Code::StubType type, 577 Code::StubType type,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 class LoadStubCompiler: public BaseLoadStoreStubCompiler { 616 class LoadStubCompiler: public BaseLoadStoreStubCompiler {
617 public: 617 public:
618 LoadStubCompiler(Isolate* isolate, 618 LoadStubCompiler(Isolate* isolate,
619 ExtraICState extra_ic_state = kNoExtraICState, 619 ExtraICState extra_ic_state = kNoExtraICState,
620 InlineCacheHolderFlag cache_holder = OWN_MAP, 620 InlineCacheHolderFlag cache_holder = OWN_MAP,
621 Code::Kind kind = Code::LOAD_IC) 621 Code::Kind kind = Code::LOAD_IC)
622 : BaseLoadStoreStubCompiler(isolate, kind, extra_ic_state, 622 : BaseLoadStoreStubCompiler(isolate, kind, extra_ic_state,
623 cache_holder) { } 623 cache_holder) { }
624 virtual ~LoadStubCompiler() { } 624 virtual ~LoadStubCompiler() { }
625 625
626 Handle<Code> CompileLoadField(Handle<Type> type, 626 Handle<Code> CompileLoadField(Handle<HeapType> type,
627 Handle<JSObject> holder, 627 Handle<JSObject> holder,
628 Handle<Name> name, 628 Handle<Name> name,
629 PropertyIndex index, 629 PropertyIndex index,
630 Representation representation); 630 Representation representation);
631 631
632 Handle<Code> CompileLoadCallback(Handle<Type> type, 632 Handle<Code> CompileLoadCallback(Handle<HeapType> type,
633 Handle<JSObject> holder, 633 Handle<JSObject> holder,
634 Handle<Name> name, 634 Handle<Name> name,
635 Handle<ExecutableAccessorInfo> callback); 635 Handle<ExecutableAccessorInfo> callback);
636 636
637 Handle<Code> CompileLoadCallback(Handle<Type> type, 637 Handle<Code> CompileLoadCallback(Handle<HeapType> type,
638 Handle<JSObject> holder, 638 Handle<JSObject> holder,
639 Handle<Name> name, 639 Handle<Name> name,
640 const CallOptimization& call_optimization); 640 const CallOptimization& call_optimization);
641 641
642 Handle<Code> CompileLoadConstant(Handle<Type> type, 642 Handle<Code> CompileLoadConstant(Handle<HeapType> type,
643 Handle<JSObject> holder, 643 Handle<JSObject> holder,
644 Handle<Name> name, 644 Handle<Name> name,
645 Handle<Object> value); 645 Handle<Object> value);
646 646
647 Handle<Code> CompileLoadInterceptor(Handle<Type> type, 647 Handle<Code> CompileLoadInterceptor(Handle<HeapType> type,
648 Handle<JSObject> holder, 648 Handle<JSObject> holder,
649 Handle<Name> name); 649 Handle<Name> name);
650 650
651 Handle<Code> CompileLoadViaGetter(Handle<Type> type, 651 Handle<Code> CompileLoadViaGetter(Handle<HeapType> type,
652 Handle<JSObject> holder, 652 Handle<JSObject> holder,
653 Handle<Name> name, 653 Handle<Name> name,
654 Handle<JSFunction> getter); 654 Handle<JSFunction> getter);
655 655
656 static void GenerateLoadViaGetter(MacroAssembler* masm, 656 static void GenerateLoadViaGetter(MacroAssembler* masm,
657 Register receiver, 657 Register receiver,
658 Handle<JSFunction> getter); 658 Handle<JSFunction> getter);
659 659
660 Handle<Code> CompileLoadNonexistent(Handle<Type> type, 660 Handle<Code> CompileLoadNonexistent(Handle<HeapType> type,
661 Handle<JSObject> last, 661 Handle<JSObject> last,
662 Handle<Name> name); 662 Handle<Name> name);
663 663
664 Handle<Code> CompileLoadGlobal(Handle<Type> type, 664 Handle<Code> CompileLoadGlobal(Handle<HeapType> type,
665 Handle<GlobalObject> holder, 665 Handle<GlobalObject> holder,
666 Handle<PropertyCell> cell, 666 Handle<PropertyCell> cell,
667 Handle<Name> name, 667 Handle<Name> name,
668 bool is_dont_delete); 668 bool is_dont_delete);
669 669
670 static Register* registers(); 670 static Register* registers();
671 671
672 protected: 672 protected:
673 virtual Register HandlerFrontendHeader(Handle<Type> type, 673 virtual Register HandlerFrontendHeader(Handle<HeapType> type,
674 Register object_reg, 674 Register object_reg,
675 Handle<JSObject> holder, 675 Handle<JSObject> holder,
676 Handle<Name> name, 676 Handle<Name> name,
677 Label* miss); 677 Label* miss);
678 678
679 virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss); 679 virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss);
680 680
681 Register CallbackHandlerFrontend(Handle<Type> type, 681 Register CallbackHandlerFrontend(Handle<HeapType> type,
682 Register object_reg, 682 Register object_reg,
683 Handle<JSObject> holder, 683 Handle<JSObject> holder,
684 Handle<Name> name, 684 Handle<Name> name,
685 Handle<Object> callback); 685 Handle<Object> callback);
686 void NonexistentHandlerFrontend(Handle<Type> type, 686 void NonexistentHandlerFrontend(Handle<HeapType> type,
687 Handle<JSObject> last, 687 Handle<JSObject> last,
688 Handle<Name> name); 688 Handle<Name> name);
689 689
690 void GenerateLoadField(Register reg, 690 void GenerateLoadField(Register reg,
691 Handle<JSObject> holder, 691 Handle<JSObject> holder,
692 PropertyIndex field, 692 PropertyIndex field,
693 Representation representation); 693 Representation representation);
694 void GenerateLoadConstant(Handle<Object> value); 694 void GenerateLoadConstant(Handle<Object> value);
695 void GenerateLoadCallback(Register reg, 695 void GenerateLoadCallback(Register reg,
696 Handle<ExecutableAccessorInfo> callback); 696 Handle<ExecutableAccessorInfo> callback);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 static Builtins::Name SlowBuiltin(Code::Kind kind) { 812 static Builtins::Name SlowBuiltin(Code::Kind kind) {
813 switch (kind) { 813 switch (kind) {
814 case Code::STORE_IC: return Builtins::kStoreIC_Slow; 814 case Code::STORE_IC: return Builtins::kStoreIC_Slow;
815 case Code::KEYED_STORE_IC: return Builtins::kKeyedStoreIC_Slow; 815 case Code::KEYED_STORE_IC: return Builtins::kKeyedStoreIC_Slow;
816 default: UNREACHABLE(); 816 default: UNREACHABLE();
817 } 817 }
818 return Builtins::kStoreIC_Slow; 818 return Builtins::kStoreIC_Slow;
819 } 819 }
820 820
821 protected: 821 protected:
822 virtual Register HandlerFrontendHeader(Handle<Type> type, 822 virtual Register HandlerFrontendHeader(Handle<HeapType> type,
823 Register object_reg, 823 Register object_reg,
824 Handle<JSObject> holder, 824 Handle<JSObject> holder,
825 Handle<Name> name, 825 Handle<Name> name,
826 Label* miss); 826 Label* miss);
827 827
828 virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss); 828 virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss);
829 void GenerateRestoreName(MacroAssembler* masm, 829 void GenerateRestoreName(MacroAssembler* masm,
830 Label* label, 830 Label* label,
831 Handle<Name> name); 831 Handle<Name> name);
832 832
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 Handle<JSFunction> constant_function_; 1058 Handle<JSFunction> constant_function_;
1059 bool is_simple_api_call_; 1059 bool is_simple_api_call_;
1060 Handle<FunctionTemplateInfo> expected_receiver_type_; 1060 Handle<FunctionTemplateInfo> expected_receiver_type_;
1061 Handle<CallHandlerInfo> api_call_info_; 1061 Handle<CallHandlerInfo> api_call_info_;
1062 }; 1062 };
1063 1063
1064 1064
1065 } } // namespace v8::internal 1065 } } // namespace v8::internal
1066 1066
1067 #endif // V8_STUB_CACHE_H_ 1067 #endif // V8_STUB_CACHE_H_
OLDNEW
« no previous file with comments | « src/scopes.cc ('k') | src/stub-cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698