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

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

Issue 1387643002: Move vm_tags from isolate to thread, since we may have multiple threads in same isolate (GC, backgr… (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: More comment cleanups Created 5 years, 2 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/stub_code_arm.cc ('k') | runtime/vm/stub_code_ia32.cc » ('j') | 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 28 matching lines...) Expand all
39 void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { 39 void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
40 const intptr_t thread_offset = NativeArguments::thread_offset(); 40 const intptr_t thread_offset = NativeArguments::thread_offset();
41 const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset(); 41 const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset();
42 const intptr_t argv_offset = NativeArguments::argv_offset(); 42 const intptr_t argv_offset = NativeArguments::argv_offset();
43 const intptr_t retval_offset = NativeArguments::retval_offset(); 43 const intptr_t retval_offset = NativeArguments::retval_offset();
44 44
45 __ SetPrologueOffset(); 45 __ SetPrologueOffset();
46 __ Comment("CallToRuntimeStub"); 46 __ Comment("CallToRuntimeStub");
47 __ EnterStubFrame(); 47 __ EnterStubFrame();
48 48
49 COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R28)) != 0);
50 __ LoadIsolate(R28);
51
52 // Save exit frame information to enable stack walking as we are about 49 // Save exit frame information to enable stack walking as we are about
53 // to transition to Dart VM C++ code. 50 // to transition to Dart VM C++ code.
54 __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); 51 __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset());
55 52
56 #if defined(DEBUG) 53 #if defined(DEBUG)
57 { Label ok; 54 { Label ok;
58 // Check that we are always entering from Dart code. 55 // Check that we are always entering from Dart code.
59 __ LoadFromOffset(R8, R28, Isolate::vm_tag_offset()); 56 __ LoadFromOffset(R8, THR, Thread::vm_tag_offset());
60 __ CompareImmediate(R8, VMTag::kDartTagId); 57 __ CompareImmediate(R8, VMTag::kDartTagId);
61 __ b(&ok, EQ); 58 __ b(&ok, EQ);
62 __ Stop("Not coming from Dart code."); 59 __ Stop("Not coming from Dart code.");
63 __ Bind(&ok); 60 __ Bind(&ok);
64 } 61 }
65 #endif 62 #endif
66 63
67 // Mark that the isolate is executing VM code. 64 // Mark that the thread is executing VM code.
68 __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); 65 __ StoreToOffset(R5, THR, Thread::vm_tag_offset());
69 66
70 // Reserve space for arguments and align frame before entering C++ world. 67 // Reserve space for arguments and align frame before entering C++ world.
71 // NativeArguments are passed in registers. 68 // NativeArguments are passed in registers.
72 __ Comment("align stack"); 69 __ Comment("align stack");
73 // Reserve space for arguments. 70 // Reserve space for arguments.
74 ASSERT(sizeof(NativeArguments) == 4 * kWordSize); 71 ASSERT(sizeof(NativeArguments) == 4 * kWordSize);
75 __ ReserveAlignedFrameSpace(sizeof(NativeArguments)); 72 __ ReserveAlignedFrameSpace(sizeof(NativeArguments));
76 73
77 // Pass NativeArguments structure by value and call runtime. 74 // Pass NativeArguments structure by value and call runtime.
78 // Registers R0, R1, R2, and R3 are used. 75 // Registers R0, R1, R2, and R3 are used.
(...skipping 29 matching lines...) Expand all
108 __ mov(CSP, SP); 105 __ mov(CSP, SP);
109 106
110 __ blr(R5); 107 __ blr(R5);
111 __ Comment("CallToRuntimeStub return"); 108 __ Comment("CallToRuntimeStub return");
112 109
113 // Restore SP and CSP. 110 // Restore SP and CSP.
114 __ mov(SP, CSP); 111 __ mov(SP, CSP);
115 __ mov(CSP, R26); 112 __ mov(CSP, R26);
116 113
117 // Retval is next to 1st argument. 114 // Retval is next to 1st argument.
118 // Mark that the isolate is executing Dart code. 115 // Mark that the thread is executing Dart code.
119 __ LoadImmediate(R2, VMTag::kDartTagId); 116 __ LoadImmediate(R2, VMTag::kDartTagId);
120 __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); 117 __ StoreToOffset(R2, THR, Thread::vm_tag_offset());
121 118
122 // Reset exit frame information in Isolate structure. 119 // Reset exit frame information in Isolate structure.
123 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); 120 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset());
124 121
125 __ LeaveStubFrame(); 122 __ LeaveStubFrame();
126 __ ret(); 123 __ ret();
127 } 124 }
128 125
129 126
130 // Print the stop message. 127 // Print the stop message.
(...skipping 15 matching lines...) Expand all
146 // R2 : address of first argument in argument array. 143 // R2 : address of first argument in argument array.
147 // R1 : argc_tag including number of arguments and function kind. 144 // R1 : argc_tag including number of arguments and function kind.
148 void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { 145 void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) {
149 const intptr_t thread_offset = NativeArguments::thread_offset(); 146 const intptr_t thread_offset = NativeArguments::thread_offset();
150 const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset(); 147 const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset();
151 const intptr_t argv_offset = NativeArguments::argv_offset(); 148 const intptr_t argv_offset = NativeArguments::argv_offset();
152 const intptr_t retval_offset = NativeArguments::retval_offset(); 149 const intptr_t retval_offset = NativeArguments::retval_offset();
153 150
154 __ EnterStubFrame(); 151 __ EnterStubFrame();
155 152
156 COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R28)) != 0);
157 __ LoadIsolate(R28);
158
159 // Save exit frame information to enable stack walking as we are about 153 // Save exit frame information to enable stack walking as we are about
160 // to transition to native code. 154 // to transition to native code.
161 __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); 155 __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset());
162 156
163 #if defined(DEBUG) 157 #if defined(DEBUG)
164 { Label ok; 158 { Label ok;
165 // Check that we are always entering from Dart code. 159 // Check that we are always entering from Dart code.
166 __ LoadFromOffset(R6, R28, Isolate::vm_tag_offset()); 160 __ LoadFromOffset(R6, THR, Thread::vm_tag_offset());
167 __ CompareImmediate(R6, VMTag::kDartTagId); 161 __ CompareImmediate(R6, VMTag::kDartTagId);
168 __ b(&ok, EQ); 162 __ b(&ok, EQ);
169 __ Stop("Not coming from Dart code."); 163 __ Stop("Not coming from Dart code.");
170 __ Bind(&ok); 164 __ Bind(&ok);
171 } 165 }
172 #endif 166 #endif
173 167
174 // Mark that the isolate is executing Native code. 168 // Mark that the thread is executing native code.
175 __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); 169 __ StoreToOffset(R5, THR, Thread::vm_tag_offset());
176 170
177 // Reserve space for the native arguments structure passed on the stack (the 171 // Reserve space for the native arguments structure passed on the stack (the
178 // outgoing pointer parameter to the native arguments structure is passed in 172 // outgoing pointer parameter to the native arguments structure is passed in
179 // R0) and align frame before entering the C++ world. 173 // R0) and align frame before entering the C++ world.
180 __ ReserveAlignedFrameSpace(sizeof(NativeArguments)); 174 __ ReserveAlignedFrameSpace(sizeof(NativeArguments));
181 175
182 // Initialize NativeArguments structure and call native function. 176 // Initialize NativeArguments structure and call native function.
183 // Registers R0, R1, R2, and R3 are used. 177 // Registers R0, R1, R2, and R3 are used.
184 178
185 ASSERT(thread_offset == 0 * kWordSize); 179 ASSERT(thread_offset == 0 * kWordSize);
(...skipping 30 matching lines...) Expand all
216 __ mov(R1, R5); // Pass the function entrypoint to call. 210 __ mov(R1, R5); // Pass the function entrypoint to call.
217 211
218 // Call native function invocation wrapper or redirection via simulator. 212 // Call native function invocation wrapper or redirection via simulator.
219 __ ldr(LR, Address(THR, Thread::native_call_wrapper_entry_point_offset())); 213 __ ldr(LR, Address(THR, Thread::native_call_wrapper_entry_point_offset()));
220 __ blr(LR); 214 __ blr(LR);
221 215
222 // Restore SP and CSP. 216 // Restore SP and CSP.
223 __ mov(SP, CSP); 217 __ mov(SP, CSP);
224 __ mov(CSP, R26); 218 __ mov(CSP, R26);
225 219
226 // Mark that the isolate is executing Dart code. 220 // Mark that the thread is executing Dart code.
227 __ LoadImmediate(R2, VMTag::kDartTagId); 221 __ LoadImmediate(R2, VMTag::kDartTagId);
228 __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); 222 __ StoreToOffset(R2, THR, Thread::vm_tag_offset());
229 223
230 // Reset exit frame information in Isolate structure. 224 // Reset exit frame information in Isolate structure.
231 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); 225 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset());
232 226
233 __ LeaveStubFrame(); 227 __ LeaveStubFrame();
234 __ ret(); 228 __ ret();
235 } 229 }
236 230
237 231
238 // Input parameters: 232 // Input parameters:
239 // LR : return address. 233 // LR : return address.
240 // SP : address of return value. 234 // SP : address of return value.
241 // R5 : address of the native function to call. 235 // R5 : address of the native function to call.
242 // R2 : address of first argument in argument array. 236 // R2 : address of first argument in argument array.
243 // R1 : argc_tag including number of arguments and function kind. 237 // R1 : argc_tag including number of arguments and function kind.
244 void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { 238 void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) {
245 const intptr_t thread_offset = NativeArguments::thread_offset(); 239 const intptr_t thread_offset = NativeArguments::thread_offset();
246 const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset(); 240 const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset();
247 const intptr_t argv_offset = NativeArguments::argv_offset(); 241 const intptr_t argv_offset = NativeArguments::argv_offset();
248 const intptr_t retval_offset = NativeArguments::retval_offset(); 242 const intptr_t retval_offset = NativeArguments::retval_offset();
249 243
250 __ EnterStubFrame(); 244 __ EnterStubFrame();
251 245
252 COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R28)) != 0);
253 __ LoadIsolate(R28);
254
255 // Save exit frame information to enable stack walking as we are about 246 // Save exit frame information to enable stack walking as we are about
256 // to transition to native code. 247 // to transition to native code.
257 __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); 248 __ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset());
258 249
259 #if defined(DEBUG) 250 #if defined(DEBUG)
260 { Label ok; 251 { Label ok;
261 // Check that we are always entering from Dart code. 252 // Check that we are always entering from Dart code.
262 __ LoadFromOffset(R6, R28, Isolate::vm_tag_offset()); 253 __ LoadFromOffset(R6, THR, Thread::vm_tag_offset());
263 __ CompareImmediate(R6, VMTag::kDartTagId); 254 __ CompareImmediate(R6, VMTag::kDartTagId);
264 __ b(&ok, EQ); 255 __ b(&ok, EQ);
265 __ Stop("Not coming from Dart code."); 256 __ Stop("Not coming from Dart code.");
266 __ Bind(&ok); 257 __ Bind(&ok);
267 } 258 }
268 #endif 259 #endif
269 260
270 // Mark that the isolate is executing Native code. 261 // Mark that the thread is executing native code.
271 __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); 262 __ StoreToOffset(R5, THR, Thread::vm_tag_offset());
272 263
273 // Reserve space for the native arguments structure passed on the stack (the 264 // Reserve space for the native arguments structure passed on the stack (the
274 // outgoing pointer parameter to the native arguments structure is passed in 265 // outgoing pointer parameter to the native arguments structure is passed in
275 // R0) and align frame before entering the C++ world. 266 // R0) and align frame before entering the C++ world.
276 __ ReserveAlignedFrameSpace(sizeof(NativeArguments)); 267 __ ReserveAlignedFrameSpace(sizeof(NativeArguments));
277 268
278 // Initialize NativeArguments structure and call native function. 269 // Initialize NativeArguments structure and call native function.
279 // Registers R0, R1, R2, and R3 are used. 270 // Registers R0, R1, R2, and R3 are used.
280 271
281 ASSERT(thread_offset == 0 * kWordSize); 272 ASSERT(thread_offset == 0 * kWordSize);
(...skipping 27 matching lines...) Expand all
309 __ mov(R26, CSP); 300 __ mov(R26, CSP);
310 __ mov(CSP, SP); 301 __ mov(CSP, SP);
311 302
312 // Call native function or redirection via simulator. 303 // Call native function or redirection via simulator.
313 __ blr(R5); 304 __ blr(R5);
314 305
315 // Restore SP and CSP. 306 // Restore SP and CSP.
316 __ mov(SP, CSP); 307 __ mov(SP, CSP);
317 __ mov(CSP, R26); 308 __ mov(CSP, R26);
318 309
319 // Mark that the isolate is executing Dart code. 310 // Mark that the thread is executing Dart code.
320 __ LoadImmediate(R2, VMTag::kDartTagId); 311 __ LoadImmediate(R2, VMTag::kDartTagId);
321 __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); 312 __ StoreToOffset(R2, THR, Thread::vm_tag_offset());
322 313
323 // Reset exit frame information in Isolate structure. 314 // Reset exit frame information in Isolate structure.
324 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); 315 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset());
325 316
326 __ LeaveStubFrame(); 317 __ LeaveStubFrame();
327 __ ret(); 318 __ ret();
328 } 319 }
329 320
330 321
331 // Input parameters: 322 // Input parameters:
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 // Save the bottom 64-bits of callee-saved V registers. 805 // Save the bottom 64-bits of callee-saved V registers.
815 for (int i = kAbiFirstPreservedFpuReg; i <= kAbiLastPreservedFpuReg; i++) { 806 for (int i = kAbiFirstPreservedFpuReg; i <= kAbiLastPreservedFpuReg; i++) {
816 const VRegister r = static_cast<VRegister>(i); 807 const VRegister r = static_cast<VRegister>(i);
817 __ PushDouble(r); 808 __ PushDouble(r);
818 } 809 }
819 810
820 // Set up THR, which caches the current thread in Dart code. 811 // Set up THR, which caches the current thread in Dart code.
821 if (THR != R3) { 812 if (THR != R3) {
822 __ mov(THR, R3); 813 __ mov(THR, R3);
823 } 814 }
824 // Load Isolate pointer into temporary register R5.
825 __ LoadIsolate(R5);
826 815
827 // Save the current VMTag on the stack. 816 // Save the current VMTag on the stack.
828 __ LoadFromOffset(R4, R5, Isolate::vm_tag_offset()); 817 __ LoadFromOffset(R4, THR, Thread::vm_tag_offset());
829 __ Push(R4); 818 __ Push(R4);
830 819
831 // Mark that the isolate is executing Dart code. 820 // Mark that the thread is executing Dart code.
832 __ LoadImmediate(R6, VMTag::kDartTagId); 821 __ LoadImmediate(R6, VMTag::kDartTagId);
833 __ StoreToOffset(R6, R5, Isolate::vm_tag_offset()); 822 __ StoreToOffset(R6, THR, Thread::vm_tag_offset());
834 823
835 // Save top resource and top exit frame info. Use R6 as a temporary register. 824 // Save top resource and top exit frame info. Use R6 as a temporary register.
836 // StackFrameIterator reads the top exit frame info saved in this frame. 825 // StackFrameIterator reads the top exit frame info saved in this frame.
837 __ LoadFromOffset(R6, THR, Thread::top_resource_offset()); 826 __ LoadFromOffset(R6, THR, Thread::top_resource_offset());
838 __ StoreToOffset(ZR, THR, Thread::top_resource_offset()); 827 __ StoreToOffset(ZR, THR, Thread::top_resource_offset());
839 __ Push(R6); 828 __ Push(R6);
840 __ LoadFromOffset(R6, THR, Thread::top_exit_frame_info_offset()); 829 __ LoadFromOffset(R6, THR, Thread::top_exit_frame_info_offset());
841 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); 830 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset());
842 // kExitLinkSlotFromEntryFp must be kept in sync with the code below. 831 // kExitLinkSlotFromEntryFp must be kept in sync with the code below.
843 ASSERT(kExitLinkSlotFromEntryFp == -22); 832 ASSERT(kExitLinkSlotFromEntryFp == -22);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 865
877 // Call the Dart code entrypoint. 866 // Call the Dart code entrypoint.
878 __ ldr(CODE_REG, Address(R0, VMHandles::kOffsetOfRawPtrInHandle)); 867 __ ldr(CODE_REG, Address(R0, VMHandles::kOffsetOfRawPtrInHandle));
879 __ ldr(R0, FieldAddress(CODE_REG, Code::entry_point_offset())); 868 __ ldr(R0, FieldAddress(CODE_REG, Code::entry_point_offset()));
880 __ blr(R0); // R4 is the arguments descriptor array. 869 __ blr(R0); // R4 is the arguments descriptor array.
881 __ Comment("InvokeDartCodeStub return"); 870 __ Comment("InvokeDartCodeStub return");
882 871
883 // Get rid of arguments pushed on the stack. 872 // Get rid of arguments pushed on the stack.
884 __ AddImmediate(SP, FP, kExitLinkSlotFromEntryFp * kWordSize); 873 __ AddImmediate(SP, FP, kExitLinkSlotFromEntryFp * kWordSize);
885 874
886 __ LoadIsolate(R28);
887
888 // Restore the saved top exit frame info and top resource back into the 875 // Restore the saved top exit frame info and top resource back into the
889 // Isolate structure. Uses R6 as a temporary register for this. 876 // Isolate structure. Uses R6 as a temporary register for this.
890 __ Pop(R6); 877 __ Pop(R6);
891 __ StoreToOffset(R6, THR, Thread::top_exit_frame_info_offset()); 878 __ StoreToOffset(R6, THR, Thread::top_exit_frame_info_offset());
892 __ Pop(R6); 879 __ Pop(R6);
893 __ StoreToOffset(R6, THR, Thread::top_resource_offset()); 880 __ StoreToOffset(R6, THR, Thread::top_resource_offset());
894 881
895 // Restore the current VMTag from the stack. 882 // Restore the current VMTag from the stack.
896 __ Pop(R4); 883 __ Pop(R4);
897 __ StoreToOffset(R4, R28, Isolate::vm_tag_offset()); 884 __ StoreToOffset(R4, THR, Thread::vm_tag_offset());
898 885
899 // Restore the bottom 64-bits of callee-saved V registers. 886 // Restore the bottom 64-bits of callee-saved V registers.
900 for (int i = kAbiLastPreservedFpuReg; i >= kAbiFirstPreservedFpuReg; i--) { 887 for (int i = kAbiLastPreservedFpuReg; i >= kAbiFirstPreservedFpuReg; i--) {
901 const VRegister r = static_cast<VRegister>(i); 888 const VRegister r = static_cast<VRegister>(i);
902 __ PopDouble(r); 889 __ PopDouble(r);
903 } 890 }
904 891
905 // Restore C++ ABI callee-saved registers. 892 // Restore C++ ABI callee-saved registers.
906 for (int i = kAbiLastPreservedCpuReg; i >= kAbiFirstPreservedCpuReg; i--) { 893 for (int i = kAbiLastPreservedCpuReg; i >= kAbiFirstPreservedCpuReg; i--) {
907 Register r = static_cast<Register>(i); 894 Register r = static_cast<Register>(i);
(...skipping 1058 matching lines...) Expand 10 before | Expand all | Expand 10 after
1966 // Does not return. 1953 // Does not return.
1967 void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) { 1954 void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) {
1968 ASSERT(kExceptionObjectReg == R0); 1955 ASSERT(kExceptionObjectReg == R0);
1969 ASSERT(kStackTraceObjectReg == R1); 1956 ASSERT(kStackTraceObjectReg == R1);
1970 __ mov(LR, R0); // Program counter. 1957 __ mov(LR, R0); // Program counter.
1971 __ mov(SP, R1); // Stack pointer. 1958 __ mov(SP, R1); // Stack pointer.
1972 __ mov(FP, R2); // Frame_pointer. 1959 __ mov(FP, R2); // Frame_pointer.
1973 __ mov(R0, R3); // Exception object. 1960 __ mov(R0, R3); // Exception object.
1974 __ mov(R1, R4); // StackTrace object. 1961 __ mov(R1, R4); // StackTrace object.
1975 __ mov(THR, R5); 1962 __ mov(THR, R5);
1976 __ LoadIsolate(R5);
1977 // Set the tag. 1963 // Set the tag.
1978 __ LoadImmediate(R2, VMTag::kDartTagId); 1964 __ LoadImmediate(R2, VMTag::kDartTagId);
1979 __ StoreToOffset(R2, R5, Isolate::vm_tag_offset()); 1965 __ StoreToOffset(R2, THR, Thread::vm_tag_offset());
1980 // Clear top exit frame. 1966 // Clear top exit frame.
1981 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); 1967 __ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset());
1982 __ ret(); // Jump to the exception handler code. 1968 __ ret(); // Jump to the exception handler code.
1983 } 1969 }
1984 1970
1985 1971
1986 // Calls to the runtime to optimize the given function. 1972 // Calls to the runtime to optimize the given function.
1987 // R6: function to be re-optimized. 1973 // R6: function to be re-optimized.
1988 // R4: argument descriptor (preserved). 1974 // R4: argument descriptor (preserved).
1989 void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) { 1975 void StubCode::GenerateOptimizeFunctionStub(Assembler* assembler) {
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
2159 // Result: 2145 // Result:
2160 // R1: entry point. 2146 // R1: entry point.
2161 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) { 2147 void StubCode::GenerateMegamorphicLookupStub(Assembler* assembler) {
2162 EmitMegamorphicLookup(assembler, R0, R1, R1); 2148 EmitMegamorphicLookup(assembler, R0, R1, R1);
2163 __ ret(); 2149 __ ret();
2164 } 2150 }
2165 2151
2166 } // namespace dart 2152 } // namespace dart
2167 2153
2168 #endif // defined TARGET_ARCH_ARM64 2154 #endif // defined TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « runtime/vm/stub_code_arm.cc ('k') | runtime/vm/stub_code_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698