Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1417)

Unified Diff: runtime/vm/stub_code_mips.cc

Issue 77413004: Pushes 0 for PC marker in runtime call stubs on ARM and MIPS. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/stub_code_arm.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/stub_code_mips.cc
===================================================================
--- runtime/vm/stub_code_mips.cc (revision 30547)
+++ runtime/vm/stub_code_mips.cc (working copy)
@@ -39,11 +39,15 @@
const intptr_t argc_tag_offset = NativeArguments::argc_tag_offset();
const intptr_t argv_offset = NativeArguments::argv_offset();
const intptr_t retval_offset = NativeArguments::retval_offset();
- const intptr_t exitframe_last_param_slot_from_fp = 1;
+ const intptr_t exitframe_last_param_slot_from_fp = 2;
__ SetPrologueOffset();
__ TraceSimMsg("CallToRuntimeStub");
- __ EnterFrame();
+ __ addiu(SP, SP, Immediate(-3 * kWordSize));
+ __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker
+ __ sw(RA, Address(SP, 1 * kWordSize));
+ __ sw(FP, Address(SP, 0 * kWordSize));
+ __ mov(FP, SP);
// Load current Isolate pointer from Context structure into A0.
__ lw(A0, FieldAddress(CTX, Context::isolate_offset()));
@@ -80,10 +84,9 @@
// Set argv in NativeArguments.
__ addiu(A2, A2, Immediate(exitframe_last_param_slot_from_fp * kWordSize));
- ASSERT(retval_offset == 3 * kWordSize);
-
// Call runtime or redirection via simulator.
__ jalr(S5);
+ ASSERT(retval_offset == 3 * kWordSize);
// Retval is next to 1st argument.
__ delay_slot()->addiu(A3, A2, Immediate(kWordSize));
__ TraceSimMsg("CallToRuntimeStub return");
@@ -103,7 +106,11 @@
// Cache Context pointer into CTX while executing Dart code.
__ mov(CTX, A2);
- __ LeaveFrameAndReturn();
+ __ mov(SP, FP);
+ __ lw(RA, Address(SP, 1 * kWordSize));
+ __ lw(FP, Address(SP, 0 * kWordSize));
+ __ Ret();
+ __ delay_slot()->addiu(SP, SP, Immediate(3 * kWordSize));
}
@@ -140,7 +147,11 @@
__ SetPrologueOffset();
__ TraceSimMsg("CallNativeCFunctionStub");
- __ EnterFrame();
+ __ addiu(SP, SP, Immediate(-3 * kWordSize));
+ __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker
+ __ sw(RA, Address(SP, 1 * kWordSize));
+ __ sw(FP, Address(SP, 0 * kWordSize));
+ __ mov(FP, SP);
// Load current Isolate pointer from Context structure into A0.
__ lw(A0, FieldAddress(CTX, Context::isolate_offset()));
@@ -170,7 +181,7 @@
// Set argv in NativeArguments: A2 already contains argv.
ASSERT(retval_offset == 3 * kWordSize);
- __ addiu(A3, FP, Immediate(2 * kWordSize)); // Set retval in NativeArgs.
+ __ addiu(A3, FP, Immediate(3 * kWordSize)); // Set retval in NativeArgs.
// TODO(regis): Should we pass the structure by value as in runtime calls?
// It would require changing Dart API for native functions.
@@ -212,7 +223,11 @@
// Cache Context pointer into CTX while executing Dart code.
__ mov(CTX, A2);
- __ LeaveFrameAndReturn();
+ __ mov(SP, FP);
+ __ lw(RA, Address(SP, 1 * kWordSize));
+ __ lw(FP, Address(SP, 0 * kWordSize));
+ __ Ret();
+ __ delay_slot()->addiu(SP, SP, Immediate(3 * kWordSize));
}
@@ -230,7 +245,11 @@
__ SetPrologueOffset();
__ TraceSimMsg("CallNativeCFunctionStub");
- __ EnterFrame();
+ __ addiu(SP, SP, Immediate(-3 * kWordSize));
+ __ sw(ZR, Address(SP, 2 * kWordSize)); // Push 0 for the PC marker
+ __ sw(RA, Address(SP, 1 * kWordSize));
+ __ sw(FP, Address(SP, 0 * kWordSize));
+ __ mov(FP, SP);
// Load current Isolate pointer from Context structure into A0.
__ lw(A0, FieldAddress(CTX, Context::isolate_offset()));
@@ -260,7 +279,7 @@
// Set argv in NativeArguments: A2 already contains argv.
ASSERT(retval_offset == 3 * kWordSize);
- __ addiu(A3, FP, Immediate(2 * kWordSize)); // Set retval in NativeArgs.
+ __ addiu(A3, FP, Immediate(3 * kWordSize)); // Set retval in NativeArgs.
// TODO(regis): Should we pass the structure by value as in runtime calls?
// It would require changing Dart API for native functions.
@@ -293,7 +312,11 @@
// Cache Context pointer into CTX while executing Dart code.
__ mov(CTX, A2);
- __ LeaveFrameAndReturn();
+ __ mov(SP, FP);
+ __ lw(RA, Address(SP, 1 * kWordSize));
+ __ lw(FP, Address(SP, 0 * kWordSize));
+ __ Ret();
+ __ delay_slot()->addiu(SP, SP, Immediate(3 * kWordSize));
}
« no previous file with comments | « runtime/vm/stub_code_arm.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698