OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/deopt_instructions.h" | 5 #include "vm/deopt_instructions.h" |
6 | 6 |
7 #include "vm/assembler_macros.h" | 7 #include "vm/assembler.h" |
8 #include "vm/code_patcher.h" | 8 #include "vm/code_patcher.h" |
9 #include "vm/intermediate_language.h" | 9 #include "vm/intermediate_language.h" |
10 #include "vm/locations.h" | 10 #include "vm/locations.h" |
11 #include "vm/parser.h" | 11 #include "vm/parser.h" |
12 | 12 |
13 namespace dart { | 13 namespace dart { |
14 | 14 |
15 DEFINE_FLAG(bool, compress_deopt_info, true, | 15 DEFINE_FLAG(bool, compress_deopt_info, true, |
16 "Compress the size of the deoptimization info for optimized code."); | 16 "Compress the size of the deoptimization info for optimized code."); |
17 DECLARE_FLAG(bool, trace_deoptimization); | 17 DECLARE_FLAG(bool, trace_deoptimization); |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 return chars; | 433 return chars; |
434 } | 434 } |
435 | 435 |
436 void Execute(DeoptimizationContext* deopt_context, intptr_t to_index) { | 436 void Execute(DeoptimizationContext* deopt_context, intptr_t to_index) { |
437 Function& function = Function::Handle(deopt_context->isolate()); | 437 Function& function = Function::Handle(deopt_context->isolate()); |
438 function ^= deopt_context->ObjectAt(object_table_index_); | 438 function ^= deopt_context->ObjectAt(object_table_index_); |
439 const Code& code = | 439 const Code& code = |
440 Code::Handle(deopt_context->isolate(), function.unoptimized_code()); | 440 Code::Handle(deopt_context->isolate(), function.unoptimized_code()); |
441 ASSERT(!code.IsNull()); | 441 ASSERT(!code.IsNull()); |
442 intptr_t pc_marker = code.EntryPoint() + | 442 intptr_t pc_marker = code.EntryPoint() + |
443 AssemblerMacros::kOffsetOfSavedPCfromEntrypoint; | 443 Assembler::kOffsetOfSavedPCfromEntrypoint; |
444 intptr_t* to_addr = deopt_context->GetToFrameAddressAt(to_index); | 444 intptr_t* to_addr = deopt_context->GetToFrameAddressAt(to_index); |
445 *to_addr = pc_marker; | 445 *to_addr = pc_marker; |
446 // Increment the deoptimization counter. This effectively increments each | 446 // Increment the deoptimization counter. This effectively increments each |
447 // function occurring in the optimized frame. | 447 // function occurring in the optimized frame. |
448 function.set_deoptimization_counter(function.deoptimization_counter() + 1); | 448 function.set_deoptimization_counter(function.deoptimization_counter() + 1); |
449 if (FLAG_trace_deoptimization) { | 449 if (FLAG_trace_deoptimization) { |
450 OS::PrintErr("Deoptimizing inlined %s (count %d)\n", | 450 OS::PrintErr("Deoptimizing inlined %s (count %d)\n", |
451 function.ToFullyQualifiedCString(), | 451 function.ToFullyQualifiedCString(), |
452 function.deoptimization_counter()); | 452 function.deoptimization_counter()); |
453 } | 453 } |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 Smi* offset, | 816 Smi* offset, |
817 DeoptInfo* info, | 817 DeoptInfo* info, |
818 Smi* reason) { | 818 Smi* reason) { |
819 intptr_t i = index * kEntrySize; | 819 intptr_t i = index * kEntrySize; |
820 *offset ^= table.At(i); | 820 *offset ^= table.At(i); |
821 *info ^= table.At(i + 1); | 821 *info ^= table.At(i + 1); |
822 *reason ^= table.At(i + 2); | 822 *reason ^= table.At(i + 2); |
823 } | 823 } |
824 | 824 |
825 } // namespace dart | 825 } // namespace dart |
OLD | NEW |