Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(400)

Side by Side Diff: runtime/vm/stub_code_arm64.cc

Issue 2014413003: Bump the C stack pointer when building Dart frames to maintain the ARM64 ABI requirements without g… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: assembler test Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/object_arm64_test.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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_ARM64) 6 #if defined(TARGET_ARCH_ARM64)
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 762 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 // Input parameters: 773 // Input parameters:
774 // LR : points to return address. 774 // LR : points to return address.
775 // R0 : code object of the Dart function to call. 775 // R0 : code object of the Dart function to call.
776 // R1 : arguments descriptor array. 776 // R1 : arguments descriptor array.
777 // R2 : arguments array. 777 // R2 : arguments array.
778 // R3 : current thread. 778 // R3 : current thread.
779 void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { 779 void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) {
780 __ Comment("InvokeDartCodeStub"); 780 __ Comment("InvokeDartCodeStub");
781 781
782 // Copy the C stack pointer (R31) into the stack pointer we'll actually use 782 // Copy the C stack pointer (R31) into the stack pointer we'll actually use
783 // to access the stack, and put the C stack pointer at the stack limit. 783 // to access the stack.
784 __ SetupDartSP(OSThread::GetSpecifiedStackSize()); 784 __ SetupDartSP();
785 __ EnterFrame(0); 785 __ EnterFrame(0);
786 786
787 // Push code object to PC marker slot. 787 // Push code object to PC marker slot.
788 __ ldr(TMP, Address(R3, Thread::invoke_dart_code_stub_offset())); 788 __ ldr(TMP, Address(R3, Thread::invoke_dart_code_stub_offset()));
789 __ Push(TMP); 789 __ Push(TMP);
790 790
791 // Save the callee-saved registers. 791 // Save the callee-saved registers.
792 for (int i = kAbiFirstPreservedCpuReg; i <= kAbiLastPreservedCpuReg; i++) { 792 for (int i = kAbiFirstPreservedCpuReg; i <= kAbiLastPreservedCpuReg; i++) {
793 const Register r = static_cast<Register>(i); 793 const Register r = static_cast<Register>(i);
794 // We use str instead of the Push macro because we will be pushing the PP 794 // We use str instead of the Push macro because we will be pushing the PP
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 Register r = static_cast<Register>(i); 889 Register r = static_cast<Register>(i);
890 // We use ldr instead of the Pop macro because we will be popping the PP 890 // We use ldr instead of the Pop macro because we will be popping the PP
891 // register when it is not holding a pool-pointer since we are returning to 891 // register when it is not holding a pool-pointer since we are returning to
892 // C++ code. We also skip the dart stack pointer SP, since we are still 892 // C++ code. We also skip the dart stack pointer SP, since we are still
893 // using it as the stack pointer. 893 // using it as the stack pointer.
894 __ ldr(r, Address(SP, 1 * kWordSize, Address::PostIndex)); 894 __ ldr(r, Address(SP, 1 * kWordSize, Address::PostIndex));
895 } 895 }
896 896
897 // Restore the frame pointer and C stack pointer and return. 897 // Restore the frame pointer and C stack pointer and return.
898 __ LeaveFrame(); 898 __ LeaveFrame();
899 __ mov(CSP, SP); 899 __ RestoreCSP();
900 __ ret(); 900 __ ret();
901 } 901 }
902 902
903 903
904 // Called for inline allocation of contexts. 904 // Called for inline allocation of contexts.
905 // Input: 905 // Input:
906 // R1: number of context variables. 906 // R1: number of context variables.
907 // Output: 907 // Output:
908 // R0: new allocated RawContext object. 908 // R0: new allocated RawContext object.
909 void StubCode::GenerateAllocateContextStub(Assembler* assembler) { 909 void StubCode::GenerateAllocateContextStub(Assembler* assembler) {
(...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after
2230 } 2230 }
2231 2231
2232 2232
2233 void StubCode::GenerateFrameAwaitingMaterializationStub(Assembler* assembler) { 2233 void StubCode::GenerateFrameAwaitingMaterializationStub(Assembler* assembler) {
2234 __ brk(0); 2234 __ brk(0);
2235 } 2235 }
2236 2236
2237 } // namespace dart 2237 } // namespace dart
2238 2238
2239 #endif // defined TARGET_ARCH_ARM64 2239 #endif // defined TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « runtime/vm/object_arm64_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698