| 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) {
|
|
|