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

Unified Diff: runtime/vm/simulator_mips.cc

Issue 817593002: Improve generated MIPS code for conditional expressions and branches by delaying (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years 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/simulator_mips.h ('k') | runtime/vm/stub_code_mips.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/simulator_mips.cc
===================================================================
--- runtime/vm/simulator_mips.cc (revision 42554)
+++ runtime/vm/simulator_mips.cc (working copy)
@@ -23,8 +23,9 @@
namespace dart {
-DEFINE_FLAG(bool, trace_sim, false, "Trace simulator execution.");
-DEFINE_FLAG(int, stop_sim_at, 0,
+DEFINE_FLAG(int, trace_sim_after, -1,
+ "Trace simulator execution after instruction count reached.");
+DEFINE_FLAG(int, stop_sim_at, -1,
"Instruction address or instruction count to stop simulator at.");
@@ -592,8 +593,13 @@
OS::Print("Not at debugger stop.\n");
}
} else if (strcmp(cmd, "trace") == 0) {
- FLAG_trace_sim = !FLAG_trace_sim;
- OS::Print("execution tracing %s\n", FLAG_trace_sim ? "on" : "off");
+ if (FLAG_trace_sim_after == -1) {
+ FLAG_trace_sim_after = sim_->get_icount();
+ OS::Print("execution tracing on\n");
+ } else {
+ FLAG_trace_sim_after = -1;
+ OS::Print("execution tracing off\n");
+ }
} else if (strcmp(cmd, "bt") == 0) {
PrintBacktrace();
} else {
@@ -988,6 +994,14 @@
}
+bool Simulator::IsTracingExecution() const {
+ // Integer flag values are signed, so we must cast to unsigned.
+ // The default of -1 hence becomes the maximum unsigned value.
+ return (static_cast<uintptr_t>(icount_) >
+ static_cast<uintptr_t>(FLAG_trace_sim_after));
+}
+
+
void Simulator::Format(Instr* instr, const char* format) {
OS::PrintErr("Simulator - unknown instruction: %s\n", format);
UNIMPLEMENTED();
@@ -1202,11 +1216,8 @@
} else if (instr->BreakCodeField() == Instr::kSimulatorMessageCode) {
const char* message = *reinterpret_cast<const char**>(
reinterpret_cast<intptr_t>(instr) - Instr::kInstrSize);
- if (FLAG_trace_sim) {
+ if (IsTracingExecution()) {
OS::Print("Message: %s\n", message);
- } else {
- OS::PrintErr("Bad break code: 0x%x\n", instr->InstructionBits());
- UnimplementedInstruction(instr);
}
} else if (instr->BreakCodeField() == Instr::kSimulatorRedirectCode) {
SimulatorSetjmpBuffer buffer(this);
@@ -1215,7 +1226,7 @@
int32_t saved_ra = get_register(RA);
Redirection* redirection = Redirection::FromBreakInstruction(instr);
uword external = redirection->external_function();
- if (FLAG_trace_sim) {
+ if (IsTracingExecution()) {
OS::Print("Call to host function at 0x%" Pd "\n", external);
}
@@ -1966,7 +1977,8 @@
void Simulator::InstructionDecode(Instr* instr) {
- if (FLAG_trace_sim) {
+ if (IsTracingExecution()) {
+ OS::Print("%u ", icount_);
const uword start = reinterpret_cast<uword>(instr);
const uword end = start + Instr::kInstrSize;
Disassembler::Disassemble(start, end);
@@ -2265,7 +2277,7 @@
delay_slot_ = true;
icount_++;
Instr* instr = Instr::At(pc_ + Instr::kInstrSize);
- if (FLAG_stop_sim_at != 0) {
+ if (FLAG_stop_sim_at != -1) {
if (static_cast<int>(icount_) == FLAG_stop_sim_at) {
SimulatorDebugger dbg(this);
dbg.Stop(instr, "Instruction count reached");
@@ -2280,7 +2292,7 @@
void Simulator::Execute() {
- if (FLAG_stop_sim_at == 0) {
+ if (FLAG_stop_sim_at == -1) {
// Fast version of the dispatch loop without checking whether the simulator
// should be stopping at a particular executed instruction.
while (pc_ != kEndSimulatingPC) {
« no previous file with comments | « runtime/vm/simulator_mips.h ('k') | runtime/vm/stub_code_mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698