Index: runtime/vm/stub_code_arm64.cc |
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc |
index 41d454403dee717d5b2fa4a91024f899ffa1c5ec..facc08c06b6009b59b5239e211a1234e4c574358 100644 |
--- a/runtime/vm/stub_code_arm64.cc |
+++ b/runtime/vm/stub_code_arm64.cc |
@@ -46,9 +46,6 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
__ Comment("CallToRuntimeStub"); |
__ EnterStubFrame(); |
- COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R28)) != 0); |
- __ LoadIsolate(R28); |
- |
// Save exit frame information to enable stack walking as we are about |
// to transition to Dart VM C++ code. |
__ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); |
@@ -56,7 +53,7 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
#if defined(DEBUG) |
{ Label ok; |
// Check that we are always entering from Dart code. |
- __ LoadFromOffset(R8, R28, Isolate::vm_tag_offset()); |
+ __ LoadFromOffset(R8, THR, Thread::vm_tag_offset()); |
__ CompareImmediate(R8, VMTag::kDartTagId); |
__ b(&ok, EQ); |
__ Stop("Not coming from Dart code."); |
@@ -64,8 +61,8 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
} |
#endif |
- // Mark that the isolate is executing VM code. |
- __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); |
+ // Mark that the thread is executing VM code. |
+ __ StoreToOffset(R5, THR, Thread::vm_tag_offset()); |
// Reserve space for arguments and align frame before entering C++ world. |
// NativeArguments are passed in registers. |
@@ -115,9 +112,9 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
__ mov(CSP, R26); |
// Retval is next to 1st argument. |
- // Mark that the isolate is executing Dart code. |
+ // Mark that the thread is executing Dart code. |
__ LoadImmediate(R2, VMTag::kDartTagId); |
- __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); |
+ __ StoreToOffset(R2, THR, Thread::vm_tag_offset()); |
// Reset exit frame information in Isolate structure. |
__ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
@@ -153,9 +150,6 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
__ EnterStubFrame(); |
- COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R28)) != 0); |
- __ LoadIsolate(R28); |
- |
// Save exit frame information to enable stack walking as we are about |
// to transition to native code. |
__ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); |
@@ -163,7 +157,7 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
#if defined(DEBUG) |
{ Label ok; |
// Check that we are always entering from Dart code. |
- __ LoadFromOffset(R6, R28, Isolate::vm_tag_offset()); |
+ __ LoadFromOffset(R6, THR, Thread::vm_tag_offset()); |
__ CompareImmediate(R6, VMTag::kDartTagId); |
__ b(&ok, EQ); |
__ Stop("Not coming from Dart code."); |
@@ -171,8 +165,8 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
} |
#endif |
- // Mark that the isolate is executing Native code. |
- __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); |
+ // Mark that the thread is executing native code. |
+ __ StoreToOffset(R5, THR, Thread::vm_tag_offset()); |
// Reserve space for the native arguments structure passed on the stack (the |
// outgoing pointer parameter to the native arguments structure is passed in |
@@ -223,9 +217,9 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) { |
__ mov(SP, CSP); |
__ mov(CSP, R26); |
- // Mark that the isolate is executing Dart code. |
+ // Mark that the thread is executing Dart code. |
__ LoadImmediate(R2, VMTag::kDartTagId); |
- __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); |
+ __ StoreToOffset(R2, THR, Thread::vm_tag_offset()); |
// Reset exit frame information in Isolate structure. |
__ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
@@ -249,9 +243,6 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
__ EnterStubFrame(); |
- COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R28)) != 0); |
- __ LoadIsolate(R28); |
- |
// Save exit frame information to enable stack walking as we are about |
// to transition to native code. |
__ StoreToOffset(FP, THR, Thread::top_exit_frame_info_offset()); |
@@ -259,7 +250,7 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
#if defined(DEBUG) |
{ Label ok; |
// Check that we are always entering from Dart code. |
- __ LoadFromOffset(R6, R28, Isolate::vm_tag_offset()); |
+ __ LoadFromOffset(R6, THR, Thread::vm_tag_offset()); |
__ CompareImmediate(R6, VMTag::kDartTagId); |
__ b(&ok, EQ); |
__ Stop("Not coming from Dart code."); |
@@ -267,8 +258,8 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
} |
#endif |
- // Mark that the isolate is executing Native code. |
- __ StoreToOffset(R5, R28, Isolate::vm_tag_offset()); |
+ // Mark that the thread is executing native code. |
+ __ StoreToOffset(R5, THR, Thread::vm_tag_offset()); |
// Reserve space for the native arguments structure passed on the stack (the |
// outgoing pointer parameter to the native arguments structure is passed in |
@@ -316,9 +307,9 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) { |
__ mov(SP, CSP); |
__ mov(CSP, R26); |
- // Mark that the isolate is executing Dart code. |
+ // Mark that the thread is executing Dart code. |
__ LoadImmediate(R2, VMTag::kDartTagId); |
- __ StoreToOffset(R2, R28, Isolate::vm_tag_offset()); |
+ __ StoreToOffset(R2, THR, Thread::vm_tag_offset()); |
// Reset exit frame information in Isolate structure. |
__ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
@@ -821,16 +812,14 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
if (THR != R3) { |
__ mov(THR, R3); |
} |
- // Load Isolate pointer into temporary register R5. |
- __ LoadIsolate(R5); |
// Save the current VMTag on the stack. |
- __ LoadFromOffset(R4, R5, Isolate::vm_tag_offset()); |
+ __ LoadFromOffset(R4, THR, Thread::vm_tag_offset()); |
__ Push(R4); |
- // Mark that the isolate is executing Dart code. |
+ // Mark that the thread is executing Dart code. |
__ LoadImmediate(R6, VMTag::kDartTagId); |
- __ StoreToOffset(R6, R5, Isolate::vm_tag_offset()); |
+ __ StoreToOffset(R6, THR, Thread::vm_tag_offset()); |
// Save top resource and top exit frame info. Use R6 as a temporary register. |
// StackFrameIterator reads the top exit frame info saved in this frame. |
@@ -883,8 +872,6 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
// Get rid of arguments pushed on the stack. |
__ AddImmediate(SP, FP, kExitLinkSlotFromEntryFp * kWordSize); |
- __ LoadIsolate(R28); |
- |
// Restore the saved top exit frame info and top resource back into the |
// Isolate structure. Uses R6 as a temporary register for this. |
__ Pop(R6); |
@@ -894,7 +881,7 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) { |
// Restore the current VMTag from the stack. |
__ Pop(R4); |
- __ StoreToOffset(R4, R28, Isolate::vm_tag_offset()); |
+ __ StoreToOffset(R4, THR, Thread::vm_tag_offset()); |
// Restore the bottom 64-bits of callee-saved V registers. |
for (int i = kAbiLastPreservedFpuReg; i >= kAbiFirstPreservedFpuReg; i--) { |
@@ -1973,10 +1960,9 @@ void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) { |
__ mov(R0, R3); // Exception object. |
__ mov(R1, R4); // StackTrace object. |
__ mov(THR, R5); |
- __ LoadIsolate(R5); |
// Set the tag. |
__ LoadImmediate(R2, VMTag::kDartTagId); |
- __ StoreToOffset(R2, R5, Isolate::vm_tag_offset()); |
+ __ StoreToOffset(R2, THR, Thread::vm_tag_offset()); |
// Clear top exit frame. |
__ StoreToOffset(ZR, THR, Thread::top_exit_frame_info_offset()); |
__ ret(); // Jump to the exception handler code. |