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" | 5 #include "vm/globals.h" |
6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
7 | 7 |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/code_generator.h" | 9 #include "vm/code_generator.h" |
10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
(...skipping 1740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1751 | 1751 |
1752 | 1752 |
1753 void StubCode::GenerateTwoArgsUnoptimizedStaticCallStub(Assembler* assembler) { | 1753 void StubCode::GenerateTwoArgsUnoptimizedStaticCallStub(Assembler* assembler) { |
1754 GenerateUsageCounterIncrement(assembler, R6); | 1754 GenerateUsageCounterIncrement(assembler, R6); |
1755 GenerateNArgsCheckInlineCacheStub( | 1755 GenerateNArgsCheckInlineCacheStub( |
1756 assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry); | 1756 assembler, 2, kStaticCallMissHandlerTwoArgsRuntimeEntry); |
1757 } | 1757 } |
1758 | 1758 |
1759 | 1759 |
1760 void StubCode::GenerateBreakpointRuntimeStub(Assembler* assembler) { | 1760 void StubCode::GenerateBreakpointRuntimeStub(Assembler* assembler) { |
1761 __ Unimplemented("BreakpointRuntime stub"); | 1761 __ Comment("BreakpointRuntime stub"); |
| 1762 __ EnterStubFrame(); |
| 1763 __ LoadImmediate(R0, reinterpret_cast<intptr_t>(Object::null())); |
| 1764 // Preserve arguments descriptor and make room for result. |
| 1765 __ PushList((1 << R0) | (1 << R4) | (1 << R5)); |
| 1766 __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
| 1767 __ PopList((1 << R0) | (1 << R4) | (1 << R5)); |
| 1768 __ LeaveStubFrame(); |
| 1769 __ bx(R0); |
1762 } | 1770 } |
1763 | 1771 |
1764 | 1772 |
1765 // LR: return address (Dart code). | 1773 // LR: return address (Dart code). |
1766 // R5: IC data (unoptimized static call). | 1774 // R5: IC data (unoptimized static call). |
1767 void StubCode::GenerateBreakpointStaticStub(Assembler* assembler) { | 1775 void StubCode::GenerateBreakpointStaticStub(Assembler* assembler) { |
1768 // Create a stub frame as we are pushing some objects on the stack before | 1776 // Create a stub frame as we are pushing some objects on the stack before |
1769 // calling into the runtime. | 1777 // calling into the runtime. |
1770 __ EnterStubFrame(); | 1778 __ EnterStubFrame(); |
1771 __ LoadImmediate(R0, reinterpret_cast<intptr_t>(Object::null())); | 1779 __ LoadImmediate(R0, reinterpret_cast<intptr_t>(Object::null())); |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2183 __ ldr(left, Address(SP, 4 * kWordSize)); | 2191 __ ldr(left, Address(SP, 4 * kWordSize)); |
2184 __ ldr(right, Address(SP, 3 * kWordSize)); | 2192 __ ldr(right, Address(SP, 3 * kWordSize)); |
2185 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); | 2193 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); |
2186 __ PopList((1 << R0) | (1 << R1) | (1 << R2)); | 2194 __ PopList((1 << R0) | (1 << R1) | (1 << R2)); |
2187 __ Ret(); | 2195 __ Ret(); |
2188 } | 2196 } |
2189 | 2197 |
2190 } // namespace dart | 2198 } // namespace dart |
2191 | 2199 |
2192 #endif // defined TARGET_ARCH_ARM | 2200 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |