Index: runtime/vm/stub_code_arm64.cc |
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc |
index d6c165ff3de002cfe4784dcf2b369ef414b1b328..a4e43e9e59628c1ff615c12390430b2db5a7e9bc 100644 |
--- a/runtime/vm/stub_code_arm64.cc |
+++ b/runtime/vm/stub_code_arm64.cc |
@@ -45,7 +45,6 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) { |
__ SetPrologueOffset(); |
__ Comment("CallToRuntimeStub"); |
__ EnterFrame(0); |
- __ SmiUntag(R4); |
// Load current Isolate pointer from Context structure into R0. |
__ LoadFieldFromOffset(R0, CTX, Context::isolate_offset(), kNoPP); |
@@ -1641,10 +1640,26 @@ void StubCode::GenerateLazyCompileStub(Assembler* assembler) { |
} |
-void StubCode::GenerateBreakpointRuntimeStub(Assembler* assembler) { |
+// R5: Contains an ICData. |
+void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) { |
__ EnterStubFrame(); |
- __ Push(R5); // Save IC Data. |
- __ Push(R4); // Save arg. desc. |
+ __ Push(R5); |
+ __ PushObject(Object::null_object(), PP); // Space for result. |
+ __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
+ __ Pop(R0); |
+ __ Pop(R5); |
+ __ LeaveStubFrame(); |
+ __ br(R0); |
+} |
+ |
+ |
+// R5: Contains Smi 0 (need to preserve a GC-safe value for the lazy compile |
+// stub). |
+// R4: Contains an arguments descriptor. |
+void StubCode::GenerateClosureCallBreakpointStub(Assembler* assembler) { |
+ __ EnterStubFrame(); |
+ __ Push(R5); |
+ __ Push(R4); |
__ PushObject(Object::null_object(), PP); // Space for result. |
__ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
__ Pop(R0); |
@@ -1655,6 +1670,15 @@ void StubCode::GenerateBreakpointRuntimeStub(Assembler* assembler) { |
} |
+void StubCode::GenerateRuntimeCallBreakpointStub(Assembler* assembler) { |
+ __ EnterStubFrame(); |
+ __ PushObject(Object::null_object(), PP); // Space for result. |
+ __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0); |
+ __ Pop(R0); |
+ __ LeaveStubFrame(); |
+ __ br(R0); |
+} |
+ |
// Called only from unoptimized code. All relevant registers have been saved. |
void StubCode::GenerateDebugStepCheckStub( |
Assembler* assembler) { |