OSDN Git Service

Block callee save fp registers in debuggable.
authorNicolas Geoffray <ngeoffray@google.com>
Mon, 5 Oct 2015 10:15:37 +0000 (11:15 +0100)
committerNicolas Geoffray <ngeoffray@google.com>
Mon, 5 Oct 2015 12:26:51 +0000 (13:26 +0100)
This is a simple but conservative implementation. We could
extend it by using the registers but still saving them before
a call and at method entry.

bug: 21057237

Change-Id: Ia2e9e0e2efae0b01625e0f4165d0535c4bf9ba62

compiler/optimizing/code_generator_arm.cc
compiler/optimizing/code_generator_arm64.cc

index c283e5a..299350b 100644 (file)
@@ -607,7 +607,12 @@ void CodeGeneratorARM::SetupBlockedRegisters(bool is_baseline) const {
     }
 
     blocked_core_registers_[kCoreSavedRegisterForBaseline] = false;
+  }
 
+  if (is_baseline || GetGraph()->IsDebuggable()) {
+    // Stubs do not save callee-save floating point registers. If the graph
+    // is debuggable, we need to deal with these registers differently. For
+    // now, just block them.
     for (size_t i = 0; i < arraysize(kFpuCalleeSaves); ++i) {
       blocked_fpu_registers_[kFpuCalleeSaves[i]] = true;
     }
index 39d6db7..c7ade65 100644 (file)
@@ -864,7 +864,12 @@ void CodeGeneratorARM64::SetupBlockedRegisters(bool is_baseline) const {
     while (!reserved_core_baseline_registers.IsEmpty()) {
       blocked_core_registers_[reserved_core_baseline_registers.PopLowestIndex().code()] = true;
     }
+  }
 
+  if (is_baseline || GetGraph()->IsDebuggable()) {
+    // Stubs do not save callee-save floating point registers. If the graph
+    // is debuggable, we need to deal with these registers differently. For
+    // now, just block them.
     CPURegList reserved_fp_baseline_registers = callee_saved_fp_registers;
     while (!reserved_fp_baseline_registers.IsEmpty()) {
       blocked_fpu_registers_[reserved_fp_baseline_registers.PopLowestIndex().code()] = true;