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_MIPS) | 6 #if defined(TARGET_ARCH_MIPS) |
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 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 | 435 |
436 // Remove the stub frame. | 436 // Remove the stub frame. |
437 __ LeaveStubFrameAndReturn(T0); | 437 __ LeaveStubFrameAndReturn(T0); |
438 } | 438 } |
439 | 439 |
440 | 440 |
441 // Input parameters: | 441 // Input parameters: |
442 // A1: Smi-tagged argument count, may be zero. | 442 // A1: Smi-tagged argument count, may be zero. |
443 // FP[kParamEndSlotFromFp + 1]: Last argument. | 443 // FP[kParamEndSlotFromFp + 1]: Last argument. |
444 static void PushArgumentsArray(Assembler* assembler) { | 444 static void PushArgumentsArray(Assembler* assembler) { |
| 445 StubCode* stub_code = Isolate::Current()->stub_code(); |
445 __ TraceSimMsg("PushArgumentsArray"); | 446 __ TraceSimMsg("PushArgumentsArray"); |
446 // Allocate array to store arguments of caller. | 447 // Allocate array to store arguments of caller. |
447 __ LoadImmediate(A0, reinterpret_cast<intptr_t>(Object::null())); | 448 __ LoadImmediate(A0, reinterpret_cast<intptr_t>(Object::null())); |
448 // A0: Null element type for raw Array. | 449 // A0: Null element type for raw Array. |
449 // A1: Smi-tagged argument count, may be zero. | 450 // A1: Smi-tagged argument count, may be zero. |
450 __ BranchLink(&StubCode::AllocateArrayLabel()); | 451 __ BranchLink(&stub_code->AllocateArrayLabel()); |
451 __ TraceSimMsg("PushArgumentsArray return"); | 452 __ TraceSimMsg("PushArgumentsArray return"); |
452 // V0: newly allocated array. | 453 // V0: newly allocated array. |
453 // A1: Smi-tagged argument count, may be zero (was preserved by the stub). | 454 // A1: Smi-tagged argument count, may be zero (was preserved by the stub). |
454 __ Push(V0); // Array is in V0 and on top of stack. | 455 __ Push(V0); // Array is in V0 and on top of stack. |
455 __ sll(T1, A1, 1); | 456 __ sll(T1, A1, 1); |
456 __ addu(T1, FP, T1); | 457 __ addu(T1, FP, T1); |
457 __ AddImmediate(T1, kParamEndSlotFromFp * kWordSize); | 458 __ AddImmediate(T1, kParamEndSlotFromFp * kWordSize); |
458 // T1: address of first argument on stack. | 459 // T1: address of first argument on stack. |
459 // T2: address of first argument in array. | 460 // T2: address of first argument in array. |
460 | 461 |
(...skipping 1601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2062 const Register right = T0; | 2063 const Register right = T0; |
2063 __ lw(left, Address(SP, 1 * kWordSize)); | 2064 __ lw(left, Address(SP, 1 * kWordSize)); |
2064 __ lw(right, Address(SP, 0 * kWordSize)); | 2065 __ lw(right, Address(SP, 0 * kWordSize)); |
2065 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp1, temp2); | 2066 GenerateIdenticalWithNumberCheckStub(assembler, left, right, temp1, temp2); |
2066 __ Ret(); | 2067 __ Ret(); |
2067 } | 2068 } |
2068 | 2069 |
2069 } // namespace dart | 2070 } // namespace dart |
2070 | 2071 |
2071 #endif // defined TARGET_ARCH_MIPS | 2072 #endif // defined TARGET_ARCH_MIPS |
OLD | NEW |