From b092d558908eebe75553733c68f0194b755c05fc Mon Sep 17 00:00:00 2001 From: "kmillikin@chromium.org" Date: Fri, 31 Jul 2009 11:27:14 +0000 Subject: [PATCH] Enable --trace when --multipass is on. Bugfix in bailout condition. All V8 and (ia32) mozilla tests pass with --multipass on, failures now count as regressions. Review URL: http://codereview.chromium.org/159698 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2598 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/cfg-arm.cc | 7 +++++++ src/cfg.cc | 5 +++-- src/ia32/cfg-ia32.cc | 7 +++++++ src/x64/cfg-x64.cc | 7 +++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/arm/cfg-arm.cc b/src/arm/cfg-arm.cc index 29de0a7..8d14b10 100644 --- a/src/arm/cfg-arm.cc +++ b/src/arm/cfg-arm.cc @@ -62,6 +62,9 @@ void EntryNode::Compile(MacroAssembler* masm) { __ push(ip); } } + if (FLAG_trace) { + __ CallRuntime(Runtime::kTraceEnter, 0); + } if (FLAG_check_stack) { StackCheckStub stub; __ CallStub(&stub); @@ -75,6 +78,10 @@ void ExitNode::Compile(MacroAssembler* masm) { ASSERT(!is_marked()); is_marked_ = true; Comment cmnt(masm, "[ ExitNode"); + if (FLAG_trace) { + __ push(r0); + __ CallRuntime(Runtime::kTraceExit, 1); + } __ mov(sp, fp); __ ldm(ia_w, sp, fp.bit() | lr.bit()); __ add(sp, sp, Operand((parameter_count_ + 1) * kPointerSize)); diff --git a/src/cfg.cc b/src/cfg.cc index d72707b..82fdbf6 100644 --- a/src/cfg.cc +++ b/src/cfg.cc @@ -68,8 +68,9 @@ Cfg* Cfg::Build(FunctionLiteral* fun) { if (cfg == NULL) { BAILOUT("unsupported statement type"); } - - ASSERT(!cfg->has_exit()); // Return on all paths. + if (cfg->has_exit()) { + BAILOUT("control path without explicit return"); + } cfg->PrependEntryNode(fun); return cfg; } diff --git a/src/ia32/cfg-ia32.cc b/src/ia32/cfg-ia32.cc index 0a77160..97010cb 100644 --- a/src/ia32/cfg-ia32.cc +++ b/src/ia32/cfg-ia32.cc @@ -65,6 +65,9 @@ void EntryNode::Compile(MacroAssembler* masm) { __ push(eax); } } + if (FLAG_trace) { + __ CallRuntime(Runtime::kTraceEnter, 0); + } if (FLAG_check_stack) { ExternalReference stack_limit = ExternalReference::address_of_stack_guard_limit(); @@ -87,6 +90,10 @@ void ExitNode::Compile(MacroAssembler* masm) { ASSERT(!is_marked()); is_marked_ = true; Comment cmnt(masm, "[ ExitNode"); + if (FLAG_trace) { + __ push(eax); + __ CallRuntime(Runtime::kTraceExit, 1); + } __ RecordJSReturn(); __ mov(esp, ebp); __ pop(ebp); diff --git a/src/x64/cfg-x64.cc b/src/x64/cfg-x64.cc index afa0c70..6d16a7d 100644 --- a/src/x64/cfg-x64.cc +++ b/src/x64/cfg-x64.cc @@ -67,6 +67,9 @@ void EntryNode::Compile(MacroAssembler* masm) { __ push(kScratchRegister); } } + if (FLAG_trace) { + __ CallRuntime(Runtime::kTraceEnter, 0); + } if (FLAG_check_stack) { ExternalReference stack_limit = ExternalReference::address_of_stack_guard_limit(); @@ -91,6 +94,10 @@ void ExitNode::Compile(MacroAssembler* masm) { is_marked_ = true; Comment cmnt(masm, "[ ExitNode"); + if (FLAG_trace) { + __ push(rax); + __ CallRuntime(Runtime::kTraceExit, 1); + } __ RecordJSReturn(); __ movq(rsp, rbp); __ pop(rbp); -- 2.7.4