| 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 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 | 430 |
| 431 // Preserve IC data and arguments descriptor. | 431 // Preserve IC data and arguments descriptor. |
| 432 __ PushList((1 << R4) | (1 << R5)); | 432 __ PushList((1 << R4) | (1 << R5)); |
| 433 | 433 |
| 434 // Push space for the return value. | 434 // Push space for the return value. |
| 435 // Push the receiver. | 435 // Push the receiver. |
| 436 // Push IC data object. | 436 // Push IC data object. |
| 437 // Push arguments descriptor array. | 437 // Push arguments descriptor array. |
| 438 __ LoadImmediate(IP, reinterpret_cast<intptr_t>(Object::null())); | 438 __ LoadImmediate(IP, reinterpret_cast<intptr_t>(Object::null())); |
| 439 __ PushList((1 << R4) | (1 << R5) | (1 << R6) | (1 << IP)); | 439 __ PushList((1 << R4) | (1 << R5) | (1 << R6) | (1 << IP)); |
| 440 | |
| 441 // R2: Smi-tagged arguments array length. | |
| 442 PushArgumentsArray(assembler); | |
| 443 | |
| 444 __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry); | 440 __ CallRuntime(kMegamorphicCacheMissHandlerRuntimeEntry); |
| 445 // Remove arguments. | 441 // Remove arguments. |
| 446 __ Drop(4); | 442 __ Drop(3); |
| 447 __ Pop(R0); // Get result into R0. | 443 __ Pop(R0); // Get result into R0. |
| 448 | 444 |
| 449 // Restore IC data and arguments descriptor. | 445 // Restore IC data and arguments descriptor. |
| 450 __ PopList((1 << R4) | (1 << R5)); | 446 __ PopList((1 << R4) | (1 << R5)); |
| 451 | 447 |
| 452 __ LeaveStubFrame(); | 448 __ LeaveStubFrame(); |
| 453 | 449 |
| 454 __ CompareImmediate(R0, reinterpret_cast<intptr_t>(Object::null())); | 450 __ CompareImmediate(R0, reinterpret_cast<intptr_t>(Object::null())); |
| 455 __ Branch(&StubCode::InstanceFunctionLookupLabel(), EQ); | 451 __ Branch(&StubCode::InstanceFunctionLookupLabel(), EQ); |
| 456 __ AddImmediate(R0, Instructions::HeaderSize() - kHeapObjectTag); | 452 __ AddImmediate(R0, Instructions::HeaderSize() - kHeapObjectTag); |
| (...skipping 1527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1984 __ Bind(&reference_compare); | 1980 __ Bind(&reference_compare); |
| 1985 __ cmp(left, ShifterOperand(right)); | 1981 __ cmp(left, ShifterOperand(right)); |
| 1986 __ Bind(&done); | 1982 __ Bind(&done); |
| 1987 __ PopList((1 << R0) | (1 << R1) | (1 << R2)); | 1983 __ PopList((1 << R0) | (1 << R1) | (1 << R2)); |
| 1988 __ Ret(); | 1984 __ Ret(); |
| 1989 } | 1985 } |
| 1990 | 1986 |
| 1991 } // namespace dart | 1987 } // namespace dart |
| 1992 | 1988 |
| 1993 #endif // defined TARGET_ARCH_ARM | 1989 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |