| 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/globals.h" // Needed here to get TARGET_ARCH_ARM. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. |
| 6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
| 7 | 7 |
| 8 #include "vm/flow_graph_compiler.h" | 8 #include "vm/flow_graph_compiler.h" |
| 9 | 9 |
| 10 #include "lib/error.h" | 10 #include "lib/error.h" |
| (...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 if (CanOptimizeFunction() && function.is_optimizable()) { | 689 if (CanOptimizeFunction() && function.is_optimizable()) { |
| 690 const bool can_optimize = !is_optimizing() || may_reoptimize(); | 690 const bool can_optimize = !is_optimizing() || may_reoptimize(); |
| 691 const Register function_reg = R6; | 691 const Register function_reg = R6; |
| 692 if (can_optimize) { | 692 if (can_optimize) { |
| 693 // The pool pointer is not setup before entering the Dart frame. | 693 // The pool pointer is not setup before entering the Dart frame. |
| 694 | 694 |
| 695 // Preserve PP of caller. | 695 // Preserve PP of caller. |
| 696 __ mov(R7, ShifterOperand(PP)); | 696 __ mov(R7, ShifterOperand(PP)); |
| 697 | 697 |
| 698 // Temporarily setup pool pointer for this dart function. | 698 // Temporarily setup pool pointer for this dart function. |
| 699 const intptr_t object_pool_pc_dist = | 699 __ LoadPoolPointer(); |
| 700 Instructions::HeaderSize() - Instructions::object_pool_offset() + | |
| 701 assembler()->CodeSize() + Instr::kPCReadOffset; | |
| 702 __ ldr(PP, Address(PC, -object_pool_pc_dist)); | |
| 703 | 700 |
| 704 // Load function object from object pool. | 701 // Load function object from object pool. |
| 705 __ LoadObject(function_reg, function); // Uses PP. | 702 __ LoadObject(function_reg, function); // Uses PP. |
| 706 | 703 |
| 707 // Restore PP of caller. | 704 // Restore PP of caller. |
| 708 __ mov(PP, ShifterOperand(R7)); | 705 __ mov(PP, ShifterOperand(R7)); |
| 709 } | 706 } |
| 710 // Patch point is after the eventually inlined function object. | 707 // Patch point is after the eventually inlined function object. |
| 711 AddCurrentDescriptor(PcDescriptors::kEntryPatch, | 708 AddCurrentDescriptor(PcDescriptors::kEntryPatch, |
| 712 Isolate::kNoDeoptId, | 709 Isolate::kNoDeoptId, |
| (...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1319 void ParallelMoveResolver::RestoreFpuScratch(FpuRegister reg) { | 1316 void ParallelMoveResolver::RestoreFpuScratch(FpuRegister reg) { |
| 1320 __ vldrd(reg, Address(SP, kDoubleSize, Address::PostIndex)); | 1317 __ vldrd(reg, Address(SP, kDoubleSize, Address::PostIndex)); |
| 1321 } | 1318 } |
| 1322 | 1319 |
| 1323 | 1320 |
| 1324 #undef __ | 1321 #undef __ |
| 1325 | 1322 |
| 1326 } // namespace dart | 1323 } // namespace dart |
| 1327 | 1324 |
| 1328 #endif // defined TARGET_ARCH_ARM | 1325 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |