OLD | NEW |
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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 const intptr_t argv_offset = NativeArguments::argv_offset(); | 145 const intptr_t argv_offset = NativeArguments::argv_offset(); |
146 const intptr_t retval_offset = NativeArguments::retval_offset(); | 146 const intptr_t retval_offset = NativeArguments::retval_offset(); |
147 | 147 |
148 __ EnterFrame(0); | 148 __ EnterFrame(0); |
149 | 149 |
150 // Load current Isolate pointer from Context structure into R0. | 150 // Load current Isolate pointer from Context structure into R0. |
151 __ LoadFieldFromOffset(R0, CTX, Context::isolate_offset()); | 151 __ LoadFieldFromOffset(R0, CTX, Context::isolate_offset()); |
152 | 152 |
153 // 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 |
154 // to transition to native code. | 154 // to transition to native code. |
155 __ StoreToOffset(SP, R0, Isolate::top_exit_frame_info_offset()); | 155 __ mov(TMP, SP); |
| 156 __ StoreToOffset(TMP, R0, Isolate::top_exit_frame_info_offset()); |
156 | 157 |
157 // Save current Context pointer into Isolate structure. | 158 // Save current Context pointer into Isolate structure. |
158 __ StoreToOffset(CTX, R0, Isolate::top_context_offset()); | 159 __ StoreToOffset(CTX, R0, Isolate::top_context_offset()); |
159 | 160 |
160 // Cache Isolate pointer into CTX while executing native code. | 161 // Cache Isolate pointer into CTX while executing native code. |
161 __ mov(CTX, R0); | 162 __ mov(CTX, R0); |
162 | 163 |
163 #if defined(DEBUG) | 164 #if defined(DEBUG) |
164 { Label ok; | 165 { Label ok; |
165 // Check that we are always entering from Dart code. | 166 // Check that we are always entering from Dart code. |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 // Call native function or redirection via simulator. | 230 // Call native function or redirection via simulator. |
230 __ blr(R5); | 231 __ blr(R5); |
231 | 232 |
232 __ Bind(&done); | 233 __ Bind(&done); |
233 | 234 |
234 // Mark that the isolate is executing Dart code. | 235 // Mark that the isolate is executing Dart code. |
235 __ LoadImmediate(R2, VMTag::kScriptTagId, kNoPP); | 236 __ LoadImmediate(R2, VMTag::kScriptTagId, kNoPP); |
236 __ StoreToOffset(R2, CTX, Isolate::vm_tag_offset()); | 237 __ StoreToOffset(R2, CTX, Isolate::vm_tag_offset()); |
237 | 238 |
238 // Reset exit frame information in Isolate structure. | 239 // Reset exit frame information in Isolate structure. |
239 __ LoadImmediate(R2, 0, kNoPP); | 240 __ StoreToOffset(ZR, CTX, Isolate::top_exit_frame_info_offset()); |
240 __ StoreToOffset(R2, CTX, Isolate::top_exit_frame_info_offset()); | |
241 | 241 |
242 // Load Context pointer from Isolate structure into R2. | 242 // Load Context pointer from Isolate structure into R2. |
243 __ LoadFromOffset(R2, CTX, Isolate::top_context_offset()); | 243 __ LoadFromOffset(R2, CTX, Isolate::top_context_offset()); |
244 | 244 |
245 // Reset Context pointer in Isolate structure. | 245 // Reset Context pointer in Isolate structure. |
246 __ LoadObject(R3, Object::null_object(), PP); | 246 __ LoadObject(R3, Object::null_object(), PP); |
247 __ StoreToOffset(R3, CTX, Isolate::top_context_offset()); | 247 __ StoreToOffset(R3, CTX, Isolate::top_context_offset()); |
248 | 248 |
249 // Cache Context pointer into CTX while executing Dart code. | 249 // Cache Context pointer into CTX while executing Dart code. |
250 __ mov(CTX, R2); | 250 __ mov(CTX, R2); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 __ mov(R0, SP); // Pass the pointer to the NativeArguments. | 329 __ mov(R0, SP); // Pass the pointer to the NativeArguments. |
330 | 330 |
331 // Call native function or redirection via simulator. | 331 // Call native function or redirection via simulator. |
332 __ blr(R5); | 332 __ blr(R5); |
333 | 333 |
334 // Mark that the isolate is executing Dart code. | 334 // Mark that the isolate is executing Dart code. |
335 __ LoadImmediate(R2, VMTag::kScriptTagId, kNoPP); | 335 __ LoadImmediate(R2, VMTag::kScriptTagId, kNoPP); |
336 __ StoreToOffset(R2, CTX, Isolate::vm_tag_offset()); | 336 __ StoreToOffset(R2, CTX, Isolate::vm_tag_offset()); |
337 | 337 |
338 // Reset exit frame information in Isolate structure. | 338 // Reset exit frame information in Isolate structure. |
339 __ LoadImmediate(R2, 0, kNoPP); | 339 __ StoreToOffset(ZR, CTX, Isolate::top_exit_frame_info_offset()); |
340 __ StoreToOffset(R2, CTX, Isolate::top_exit_frame_info_offset()); | |
341 | 340 |
342 // Load Context pointer from Isolate structure into R2. | 341 // Load Context pointer from Isolate structure into R2. |
343 __ LoadFromOffset(R2, CTX, Isolate::top_context_offset()); | 342 __ LoadFromOffset(R2, CTX, Isolate::top_context_offset()); |
344 | 343 |
345 // Reset Context pointer in Isolate structure. | 344 // Reset Context pointer in Isolate structure. |
346 __ LoadObject(R3, Object::null_object(), PP); | 345 __ LoadObject(R3, Object::null_object(), PP); |
347 __ StoreToOffset(R3, CTX, Isolate::top_context_offset()); | 346 __ StoreToOffset(R3, CTX, Isolate::top_context_offset()); |
348 | 347 |
349 // Cache Context pointer into CTX while executing Dart code. | 348 // Cache Context pointer into CTX while executing Dart code. |
350 __ mov(CTX, R2); | 349 __ mov(CTX, R2); |
(...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1592 | 1591 |
1593 | 1592 |
1594 void StubCode::GenerateOptimizedIdenticalWithNumberCheckStub( | 1593 void StubCode::GenerateOptimizedIdenticalWithNumberCheckStub( |
1595 Assembler* assembler) { | 1594 Assembler* assembler) { |
1596 __ Stop("GenerateOptimizedIdenticalWithNumberCheckStub"); | 1595 __ Stop("GenerateOptimizedIdenticalWithNumberCheckStub"); |
1597 } | 1596 } |
1598 | 1597 |
1599 } // namespace dart | 1598 } // namespace dart |
1600 | 1599 |
1601 #endif // defined TARGET_ARCH_ARM64 | 1600 #endif // defined TARGET_ARCH_ARM64 |
OLD | NEW |