Chromium Code Reviews| Index: runtime/vm/runtime_entry_arm.cc |
| =================================================================== |
| --- runtime/vm/runtime_entry_arm.cc (revision 19272) |
| +++ runtime/vm/runtime_entry_arm.cc (working copy) |
| @@ -7,10 +7,36 @@ |
| #include "vm/runtime_entry.h" |
| +#include "vm/assembler.h" |
| +#include "vm/simulator.h" |
| +#include "vm/stub_code.h" |
| + |
| namespace dart { |
| +#define __ assembler-> |
| + |
| + |
| +// Generate code to call into the stub which will call the runtime |
| +// function. Input for the stub is as follows: |
| +// SP : points to the arguments and return value array. |
| +// R5 : address of the runtime function to call. |
| +// R4 : number of arguments to the call. |
| void RuntimeEntry::Call(Assembler* assembler) const { |
| - UNIMPLEMENTED(); |
| + // Compute the effective address. When running under the simulator, |
| + // this is a redirection address that forces the simulator to call |
| + // into the runtime system. |
| + uword entry = GetEntryPoint(); |
| +#if defined(USING_SIMULATOR) |
| + entry = Simulator::RedirectExternalReference(entry, argument_count()); |
| +#endif |
| + if (!is_leaf()) { |
| + __ LoadImmediate(R5, entry); |
| + __ LoadImmediate(R4, argument_count()); |
| + __ BranchLink(&StubCode::CallToRuntimeLabel()); |
| + } else { |
| + ExternalLabel label(name(), entry); |
| + __ BranchLink(&label); |
|
srdjan
2013/03/01 17:46:28
Think positive:
if (leaf) {
} else {
}
regis
2013/03/04 17:52:18
Done.
|
| + } |
| } |
| } // namespace dart |