| Index: runtime/vm/stub_code_mips.cc
|
| diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
|
| index 5c04197cd8e5ddb11f6bcc82d0c70f696cdeb9ca..62d3b6787c1daca2e6dd1abbb488751d7bfab1a2 100644
|
| --- a/runtime/vm/stub_code_mips.cc
|
| +++ b/runtime/vm/stub_code_mips.cc
|
| @@ -34,7 +34,7 @@ DECLARE_FLAG(bool, enable_debugger);
|
| // SP + 4*S4 - 4 : address of first argument in argument array.
|
| // SP + 4*S4 : address of return value.
|
| // S5 : address of the runtime function to call.
|
| -// S4 : number of arguments to the call as Smi.
|
| +// S4 : number of arguments to the call.
|
| void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
|
| const intptr_t isolate_offset = NativeArguments::isolate_offset();
|
| const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset();
|
| @@ -49,7 +49,6 @@ void StubCode::GenerateCallToRuntimeStub(Assembler* assembler) {
|
| __ sw(RA, Address(SP, 1 * kWordSize));
|
| __ sw(FP, Address(SP, 0 * kWordSize));
|
| __ mov(FP, SP);
|
| - __ SmiUntag(S4);
|
|
|
| // Load current Isolate pointer from Context structure into A0.
|
| __ lw(A0, FieldAddress(CTX, Context::isolate_offset()));
|
| @@ -1726,8 +1725,30 @@ void StubCode::GenerateLazyCompileStub(Assembler* assembler) {
|
| }
|
|
|
|
|
| -void StubCode::GenerateBreakpointRuntimeStub(Assembler* assembler) {
|
| - __ Comment("BreakpointRuntime stub");
|
| +// S5: Contains an ICData.
|
| +void StubCode::GenerateICCallBreakpointStub(Assembler* assembler) {
|
| + __ Comment("ICCallBreakpoint stub");
|
| + __ EnterStubFrame();
|
| + __ addiu(SP, SP, Immediate(-2 * kWordSize));
|
| + __ sw(S5, Address(SP, 1 * kWordSize));
|
| + __ LoadImmediate(TMP, reinterpret_cast<intptr_t>(Object::null()));
|
| + __ sw(TMP, Address(SP, 0 * kWordSize));
|
| +
|
| + __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0);
|
| +
|
| + __ lw(S5, Address(SP, 1 * kWordSize));
|
| + __ lw(T0, Address(SP, 0 * kWordSize));
|
| + __ addiu(SP, SP, Immediate(2 * kWordSize));
|
| + __ LeaveStubFrame();
|
| + __ jr(T0);
|
| +}
|
| +
|
| +
|
| +// S5: Contains Smi 0 (need to preserve a GC-safe value for the lazy compile
|
| +// stub).
|
| +// S4: Contains an arguments descriptor.
|
| +void StubCode::GenerateClosureCallBreakpointStub(Assembler* assembler) {
|
| + __ Comment("ClosureCallBreakpoint stub");
|
| __ EnterStubFrame();
|
| __ addiu(SP, SP, Immediate(-3 * kWordSize));
|
| __ sw(S5, Address(SP, 2 * kWordSize));
|
| @@ -1746,6 +1767,22 @@ void StubCode::GenerateBreakpointRuntimeStub(Assembler* assembler) {
|
| }
|
|
|
|
|
| +void StubCode::GenerateRuntimeCallBreakpointStub(Assembler* assembler) {
|
| + __ Comment("RuntimeCallBreakpoint stub");
|
| + __ EnterStubFrame();
|
| + __ addiu(SP, SP, Immediate(-1 * kWordSize));
|
| + __ LoadImmediate(TMP, reinterpret_cast<intptr_t>(Object::null()));
|
| + __ sw(TMP, Address(SP, 0 * kWordSize));
|
| +
|
| + __ CallRuntime(kBreakpointRuntimeHandlerRuntimeEntry, 0);
|
| +
|
| + __ lw(T0, Address(SP, 0 * kWordSize));
|
| + __ addiu(SP, SP, Immediate(3 * kWordSize));
|
| + __ LeaveStubFrame();
|
| + __ jr(T0);
|
| +}
|
| +
|
| +
|
| // Called only from unoptimized code. All relevant registers have been saved.
|
| // RA: return address.
|
| void StubCode::GenerateDebugStepCheckStub(Assembler* assembler) {
|
|
|