| Index: runtime/vm/stub_code_arm.cc
|
| diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
|
| index 6c6f2839517100bc724b957bf4648e2f1a98f7c7..5acd66933f1cc1214b4767020ce166fad8cfe2b3 100644
|
| --- a/runtime/vm/stub_code_arm.cc
|
| +++ b/runtime/vm/stub_code_arm.cc
|
| @@ -45,9 +45,6 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
|
|
|
| __ EnterStubFrame();
|
|
|
| - COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R7)) != 0);
|
| - __ LoadIsolate(R7);
|
| -
|
| // Save exit frame information to enable stack walking as we are about
|
| // to transition to Dart VM C++ code.
|
| __ StoreToOffset(kWord, FP, THR, Thread::top_exit_frame_info_offset());
|
| @@ -55,7 +52,7 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
|
| #if defined(DEBUG)
|
| { Label ok;
|
| // Check that we are always entering from Dart code.
|
| - __ LoadFromOffset(kWord, R6, R7, Isolate::vm_tag_offset());
|
| + __ LoadFromOffset(kWord, R6, THR, Thread::vm_tag_offset());
|
| __ CompareImmediate(R6, VMTag::kDartTagId);
|
| __ b(&ok, EQ);
|
| __ Stop("Not coming from Dart code.");
|
| @@ -63,8 +60,8 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
|
| }
|
| #endif
|
|
|
| - // Mark that the isolate is executing VM code.
|
| - __ StoreToOffset(kWord, R5, R7, Isolate::vm_tag_offset());
|
| + // Mark that the thread is executing VM code.
|
| + __ StoreToOffset(kWord, R5, THR, Thread::vm_tag_offset());
|
|
|
| // Reserve space for arguments and align frame before entering C++ world.
|
| // NativeArguments are passed in registers.
|
| @@ -94,9 +91,9 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
|
| // Call runtime or redirection via simulator.
|
| __ blx(R5);
|
|
|
| - // Mark that the isolate is executing Dart code.
|
| + // Mark that the thread is executing Dart code.
|
| __ LoadImmediate(R2, VMTag::kDartTagId);
|
| - __ StoreToOffset(kWord, R2, R7, Isolate::vm_tag_offset());
|
| + __ StoreToOffset(kWord, R2, THR, Thread::vm_tag_offset());
|
|
|
| // Reset exit frame information in Isolate structure.
|
| __ LoadImmediate(R2, 0);
|
| @@ -140,9 +137,6 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) {
|
|
|
| __ EnterStubFrame();
|
|
|
| - COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R7)) != 0);
|
| - __ LoadIsolate(R7);
|
| -
|
| // Save exit frame information to enable stack walking as we are about
|
| // to transition to native code.
|
| __ StoreToOffset(kWord, FP, THR, Thread::top_exit_frame_info_offset());
|
| @@ -150,7 +144,7 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) {
|
| #if defined(DEBUG)
|
| { Label ok;
|
| // Check that we are always entering from Dart code.
|
| - __ LoadFromOffset(kWord, R6, R7, Isolate::vm_tag_offset());
|
| + __ LoadFromOffset(kWord, R6, THR, Thread::vm_tag_offset());
|
| __ CompareImmediate(R6, VMTag::kDartTagId);
|
| __ b(&ok, EQ);
|
| __ Stop("Not coming from Dart code.");
|
| @@ -158,8 +152,8 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) {
|
| }
|
| #endif
|
|
|
| - // Mark that the isolate is executing Native code.
|
| - __ StoreToOffset(kWord, R5, R7, Isolate::vm_tag_offset());
|
| + // Mark that the thread is executing native code.
|
| + __ StoreToOffset(kWord, 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
|
| @@ -197,9 +191,9 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) {
|
| __ ldr(LR, Address(THR, Thread::native_call_wrapper_entry_point_offset()));
|
| __ blx(LR);
|
|
|
| - // Mark that the isolate is executing Dart code.
|
| + // Mark that the thread is executing Dart code.
|
| __ LoadImmediate(R2, VMTag::kDartTagId);
|
| - __ StoreToOffset(kWord, R2, R7, Isolate::vm_tag_offset());
|
| + __ StoreToOffset(kWord, R2, THR, Thread::vm_tag_offset());
|
|
|
| // Reset exit frame information in Isolate structure.
|
| __ LoadImmediate(R2, 0);
|
| @@ -224,9 +218,6 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) {
|
|
|
| __ EnterStubFrame();
|
|
|
| - COMPILE_ASSERT((kAbiPreservedCpuRegs & (1 << R7)) != 0);
|
| - __ LoadIsolate(R7);
|
| -
|
| // Save exit frame information to enable stack walking as we are about
|
| // to transition to native code.
|
| __ StoreToOffset(kWord, FP, THR, Thread::top_exit_frame_info_offset());
|
| @@ -234,7 +225,7 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) {
|
| #if defined(DEBUG)
|
| { Label ok;
|
| // Check that we are always entering from Dart code.
|
| - __ LoadFromOffset(kWord, R6, R7, Isolate::vm_tag_offset());
|
| + __ LoadFromOffset(kWord, R6, THR, Thread::vm_tag_offset());
|
| __ CompareImmediate(R6, VMTag::kDartTagId);
|
| __ b(&ok, EQ);
|
| __ Stop("Not coming from Dart code.");
|
| @@ -242,8 +233,8 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) {
|
| }
|
| #endif
|
|
|
| - // Mark that the isolate is executing Native code.
|
| - __ StoreToOffset(kWord, R5, R7, Isolate::vm_tag_offset());
|
| + // Mark that the thread is executing native code.
|
| + __ StoreToOffset(kWord, 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
|
| @@ -278,9 +269,9 @@ void StubCode::GenerateCallBootstrapCFunctionStub(Assembler* assembler) {
|
| // Call native function or redirection via simulator.
|
| __ blx(R5);
|
|
|
| - // Mark that the isolate is executing Dart code.
|
| + // Mark that the thread is executing Dart code.
|
| __ LoadImmediate(R2, VMTag::kDartTagId);
|
| - __ StoreToOffset(kWord, R2, R7, Isolate::vm_tag_offset());
|
| + __ StoreToOffset(kWord, R2, THR, Thread::vm_tag_offset());
|
|
|
| // Reset exit frame information in Isolate structure.
|
| __ LoadImmediate(R2, 0);
|
| @@ -761,15 +752,14 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) {
|
| if (THR != R3) {
|
| __ mov(THR, Operand(R3));
|
| }
|
| - __ LoadIsolate(R7);
|
|
|
| // Save the current VMTag on the stack.
|
| - __ LoadFromOffset(kWord, R5, R7, Isolate::vm_tag_offset());
|
| + __ LoadFromOffset(kWord, R5, THR, Thread::vm_tag_offset());
|
| __ Push(R5);
|
|
|
| - // Mark that the isolate is executing Dart code.
|
| + // Mark that the thread is executing Dart code.
|
| __ LoadImmediate(R5, VMTag::kDartTagId);
|
| - __ StoreToOffset(kWord, R5, R7, Isolate::vm_tag_offset());
|
| + __ StoreToOffset(kWord, R5, THR, Thread::vm_tag_offset());
|
|
|
| // Save top resource and top exit frame info. Use R4-6 as temporary registers.
|
| // StackFrameIterator reads the top exit frame info saved in this frame.
|
| @@ -819,7 +809,6 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) {
|
| // Get rid of arguments pushed on the stack.
|
| __ AddImmediate(SP, FP, kExitLinkSlotFromEntryFp * kWordSize);
|
|
|
| - __ LoadIsolate(R7);
|
| // Restore the saved top exit frame info and top resource back into the
|
| // Isolate structure. Uses R5 as a temporary register for this.
|
| __ Pop(R5);
|
| @@ -829,7 +818,7 @@ void StubCode::GenerateInvokeDartCodeStub(Assembler* assembler) {
|
|
|
| // Restore the current VMTag from the stack.
|
| __ Pop(R4);
|
| - __ StoreToOffset(kWord, R4, R7, Isolate::vm_tag_offset());
|
| + __ StoreToOffset(kWord, R4, THR, Thread::vm_tag_offset());
|
|
|
| // Restore C++ ABI callee-saved registers.
|
| if (TargetCPUFeatures::vfp_supported()) {
|
| @@ -1901,10 +1890,9 @@ void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) {
|
| __ ldr(THR, Address(SP, 4)); // Thread.
|
| __ mov(FP, Operand(R2)); // Frame_pointer.
|
| __ mov(SP, Operand(IP)); // Set Stack pointer.
|
| - __ LoadIsolate(R3);
|
| // Set the tag.
|
| __ LoadImmediate(R2, VMTag::kDartTagId);
|
| - __ StoreToOffset(kWord, R2, R3, Isolate::vm_tag_offset());
|
| + __ StoreToOffset(kWord, R2, THR, Thread::vm_tag_offset());
|
| // Clear top exit frame.
|
| __ LoadImmediate(R2, 0);
|
| __ StoreToOffset(kWord, R2, THR, Thread::top_exit_frame_info_offset());
|
|
|