Index: src/arm/deoptimizer-arm.cc |
diff --git a/src/arm/deoptimizer-arm.cc b/src/arm/deoptimizer-arm.cc |
index 33ca3b0d2f56aecc8cc4c77fc1fd8c4e1b7ca30a..3a3dcf085df9fcb3baa9168c47e7d157c3ae7889 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; |