From 5310b07c0469b3099c010567fd9b8e374f3ecdc2 Mon Sep 17 00:00:00 2001 From: "sgjesse@chromium.org" Date: Mon, 28 Mar 2011 12:27:56 +0000 Subject: [PATCH] Add more details the --trace-deopt output R=ager@chromium.org Review URL: http://codereview.chromium.org/6735007 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7387 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/deoptimizer-arm.cc | 25 ++++++++++++++++++++++--- src/ia32/deoptimizer-ia32.cc | 24 +++++++++++++++++++++--- src/x64/deoptimizer-x64.cc | 25 ++++++++++++++++++++++--- 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc index 33ca3b0d2f..3a3dcf085d 100644 --- a/src/arm/deoptimizer-arm.cc +++ b/src/arm/deoptimizer-arm.cc @@ -288,14 +288,33 @@ void Deoptimizer::DoComputeOsrOutputFrame() { // There are no translation commands for the caller's pc and fp, the // context, and the function. Set them up explicitly. - for (int i = 0; ok && i < 4; i++) { + for (int i = StandardFrameConstants::kCallerPCOffset; + ok && i >= StandardFrameConstants::kMarkerOffset; + i -= kPointerSize) { uint32_t input_value = input_->GetFrameSlot(input_offset); if (FLAG_trace_osr) { - PrintF(" [sp + %d] <- 0x%08x ; [sp + %d] (fixed part)\n", + const char* name = "UNKNOWN"; + switch (i) { + case StandardFrameConstants::kCallerPCOffset: + name = "caller's pc"; + break; + case StandardFrameConstants::kCallerFPOffset: + name = "fp"; + break; + case StandardFrameConstants::kContextOffset: + name = "context"; + break; + case StandardFrameConstants::kMarkerOffset: + name = "function"; + break; + } + PrintF(" [sp + %d] <- 0x%08x ; [sp + %d] (fixed part - %s)\n", output_offset, input_value, - input_offset); + input_offset, + name); } + output_[0]->SetFrameSlot(output_offset, input_->GetFrameSlot(input_offset)); input_offset -= kPointerSize; output_offset -= kPointerSize; diff --git a/src/ia32/deoptimizer-ia32.cc b/src/ia32/deoptimizer-ia32.cc index 026572f2e5..c6342d7b48 100644 --- a/src/ia32/deoptimizer-ia32.cc +++ b/src/ia32/deoptimizer-ia32.cc @@ -369,13 +369,31 @@ void Deoptimizer::DoComputeOsrOutputFrame() { // There are no translation commands for the caller's pc and fp, the // context, and the function. Set them up explicitly. - for (int i = 0; ok && i < 4; i++) { + for (int i = StandardFrameConstants::kCallerPCOffset; + ok && i >= StandardFrameConstants::kMarkerOffset; + i -= kPointerSize) { uint32_t input_value = input_->GetFrameSlot(input_offset); if (FLAG_trace_osr) { - PrintF(" [esp + %d] <- 0x%08x ; [esp + %d] (fixed part)\n", + const char* name = "UNKNOWN"; + switch (i) { + case StandardFrameConstants::kCallerPCOffset: + name = "caller's pc"; + break; + case StandardFrameConstants::kCallerFPOffset: + name = "fp"; + break; + case StandardFrameConstants::kContextOffset: + name = "context"; + break; + case StandardFrameConstants::kMarkerOffset: + name = "function"; + break; + } + PrintF(" [esp + %d] <- 0x%08x ; [esp + %d] (fixed part - %s)\n", output_offset, input_value, - input_offset); + input_offset, + name); } output_[0]->SetFrameSlot(output_offset, input_->GetFrameSlot(input_offset)); input_offset -= kPointerSize; diff --git a/src/x64/deoptimizer-x64.cc b/src/x64/deoptimizer-x64.cc index c58d5ea4af..2080c615ca 100644 --- a/src/x64/deoptimizer-x64.cc +++ b/src/x64/deoptimizer-x64.cc @@ -361,13 +361,32 @@ void Deoptimizer::DoComputeOsrOutputFrame() { // There are no translation commands for the caller's pc and fp, the // context, and the function. Set them up explicitly. - for (int i = 0; ok && i < 4; i++) { + for (int i = StandardFrameConstants::kCallerPCOffset; + ok && i >= StandardFrameConstants::kMarkerOffset; + i -= kPointerSize) { intptr_t input_value = input_->GetFrameSlot(input_offset); if (FLAG_trace_osr) { - PrintF(" [esp + %d] <- 0x%08" V8PRIxPTR " ; [esp + %d] (fixed part)\n", + const char* name = "UNKNOWN"; + switch (i) { + case StandardFrameConstants::kCallerPCOffset: + name = "caller's pc"; + break; + case StandardFrameConstants::kCallerFPOffset: + name = "fp"; + break; + case StandardFrameConstants::kContextOffset: + name = "context"; + break; + case StandardFrameConstants::kMarkerOffset: + name = "function"; + break; + } + PrintF(" [rsp + %d] <- 0x%08" V8PRIxPTR " ; [rsp + %d] " + "(fixed part - %s)\n", output_offset, input_value, - input_offset); + input_offset, + name); } output_[0]->SetFrameSlot(output_offset, input_->GetFrameSlot(input_offset)); input_offset -= kPointerSize;