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/cpu.h" | 10 #include "vm/cpu.h" |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 __ ldr(R0, FieldAddress(R0, Code::instructions_offset())); | 393 __ ldr(R0, FieldAddress(R0, Code::instructions_offset())); |
394 __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag); | 394 __ AddImmediate(R0, R0, Instructions::HeaderSize() - kHeapObjectTag); |
395 __ bx(R0); | 395 __ bx(R0); |
396 } | 396 } |
397 | 397 |
398 | 398 |
399 // Input parameters: | 399 // Input parameters: |
400 // R2: smi-tagged argument count, may be zero. | 400 // R2: smi-tagged argument count, may be zero. |
401 // FP[kParamEndSlotFromFp + 1]: last argument. | 401 // FP[kParamEndSlotFromFp + 1]: last argument. |
402 static void PushArgumentsArray(Assembler* assembler) { | 402 static void PushArgumentsArray(Assembler* assembler) { |
| 403 StubCode* stub_code = Isolate::Current()->stub_code(); |
403 // Allocate array to store arguments of caller. | 404 // Allocate array to store arguments of caller. |
404 __ LoadImmediate(R1, reinterpret_cast<intptr_t>(Object::null())); | 405 __ LoadImmediate(R1, reinterpret_cast<intptr_t>(Object::null())); |
405 // R1: null element type for raw Array. | 406 // R1: null element type for raw Array. |
406 // R2: smi-tagged argument count, may be zero. | 407 // R2: smi-tagged argument count, may be zero. |
407 __ BranchLink(&StubCode::AllocateArrayLabel()); | 408 __ BranchLink(&stub_code->AllocateArrayLabel()); |
408 // R0: newly allocated array. | 409 // R0: newly allocated array. |
409 // R2: smi-tagged argument count, may be zero (was preserved by the stub). | 410 // R2: smi-tagged argument count, may be zero (was preserved by the stub). |
410 __ Push(R0); // Array is in R0 and on top of stack. | 411 __ Push(R0); // Array is in R0 and on top of stack. |
411 __ add(R1, FP, Operand(R2, LSL, 1)); | 412 __ add(R1, FP, Operand(R2, LSL, 1)); |
412 __ AddImmediate(R1, kParamEndSlotFromFp * kWordSize); | 413 __ AddImmediate(R1, kParamEndSlotFromFp * kWordSize); |
413 __ AddImmediate(R3, R0, Array::data_offset() - kHeapObjectTag); | 414 __ AddImmediate(R3, R0, Array::data_offset() - kHeapObjectTag); |
414 // R1: address of first argument on stack. | 415 // R1: address of first argument on stack. |
415 // R3: address of first argument in array. | 416 // R3: address of first argument in array. |
416 Label loop; | 417 Label loop; |
417 __ Bind(&loop); | 418 __ Bind(&loop); |
(...skipping 1413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1831 const Register right = R0; | 1832 const Register right = R0; |
1832 __ ldr(left, Address(SP, 1 * kWordSize)); | 1833 __ ldr(left, Address(SP, 1 * kWordSize)); |
1833 __ ldr(right, Address(SP, 0 * kWordSize)); | 1834 __ ldr(right, Address(SP, 0 * kWordSize)); |
1834 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); | 1835 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp); |
1835 __ Ret(); | 1836 __ Ret(); |
1836 } | 1837 } |
1837 | 1838 |
1838 } // namespace dart | 1839 } // namespace dart |
1839 | 1840 |
1840 #endif // defined TARGET_ARCH_ARM | 1841 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |