OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
6 #include "src/compiler/code-generator-impl.h" | 6 #include "src/compiler/code-generator-impl.h" |
7 #include "src/compiler/gap-resolver.h" | 7 #include "src/compiler/gap-resolver.h" |
8 #include "src/compiler/node-matchers.h" | 8 #include "src/compiler/node-matchers.h" |
9 #include "src/compiler/node-properties-inl.h" | 9 #include "src/compiler/node-properties-inl.h" |
10 #include "src/mips/macro-assembler-mips.h" | 10 #include "src/mips/macro-assembler-mips.h" |
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 // TODO(plind): make callee save size const, possibly DCHECK it. | 702 // TODO(plind): make callee save size const, possibly DCHECK it. |
703 int register_save_area_size = 0; | 703 int register_save_area_size = 0; |
704 for (int i = Register::kNumRegisters - 1; i >= 0; i--) { | 704 for (int i = Register::kNumRegisters - 1; i >= 0; i--) { |
705 if (!((1 << i) & saves)) continue; | 705 if (!((1 << i) & saves)) continue; |
706 register_save_area_size += kPointerSize; | 706 register_save_area_size += kPointerSize; |
707 } | 707 } |
708 frame()->SetRegisterSaveAreaSize(register_save_area_size); | 708 frame()->SetRegisterSaveAreaSize(register_save_area_size); |
709 __ MultiPush(saves); | 709 __ MultiPush(saves); |
710 } | 710 } |
711 } else if (descriptor->IsJSFunctionCall()) { | 711 } else if (descriptor->IsJSFunctionCall()) { |
712 CompilationInfo* info = linkage()->info(); | 712 CompilationInfo* info = this->info(); |
713 __ Prologue(info->IsCodePreAgingActive()); | 713 __ Prologue(info->IsCodePreAgingActive()); |
714 frame()->SetRegisterSaveAreaSize( | 714 frame()->SetRegisterSaveAreaSize( |
715 StandardFrameConstants::kFixedFrameSizeFromFp); | 715 StandardFrameConstants::kFixedFrameSizeFromFp); |
716 | 716 |
717 // Sloppy mode functions and builtins need to replace the receiver with the | 717 // Sloppy mode functions and builtins need to replace the receiver with the |
718 // global proxy when called as functions (without an explicit receiver | 718 // global proxy when called as functions (without an explicit receiver |
719 // object). | 719 // object). |
720 // TODO(mstarzinger/verwaest): Should this be moved back into the CallIC? | 720 // TODO(mstarzinger/verwaest): Should this be moved back into the CallIC? |
721 if (info->strict_mode() == SLOPPY && !info->is_native()) { | 721 if (info->strict_mode() == SLOPPY && !info->is_native()) { |
722 Label ok; | 722 Label ok; |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
935 | 935 |
936 void CodeGenerator::AddNopForSmiCodeInlining() { | 936 void CodeGenerator::AddNopForSmiCodeInlining() { |
937 // Unused on 32-bit ARM. Still exists on 64-bit arm. | 937 // Unused on 32-bit ARM. Still exists on 64-bit arm. |
938 // TODO(plind): Unclear when this is called now. Understand, fix if needed. | 938 // TODO(plind): Unclear when this is called now. Understand, fix if needed. |
939 __ nop(); // Maybe PROPERTY_ACCESS_INLINED? | 939 __ nop(); // Maybe PROPERTY_ACCESS_INLINED? |
940 } | 940 } |
941 | 941 |
942 | 942 |
943 void CodeGenerator::EnsureSpaceForLazyDeopt() { | 943 void CodeGenerator::EnsureSpaceForLazyDeopt() { |
944 int space_needed = Deoptimizer::patch_size(); | 944 int space_needed = Deoptimizer::patch_size(); |
945 if (!linkage()->info()->IsStub()) { | 945 if (!info()->IsStub()) { |
946 // Ensure that we have enough space after the previous lazy-bailout | 946 // Ensure that we have enough space after the previous lazy-bailout |
947 // instruction for patching the code here. | 947 // instruction for patching the code here. |
948 int current_pc = masm()->pc_offset(); | 948 int current_pc = masm()->pc_offset(); |
949 if (current_pc < last_lazy_deopt_pc_ + space_needed) { | 949 if (current_pc < last_lazy_deopt_pc_ + space_needed) { |
950 // Block tramoline pool emission for duration of padding. | 950 // Block tramoline pool emission for duration of padding. |
951 v8::internal::Assembler::BlockTrampolinePoolScope block_trampoline_pool( | 951 v8::internal::Assembler::BlockTrampolinePoolScope block_trampoline_pool( |
952 masm()); | 952 masm()); |
953 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 953 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
954 DCHECK_EQ(0, padding_size % v8::internal::Assembler::kInstrSize); | 954 DCHECK_EQ(0, padding_size % v8::internal::Assembler::kInstrSize); |
955 while (padding_size > 0) { | 955 while (padding_size > 0) { |
956 __ nop(); | 956 __ nop(); |
957 padding_size -= v8::internal::Assembler::kInstrSize; | 957 padding_size -= v8::internal::Assembler::kInstrSize; |
958 } | 958 } |
959 } | 959 } |
960 } | 960 } |
961 MarkLazyDeoptSite(); | 961 MarkLazyDeoptSite(); |
962 } | 962 } |
963 | 963 |
964 #undef __ | 964 #undef __ |
965 | 965 |
966 } // namespace compiler | 966 } // namespace compiler |
967 } // namespace internal | 967 } // namespace internal |
968 } // namespace v8 | 968 } // namespace v8 |
OLD | NEW |