OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/interpreter/interpreter.h" | 5 #include "src/interpreter/interpreter.h" |
6 | 6 |
7 #include <fstream> | 7 #include <fstream> |
8 | 8 |
9 #include "src/ast/prettyprinter.h" | 9 #include "src/ast/prettyprinter.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 Node* constant_index = __ BytecodeOperandIdx(1); | 586 Node* constant_index = __ BytecodeOperandIdx(1); |
587 Node* name = __ LoadConstantPoolEntry(constant_index); | 587 Node* name = __ LoadConstantPoolEntry(constant_index); |
588 Node* raw_slot = __ BytecodeOperandIdx(2); | 588 Node* raw_slot = __ BytecodeOperandIdx(2); |
589 Node* smi_slot = __ SmiTag(raw_slot); | 589 Node* smi_slot = __ SmiTag(raw_slot); |
590 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 590 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
591 Node* context = __ GetContext(); | 591 Node* context = __ GetContext(); |
592 return __ CallStub(ic.descriptor(), code_target, context, object, name, | 592 return __ CallStub(ic.descriptor(), code_target, context, object, name, |
593 smi_slot, type_feedback_vector); | 593 smi_slot, type_feedback_vector); |
594 } | 594 } |
595 | 595 |
596 // LoadIC <object> <name_index> <slot> | 596 // LdaNamedProperty <object> <name_index> <slot> |
597 // | 597 // |
598 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at | 598 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at |
599 // constant pool entry <name_index>. | 599 // constant pool entry <name_index>. |
600 void Interpreter::DoLoadIC(InterpreterAssembler* assembler) { | 600 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) { |
601 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF, | 601 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF, |
602 UNINITIALIZED); | 602 UNINITIALIZED); |
603 Node* result = BuildLoadNamedProperty(ic, assembler); | 603 Node* result = BuildLoadNamedProperty(ic, assembler); |
604 __ SetAccumulator(result); | 604 __ SetAccumulator(result); |
605 __ Dispatch(); | 605 __ Dispatch(); |
606 } | 606 } |
607 | 607 |
608 // LdrNamedProperty <object> <name_index> <slot> <reg> | 608 // LdrNamedProperty <object> <name_index> <slot> <reg> |
609 // | 609 // |
610 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at | 610 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at |
(...skipping 18 matching lines...) Expand all Loading... |
629 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 629 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
630 Node* context = __ GetContext(); | 630 Node* context = __ GetContext(); |
631 return __ CallStub(ic.descriptor(), code_target, context, object, name, | 631 return __ CallStub(ic.descriptor(), code_target, context, object, name, |
632 smi_slot, type_feedback_vector); | 632 smi_slot, type_feedback_vector); |
633 } | 633 } |
634 | 634 |
635 // KeyedLoadIC <object> <slot> | 635 // KeyedLoadIC <object> <slot> |
636 // | 636 // |
637 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key | 637 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key |
638 // in the accumulator. | 638 // in the accumulator. |
639 void Interpreter::DoKeyedLoadIC(InterpreterAssembler* assembler) { | 639 void Interpreter::DoLdaKeyedProperty(InterpreterAssembler* assembler) { |
640 Callable ic = | 640 Callable ic = |
641 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, UNINITIALIZED); | 641 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, UNINITIALIZED); |
642 Node* result = BuildLoadKeyedProperty(ic, assembler); | 642 Node* result = BuildLoadKeyedProperty(ic, assembler); |
643 __ SetAccumulator(result); | 643 __ SetAccumulator(result); |
644 __ Dispatch(); | 644 __ Dispatch(); |
645 } | 645 } |
646 | 646 |
647 // LdrKeyedProperty <object> <slot> <reg> | 647 // LdrKeyedProperty <object> <slot> <reg> |
648 // | 648 // |
649 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key | 649 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key |
(...skipping 16 matching lines...) Expand all Loading... |
666 Node* value = __ GetAccumulator(); | 666 Node* value = __ GetAccumulator(); |
667 Node* raw_slot = __ BytecodeOperandIdx(2); | 667 Node* raw_slot = __ BytecodeOperandIdx(2); |
668 Node* smi_slot = __ SmiTag(raw_slot); | 668 Node* smi_slot = __ SmiTag(raw_slot); |
669 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 669 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
670 Node* context = __ GetContext(); | 670 Node* context = __ GetContext(); |
671 __ CallStub(ic.descriptor(), code_target, context, object, name, value, | 671 __ CallStub(ic.descriptor(), code_target, context, object, name, value, |
672 smi_slot, type_feedback_vector); | 672 smi_slot, type_feedback_vector); |
673 __ Dispatch(); | 673 __ Dispatch(); |
674 } | 674 } |
675 | 675 |
676 // StoreICSloppy <object> <name_index> <slot> | 676 // StaNamedPropertySloppy <object> <name_index> <slot> |
677 // | 677 // |
678 // Calls the sloppy mode StoreIC at FeedBackVector slot <slot> for <object> and | 678 // Calls the sloppy mode StoreIC at FeedBackVector slot <slot> for <object> and |
679 // the name in constant pool entry <name_index> with the value in the | 679 // the name in constant pool entry <name_index> with the value in the |
680 // accumulator. | 680 // accumulator. |
681 void Interpreter::DoStoreICSloppy(InterpreterAssembler* assembler) { | 681 void Interpreter::DoStaNamedPropertySloppy(InterpreterAssembler* assembler) { |
682 Callable ic = | 682 Callable ic = |
683 CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED); | 683 CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED); |
684 DoStoreIC(ic, assembler); | 684 DoStoreIC(ic, assembler); |
685 } | 685 } |
686 | 686 |
687 // StoreICStrict <object> <name_index> <slot> | 687 // StaNamedPropertyStrict <object> <name_index> <slot> |
688 // | 688 // |
689 // Calls the strict mode StoreIC at FeedBackVector slot <slot> for <object> and | 689 // Calls the strict mode StoreIC at FeedBackVector slot <slot> for <object> and |
690 // the name in constant pool entry <name_index> with the value in the | 690 // the name in constant pool entry <name_index> with the value in the |
691 // accumulator. | 691 // accumulator. |
692 void Interpreter::DoStoreICStrict(InterpreterAssembler* assembler) { | 692 void Interpreter::DoStaNamedPropertyStrict(InterpreterAssembler* assembler) { |
693 Callable ic = | 693 Callable ic = |
694 CodeFactory::StoreICInOptimizedCode(isolate_, STRICT, UNINITIALIZED); | 694 CodeFactory::StoreICInOptimizedCode(isolate_, STRICT, UNINITIALIZED); |
695 DoStoreIC(ic, assembler); | 695 DoStoreIC(ic, assembler); |
696 } | 696 } |
697 | 697 |
698 void Interpreter::DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler) { | 698 void Interpreter::DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler) { |
699 Node* code_target = __ HeapConstant(ic.code()); | 699 Node* code_target = __ HeapConstant(ic.code()); |
700 Node* object_reg_index = __ BytecodeOperandReg(0); | 700 Node* object_reg_index = __ BytecodeOperandReg(0); |
701 Node* object = __ LoadRegister(object_reg_index); | 701 Node* object = __ LoadRegister(object_reg_index); |
702 Node* name_reg_index = __ BytecodeOperandReg(1); | 702 Node* name_reg_index = __ BytecodeOperandReg(1); |
703 Node* name = __ LoadRegister(name_reg_index); | 703 Node* name = __ LoadRegister(name_reg_index); |
704 Node* value = __ GetAccumulator(); | 704 Node* value = __ GetAccumulator(); |
705 Node* raw_slot = __ BytecodeOperandIdx(2); | 705 Node* raw_slot = __ BytecodeOperandIdx(2); |
706 Node* smi_slot = __ SmiTag(raw_slot); | 706 Node* smi_slot = __ SmiTag(raw_slot); |
707 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 707 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
708 Node* context = __ GetContext(); | 708 Node* context = __ GetContext(); |
709 __ CallStub(ic.descriptor(), code_target, context, object, name, value, | 709 __ CallStub(ic.descriptor(), code_target, context, object, name, value, |
710 smi_slot, type_feedback_vector); | 710 smi_slot, type_feedback_vector); |
711 __ Dispatch(); | 711 __ Dispatch(); |
712 } | 712 } |
713 | 713 |
714 // KeyedStoreICSloppy <object> <key> <slot> | 714 // StaKeyedPropertySloppy <object> <key> <slot> |
715 // | 715 // |
716 // Calls the sloppy mode KeyStoreIC at FeedBackVector slot <slot> for <object> | 716 // Calls the sloppy mode KeyStoreIC at FeedBackVector slot <slot> for <object> |
717 // and the key <key> with the value in the accumulator. | 717 // and the key <key> with the value in the accumulator. |
718 void Interpreter::DoKeyedStoreICSloppy(InterpreterAssembler* assembler) { | 718 void Interpreter::DoStaKeyedPropertySloppy(InterpreterAssembler* assembler) { |
719 Callable ic = | 719 Callable ic = |
720 CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED); | 720 CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED); |
721 DoKeyedStoreIC(ic, assembler); | 721 DoKeyedStoreIC(ic, assembler); |
722 } | 722 } |
723 | 723 |
724 // KeyedStoreICStrict <object> <key> <slot> | 724 // StaKeyedPropertyStrict <object> <key> <slot> |
725 // | 725 // |
726 // Calls the strict mode KeyStoreIC at FeedBackVector slot <slot> for <object> | 726 // Calls the strict mode KeyStoreIC at FeedBackVector slot <slot> for <object> |
727 // and the key <key> with the value in the accumulator. | 727 // and the key <key> with the value in the accumulator. |
728 void Interpreter::DoKeyedStoreICStrict(InterpreterAssembler* assembler) { | 728 void Interpreter::DoStaKeyedPropertyStrict(InterpreterAssembler* assembler) { |
729 Callable ic = | 729 Callable ic = |
730 CodeFactory::KeyedStoreICInOptimizedCode(isolate_, STRICT, UNINITIALIZED); | 730 CodeFactory::KeyedStoreICInOptimizedCode(isolate_, STRICT, UNINITIALIZED); |
731 DoKeyedStoreIC(ic, assembler); | 731 DoKeyedStoreIC(ic, assembler); |
732 } | 732 } |
733 | 733 |
734 // PushContext <context> | 734 // PushContext <context> |
735 // | 735 // |
736 // Saves the current context in <context>, and pushes the accumulator as the | 736 // Saves the current context in <context>, and pushes the accumulator as the |
737 // new current context. | 737 // new current context. |
738 void Interpreter::DoPushContext(InterpreterAssembler* assembler) { | 738 void Interpreter::DoPushContext(InterpreterAssembler* assembler) { |
(...skipping 1111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1850 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, | 1850 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, |
1851 __ SmiTag(new_state)); | 1851 __ SmiTag(new_state)); |
1852 __ SetAccumulator(old_state); | 1852 __ SetAccumulator(old_state); |
1853 | 1853 |
1854 __ Dispatch(); | 1854 __ Dispatch(); |
1855 } | 1855 } |
1856 | 1856 |
1857 } // namespace interpreter | 1857 } // namespace interpreter |
1858 } // namespace internal | 1858 } // namespace internal |
1859 } // namespace v8 | 1859 } // namespace v8 |
OLD | NEW |