OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 | 6 |
7 #include "src/address-map.h" | 7 #include "src/address-map.h" |
8 #include "src/base/adapters.h" | 8 #include "src/base/adapters.h" |
9 #include "src/compilation-info.h" | 9 #include "src/compilation-info.h" |
10 #include "src/compiler/code-generator-impl.h" | 10 #include "src/compiler/code-generator-impl.h" |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 for (OutOfLineCode* ool = ools_; ool; ool = ool->next()) { | 181 for (OutOfLineCode* ool = ools_; ool; ool = ool->next()) { |
182 masm()->bind(ool->entry()); | 182 masm()->bind(ool->entry()); |
183 ool->Generate(); | 183 ool->Generate(); |
184 if (ool->exit()->is_bound()) masm()->jmp(ool->exit()); | 184 if (ool->exit()->is_bound()) masm()->jmp(ool->exit()); |
185 } | 185 } |
186 } | 186 } |
187 | 187 |
188 // Assemble all eager deoptimization exits. | 188 // Assemble all eager deoptimization exits. |
189 for (DeoptimizationExit* exit : deoptimization_exits_) { | 189 for (DeoptimizationExit* exit : deoptimization_exits_) { |
190 masm()->bind(exit->label()); | 190 masm()->bind(exit->label()); |
191 AssembleDeoptimizerCall(exit->deoptimization_id(), Deoptimizer::EAGER); | 191 AssembleDeoptimizerCall(exit->deoptimization_id(), Deoptimizer::EAGER, |
| 192 exit->pos()); |
192 } | 193 } |
193 | 194 |
194 // Ensure there is space for lazy deoptimization in the code. | 195 // Ensure there is space for lazy deoptimization in the code. |
195 if (info->ShouldEnsureSpaceForLazyDeopt()) { | 196 if (info->ShouldEnsureSpaceForLazyDeopt()) { |
196 int target_offset = masm()->pc_offset() + Deoptimizer::patch_size(); | 197 int target_offset = masm()->pc_offset() + Deoptimizer::patch_size(); |
197 while (masm()->pc_offset() < target_offset) { | 198 while (masm()->pc_offset() < target_offset) { |
198 masm()->nop(); | 199 masm()->nop(); |
199 } | 200 } |
200 } | 201 } |
201 | 202 |
(...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
924 | 925 |
925 | 926 |
926 void CodeGenerator::MarkLazyDeoptSite() { | 927 void CodeGenerator::MarkLazyDeoptSite() { |
927 last_lazy_deopt_pc_ = masm()->pc_offset(); | 928 last_lazy_deopt_pc_ = masm()->pc_offset(); |
928 } | 929 } |
929 | 930 |
930 DeoptimizationExit* CodeGenerator::AddDeoptimizationExit( | 931 DeoptimizationExit* CodeGenerator::AddDeoptimizationExit( |
931 Instruction* instr, size_t frame_state_offset) { | 932 Instruction* instr, size_t frame_state_offset) { |
932 int const deoptimization_id = BuildTranslation( | 933 int const deoptimization_id = BuildTranslation( |
933 instr, -1, frame_state_offset, OutputFrameStateCombine::Ignore()); | 934 instr, -1, frame_state_offset, OutputFrameStateCombine::Ignore()); |
934 DeoptimizationExit* const exit = | 935 DeoptimizationExit* const exit = new (zone()) |
935 new (zone()) DeoptimizationExit(deoptimization_id); | 936 DeoptimizationExit(deoptimization_id, current_source_position_); |
936 deoptimization_exits_.push_back(exit); | 937 deoptimization_exits_.push_back(exit); |
937 return exit; | 938 return exit; |
938 } | 939 } |
939 | 940 |
940 OutOfLineCode::OutOfLineCode(CodeGenerator* gen) | 941 OutOfLineCode::OutOfLineCode(CodeGenerator* gen) |
941 : frame_(gen->frame()), masm_(gen->masm()), next_(gen->ools_) { | 942 : frame_(gen->frame()), masm_(gen->masm()), next_(gen->ools_) { |
942 gen->ools_ = this; | 943 gen->ools_ = this; |
943 } | 944 } |
944 | 945 |
945 | 946 |
946 OutOfLineCode::~OutOfLineCode() {} | 947 OutOfLineCode::~OutOfLineCode() {} |
947 | 948 |
948 } // namespace compiler | 949 } // namespace compiler |
949 } // namespace internal | 950 } // namespace internal |
950 } // namespace v8 | 951 } // namespace v8 |
OLD | NEW |