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

Side by Side Diff: src/arm/deoptimizer-arm.cc

Issue 12208011: Add separate flag for --trace-stub-failures (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review feedback Created 7 years, 10 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 | « no previous file | src/deoptimizer.h » ('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 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; caller's pc\n", 636 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; caller's pc\n",
637 top_address + output_offset, output_offset, callers_pc); 637 top_address + output_offset, output_offset, callers_pc);
638 } 638 }
639 639
640 // Read caller's FP from the previous frame, and set this frame's FP. 640 // Read caller's FP from the previous frame, and set this frame's FP.
641 output_offset -= kPointerSize; 641 output_offset -= kPointerSize;
642 intptr_t value = output_[frame_index - 1]->GetFp(); 642 intptr_t value = output_[frame_index - 1]->GetFp();
643 output_frame->SetFrameSlot(output_offset, value); 643 output_frame->SetFrameSlot(output_offset, value);
644 intptr_t fp_value = top_address + output_offset; 644 intptr_t fp_value = top_address + output_offset;
645 output_frame->SetFp(fp_value); 645 output_frame->SetFp(fp_value);
646 if (FLAG_trace_deopt) { 646 if (trace_) {
647 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; caller's fp\n", 647 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; caller's fp\n",
648 fp_value, output_offset, value); 648 fp_value, output_offset, value);
649 } 649 }
650 650
651 // The context can be gotten from the previous frame. 651 // The context can be gotten from the previous frame.
652 output_offset -= kPointerSize; 652 output_offset -= kPointerSize;
653 value = output_[frame_index - 1]->GetContext(); 653 value = output_[frame_index - 1]->GetContext();
654 output_frame->SetFrameSlot(output_offset, value); 654 output_frame->SetFrameSlot(output_offset, value);
655 if (FLAG_trace_deopt) { 655 if (trace_) {
656 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; context\n", 656 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; context\n",
657 top_address + output_offset, output_offset, value); 657 top_address + output_offset, output_offset, value);
658 } 658 }
659 659
660 // A marker value is used in place of the function. 660 // A marker value is used in place of the function.
661 output_offset -= kPointerSize; 661 output_offset -= kPointerSize;
662 value = reinterpret_cast<intptr_t>(Smi::FromInt(StackFrame::CONSTRUCT)); 662 value = reinterpret_cast<intptr_t>(Smi::FromInt(StackFrame::CONSTRUCT));
663 output_frame->SetFrameSlot(output_offset, value); 663 output_frame->SetFrameSlot(output_offset, value);
664 if (FLAG_trace_deopt) { 664 if (trace_) {
665 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; function (construct sentinel)\n", 665 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; function (construct sentinel)\n",
666 top_address + output_offset, output_offset, value); 666 top_address + output_offset, output_offset, value);
667 } 667 }
668 668
669 // The output frame reflects a JSConstructStubGeneric frame. 669 // The output frame reflects a JSConstructStubGeneric frame.
670 output_offset -= kPointerSize; 670 output_offset -= kPointerSize;
671 value = reinterpret_cast<intptr_t>(construct_stub); 671 value = reinterpret_cast<intptr_t>(construct_stub);
672 output_frame->SetFrameSlot(output_offset, value); 672 output_frame->SetFrameSlot(output_offset, value);
673 if (FLAG_trace_deopt) { 673 if (trace_) {
674 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; code object\n", 674 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; code object\n",
675 top_address + output_offset, output_offset, value); 675 top_address + output_offset, output_offset, value);
676 } 676 }
677 677
678 // Number of incoming arguments. 678 // Number of incoming arguments.
679 output_offset -= kPointerSize; 679 output_offset -= kPointerSize;
680 value = reinterpret_cast<uint32_t>(Smi::FromInt(height - 1)); 680 value = reinterpret_cast<uint32_t>(Smi::FromInt(height - 1));
681 output_frame->SetFrameSlot(output_offset, value); 681 output_frame->SetFrameSlot(output_offset, value);
682 if (FLAG_trace_deopt) { 682 if (trace_) {
683 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; argc (%d)\n", 683 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; argc (%d)\n",
684 top_address + output_offset, output_offset, value, height - 1); 684 top_address + output_offset, output_offset, value, height - 1);
685 } 685 }
686 686
687 // Constructor function being invoked by the stub. 687 // Constructor function being invoked by the stub.
688 output_offset -= kPointerSize; 688 output_offset -= kPointerSize;
689 value = reinterpret_cast<intptr_t>(function); 689 value = reinterpret_cast<intptr_t>(function);
690 output_frame->SetFrameSlot(output_offset, value); 690 output_frame->SetFrameSlot(output_offset, value);
691 if (FLAG_trace_deopt) { 691 if (trace_) {
692 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; constructor function\n", 692 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; constructor function\n",
693 top_address + output_offset, output_offset, value); 693 top_address + output_offset, output_offset, value);
694 } 694 }
695 695
696 // The newly allocated object was passed as receiver in the artificial 696 // The newly allocated object was passed as receiver in the artificial
697 // constructor stub environment created by HEnvironment::CopyForInlining(). 697 // constructor stub environment created by HEnvironment::CopyForInlining().
698 output_offset -= kPointerSize; 698 output_offset -= kPointerSize;
699 value = output_frame->GetFrameSlot(output_frame_size - kPointerSize); 699 value = output_frame->GetFrameSlot(output_frame_size - kPointerSize);
700 output_frame->SetFrameSlot(output_offset, value); 700 output_frame->SetFrameSlot(output_offset, value);
701 if (FLAG_trace_deopt) { 701 if (trace_) {
702 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; allocated receiver\n", 702 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; allocated receiver\n",
703 top_address + output_offset, output_offset, value); 703 top_address + output_offset, output_offset, value);
704 } 704 }
705 705
706 ASSERT(0 == output_offset); 706 ASSERT(0 == output_offset);
707 707
708 uint32_t pc = reinterpret_cast<uint32_t>( 708 uint32_t pc = reinterpret_cast<uint32_t>(
709 construct_stub->instruction_start() + 709 construct_stub->instruction_start() +
710 isolate_->heap()->construct_stub_deopt_pc_offset()->value()); 710 isolate_->heap()->construct_stub_deopt_pc_offset()->value());
711 output_frame->SetPc(pc); 711 output_frame->SetPc(pc);
712 } 712 }
713 713
714 714
715 void Deoptimizer::DoComputeAccessorStubFrame(TranslationIterator* iterator, 715 void Deoptimizer::DoComputeAccessorStubFrame(TranslationIterator* iterator,
716 int frame_index, 716 int frame_index,
717 bool is_setter_stub_frame) { 717 bool is_setter_stub_frame) {
718 JSFunction* accessor = JSFunction::cast(ComputeLiteral(iterator->Next())); 718 JSFunction* accessor = JSFunction::cast(ComputeLiteral(iterator->Next()));
719 // The receiver (and the implicit return value, if any) are expected in 719 // The receiver (and the implicit return value, if any) are expected in
720 // registers by the LoadIC/StoreIC, so they don't belong to the output stack 720 // registers by the LoadIC/StoreIC, so they don't belong to the output stack
721 // frame. This means that we have to use a height of 0. 721 // frame. This means that we have to use a height of 0.
722 unsigned height = 0; 722 unsigned height = 0;
723 unsigned height_in_bytes = height * kPointerSize; 723 unsigned height_in_bytes = height * kPointerSize;
724 const char* kind = is_setter_stub_frame ? "setter" : "getter"; 724 const char* kind = is_setter_stub_frame ? "setter" : "getter";
725 if (FLAG_trace_deopt) { 725 if (trace_) {
726 PrintF(" translating %s stub => height=%u\n", kind, height_in_bytes); 726 PrintF(" translating %s stub => height=%u\n", kind, height_in_bytes);
727 } 727 }
728 728
729 // We need 5 stack entries from StackFrame::INTERNAL (lr, fp, cp, frame type, 729 // We need 5 stack entries from StackFrame::INTERNAL (lr, fp, cp, frame type,
730 // code object, see MacroAssembler::EnterFrame). For a setter stub frames we 730 // code object, see MacroAssembler::EnterFrame). For a setter stub frames we
731 // need one additional entry for the implicit return value, see 731 // need one additional entry for the implicit return value, see
732 // StoreStubCompiler::CompileStoreViaSetter. 732 // StoreStubCompiler::CompileStoreViaSetter.
733 unsigned fixed_frame_entries = 5 + (is_setter_stub_frame ? 1 : 0); 733 unsigned fixed_frame_entries = 5 + (is_setter_stub_frame ? 1 : 0);
734 unsigned fixed_frame_size = fixed_frame_entries * kPointerSize; 734 unsigned fixed_frame_size = fixed_frame_entries * kPointerSize;
735 unsigned output_frame_size = height_in_bytes + fixed_frame_size; 735 unsigned output_frame_size = height_in_bytes + fixed_frame_size;
(...skipping 12 matching lines...) Expand all
748 // this frame's size. 748 // this frame's size.
749 uint32_t top_address = output_[frame_index - 1]->GetTop() - output_frame_size; 749 uint32_t top_address = output_[frame_index - 1]->GetTop() - output_frame_size;
750 output_frame->SetTop(top_address); 750 output_frame->SetTop(top_address);
751 751
752 unsigned output_offset = output_frame_size; 752 unsigned output_offset = output_frame_size;
753 753
754 // Read caller's PC from the previous frame. 754 // Read caller's PC from the previous frame.
755 output_offset -= kPointerSize; 755 output_offset -= kPointerSize;
756 intptr_t callers_pc = output_[frame_index - 1]->GetPc(); 756 intptr_t callers_pc = output_[frame_index - 1]->GetPc();
757 output_frame->SetFrameSlot(output_offset, callers_pc); 757 output_frame->SetFrameSlot(output_offset, callers_pc);
758 if (FLAG_trace_deopt) { 758 if (trace_) {
759 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 759 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
760 " ; caller's pc\n", 760 " ; caller's pc\n",
761 top_address + output_offset, output_offset, callers_pc); 761 top_address + output_offset, output_offset, callers_pc);
762 } 762 }
763 763
764 // Read caller's FP from the previous frame, and set this frame's FP. 764 // Read caller's FP from the previous frame, and set this frame's FP.
765 output_offset -= kPointerSize; 765 output_offset -= kPointerSize;
766 intptr_t value = output_[frame_index - 1]->GetFp(); 766 intptr_t value = output_[frame_index - 1]->GetFp();
767 output_frame->SetFrameSlot(output_offset, value); 767 output_frame->SetFrameSlot(output_offset, value);
768 intptr_t fp_value = top_address + output_offset; 768 intptr_t fp_value = top_address + output_offset;
769 output_frame->SetFp(fp_value); 769 output_frame->SetFp(fp_value);
770 if (FLAG_trace_deopt) { 770 if (trace_) {
771 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 771 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
772 " ; caller's fp\n", 772 " ; caller's fp\n",
773 fp_value, output_offset, value); 773 fp_value, output_offset, value);
774 } 774 }
775 775
776 // The context can be gotten from the previous frame. 776 // The context can be gotten from the previous frame.
777 output_offset -= kPointerSize; 777 output_offset -= kPointerSize;
778 value = output_[frame_index - 1]->GetContext(); 778 value = output_[frame_index - 1]->GetContext();
779 output_frame->SetFrameSlot(output_offset, value); 779 output_frame->SetFrameSlot(output_offset, value);
780 if (FLAG_trace_deopt) { 780 if (trace_) {
781 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 781 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
782 " ; context\n", 782 " ; context\n",
783 top_address + output_offset, output_offset, value); 783 top_address + output_offset, output_offset, value);
784 } 784 }
785 785
786 // A marker value is used in place of the function. 786 // A marker value is used in place of the function.
787 output_offset -= kPointerSize; 787 output_offset -= kPointerSize;
788 value = reinterpret_cast<intptr_t>(Smi::FromInt(StackFrame::INTERNAL)); 788 value = reinterpret_cast<intptr_t>(Smi::FromInt(StackFrame::INTERNAL));
789 output_frame->SetFrameSlot(output_offset, value); 789 output_frame->SetFrameSlot(output_offset, value);
790 if (FLAG_trace_deopt) { 790 if (trace_) {
791 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 791 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
792 " ; function (%s sentinel)\n", 792 " ; function (%s sentinel)\n",
793 top_address + output_offset, output_offset, value, kind); 793 top_address + output_offset, output_offset, value, kind);
794 } 794 }
795 795
796 // Get Code object from accessor stub. 796 // Get Code object from accessor stub.
797 output_offset -= kPointerSize; 797 output_offset -= kPointerSize;
798 Builtins::Name name = is_setter_stub_frame ? 798 Builtins::Name name = is_setter_stub_frame ?
799 Builtins::kStoreIC_Setter_ForDeopt : 799 Builtins::kStoreIC_Setter_ForDeopt :
800 Builtins::kLoadIC_Getter_ForDeopt; 800 Builtins::kLoadIC_Getter_ForDeopt;
801 Code* accessor_stub = isolate_->builtins()->builtin(name); 801 Code* accessor_stub = isolate_->builtins()->builtin(name);
802 value = reinterpret_cast<intptr_t>(accessor_stub); 802 value = reinterpret_cast<intptr_t>(accessor_stub);
803 output_frame->SetFrameSlot(output_offset, value); 803 output_frame->SetFrameSlot(output_offset, value);
804 if (FLAG_trace_deopt) { 804 if (trace_) {
805 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 805 PrintF(" 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
806 " ; code object\n", 806 " ; code object\n",
807 top_address + output_offset, output_offset, value); 807 top_address + output_offset, output_offset, value);
808 } 808 }
809 809
810 // Skip receiver. 810 // Skip receiver.
811 Translation::Opcode opcode = 811 Translation::Opcode opcode =
812 static_cast<Translation::Opcode>(iterator->Next()); 812 static_cast<Translation::Opcode>(iterator->Next());
813 iterator->Skip(Translation::NumberOfOperandsFor(opcode)); 813 iterator->Skip(Translation::NumberOfOperandsFor(opcode));
814 814
(...skipping 25 matching lines...) Expand all
840 if (frame_index != 0) { 840 if (frame_index != 0) {
841 function = JSFunction::cast(ComputeLiteral(iterator->Next())); 841 function = JSFunction::cast(ComputeLiteral(iterator->Next()));
842 } else { 842 } else {
843 int closure_id = iterator->Next(); 843 int closure_id = iterator->Next();
844 USE(closure_id); 844 USE(closure_id);
845 ASSERT_EQ(Translation::kSelfLiteralId, closure_id); 845 ASSERT_EQ(Translation::kSelfLiteralId, closure_id);
846 function = function_; 846 function = function_;
847 } 847 }
848 unsigned height = iterator->Next(); 848 unsigned height = iterator->Next();
849 unsigned height_in_bytes = height * kPointerSize; 849 unsigned height_in_bytes = height * kPointerSize;
850 if (FLAG_trace_deopt) { 850 if (trace_) {
851 PrintF(" translating "); 851 PrintF(" translating ");
852 function->PrintName(); 852 function->PrintName();
853 PrintF(" => node=%d, height=%d\n", node_id.ToInt(), height_in_bytes); 853 PrintF(" => node=%d, height=%d\n", node_id.ToInt(), height_in_bytes);
854 } 854 }
855 855
856 // The 'fixed' part of the frame consists of the incoming parameters and 856 // The 'fixed' part of the frame consists of the incoming parameters and
857 // the part described by JavaScriptFrameConstants. 857 // the part described by JavaScriptFrameConstants.
858 unsigned fixed_frame_size = ComputeFixedSize(function); 858 unsigned fixed_frame_size = ComputeFixedSize(function);
859 unsigned input_frame_size = input_->GetFrameSize(); 859 unsigned input_frame_size = input_->GetFrameSize();
860 unsigned output_frame_size = height_in_bytes + fixed_frame_size; 860 unsigned output_frame_size = height_in_bytes + fixed_frame_size;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 // function code and AST id of the bailout. 904 // function code and AST id of the bailout.
905 output_offset -= kPointerSize; 905 output_offset -= kPointerSize;
906 input_offset -= kPointerSize; 906 input_offset -= kPointerSize;
907 intptr_t value; 907 intptr_t value;
908 if (is_bottommost) { 908 if (is_bottommost) {
909 value = input_->GetFrameSlot(input_offset); 909 value = input_->GetFrameSlot(input_offset);
910 } else { 910 } else {
911 value = output_[frame_index - 1]->GetPc(); 911 value = output_[frame_index - 1]->GetPc();
912 } 912 }
913 output_frame->SetFrameSlot(output_offset, value); 913 output_frame->SetFrameSlot(output_offset, value);
914 if (FLAG_trace_deopt) { 914 if (trace_) {
915 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; caller's pc\n", 915 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; caller's pc\n",
916 top_address + output_offset, output_offset, value); 916 top_address + output_offset, output_offset, value);
917 } 917 }
918 918
919 // The caller's frame pointer for the bottommost output frame is the same 919 // The caller's frame pointer for the bottommost output frame is the same
920 // as in the input frame. For all subsequent output frames, it can be 920 // as in the input frame. For all subsequent output frames, it can be
921 // read from the previous one. Also compute and set this frame's frame 921 // read from the previous one. Also compute and set this frame's frame
922 // pointer. 922 // pointer.
923 output_offset -= kPointerSize; 923 output_offset -= kPointerSize;
924 input_offset -= kPointerSize; 924 input_offset -= kPointerSize;
925 if (is_bottommost) { 925 if (is_bottommost) {
926 value = input_->GetFrameSlot(input_offset); 926 value = input_->GetFrameSlot(input_offset);
927 } else { 927 } else {
928 value = output_[frame_index - 1]->GetFp(); 928 value = output_[frame_index - 1]->GetFp();
929 } 929 }
930 output_frame->SetFrameSlot(output_offset, value); 930 output_frame->SetFrameSlot(output_offset, value);
931 intptr_t fp_value = top_address + output_offset; 931 intptr_t fp_value = top_address + output_offset;
932 ASSERT(!is_bottommost || input_->GetRegister(fp.code()) == fp_value); 932 ASSERT(!is_bottommost || input_->GetRegister(fp.code()) == fp_value);
933 output_frame->SetFp(fp_value); 933 output_frame->SetFp(fp_value);
934 if (is_topmost) { 934 if (is_topmost) {
935 output_frame->SetRegister(fp.code(), fp_value); 935 output_frame->SetRegister(fp.code(), fp_value);
936 } 936 }
937 if (FLAG_trace_deopt) { 937 if (trace_) {
938 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; caller's fp\n", 938 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; caller's fp\n",
939 fp_value, output_offset, value); 939 fp_value, output_offset, value);
940 } 940 }
941 941
942 // For the bottommost output frame the context can be gotten from the input 942 // For the bottommost output frame the context can be gotten from the input
943 // frame. For all subsequent output frames it can be gotten from the function 943 // frame. For all subsequent output frames it can be gotten from the function
944 // so long as we don't inline functions that need local contexts. 944 // so long as we don't inline functions that need local contexts.
945 output_offset -= kPointerSize; 945 output_offset -= kPointerSize;
946 input_offset -= kPointerSize; 946 input_offset -= kPointerSize;
947 if (is_bottommost) { 947 if (is_bottommost) {
948 value = input_->GetFrameSlot(input_offset); 948 value = input_->GetFrameSlot(input_offset);
949 } else { 949 } else {
950 value = reinterpret_cast<intptr_t>(function->context()); 950 value = reinterpret_cast<intptr_t>(function->context());
951 } 951 }
952 output_frame->SetFrameSlot(output_offset, value); 952 output_frame->SetFrameSlot(output_offset, value);
953 output_frame->SetContext(value); 953 output_frame->SetContext(value);
954 if (is_topmost) output_frame->SetRegister(cp.code(), value); 954 if (is_topmost) output_frame->SetRegister(cp.code(), value);
955 if (FLAG_trace_deopt) { 955 if (trace_) {
956 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; context\n", 956 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; context\n",
957 top_address + output_offset, output_offset, value); 957 top_address + output_offset, output_offset, value);
958 } 958 }
959 959
960 // The function was mentioned explicitly in the BEGIN_FRAME. 960 // The function was mentioned explicitly in the BEGIN_FRAME.
961 output_offset -= kPointerSize; 961 output_offset -= kPointerSize;
962 input_offset -= kPointerSize; 962 input_offset -= kPointerSize;
963 value = reinterpret_cast<uint32_t>(function); 963 value = reinterpret_cast<uint32_t>(function);
964 // The function for the bottommost output frame should also agree with the 964 // The function for the bottommost output frame should also agree with the
965 // input frame. 965 // input frame.
966 ASSERT(!is_bottommost || input_->GetFrameSlot(input_offset) == value); 966 ASSERT(!is_bottommost || input_->GetFrameSlot(input_offset) == value);
967 output_frame->SetFrameSlot(output_offset, value); 967 output_frame->SetFrameSlot(output_offset, value);
968 if (FLAG_trace_deopt) { 968 if (trace_) {
969 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; function\n", 969 PrintF(" 0x%08x: [top + %d] <- 0x%08x ; function\n",
970 top_address + output_offset, output_offset, value); 970 top_address + output_offset, output_offset, value);
971 } 971 }
972 972
973 // Translate the rest of the frame. 973 // Translate the rest of the frame.
974 for (unsigned i = 0; i < height; ++i) { 974 for (unsigned i = 0; i < height; ++i) {
975 output_offset -= kPointerSize; 975 output_offset -= kPointerSize;
976 DoTranslateCommand(iterator, frame_index, output_offset); 976 DoTranslateCommand(iterator, frame_index, output_offset);
977 } 977 }
978 ASSERT(0 == output_offset); 978 ASSERT(0 == output_offset);
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 __ push(ip); 1268 __ push(ip);
1269 __ b(&done); 1269 __ b(&done);
1270 ASSERT(masm()->pc_offset() - start == table_entry_size_); 1270 ASSERT(masm()->pc_offset() - start == table_entry_size_);
1271 } 1271 }
1272 __ bind(&done); 1272 __ bind(&done);
1273 } 1273 }
1274 1274
1275 #undef __ 1275 #undef __
1276 1276
1277 } } // namespace v8::internal 1277 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « no previous file | src/deoptimizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698