summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2015-10-05 11:15:37 +0100
committer Nicolas Geoffray <ngeoffray@google.com> 2015-10-05 13:26:51 +0100
commitecf680d5e1fe6fcdd57962334a7c7865720503cc (patch)
treea7b5fbcf2f37f1af47395e28debb67ce41de8f71
parentc8fb997c694e3587f4b618b2a1727206b8d4a327 (diff)
Block callee save fp registers in debuggable.
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
-rw-r--r--compiler/optimizing/code_generator_arm.cc5
-rw-r--r--compiler/optimizing/code_generator_arm64.cc5
2 files changed, 10 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc
index c283e5a4c1..299350b879 100644
--- a/compiler/optimizing/code_generator_arm.cc
+++ b/compiler/optimizing/code_generator_arm.cc
@@ -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;
}
diff --git a/compiler/optimizing/code_generator_arm64.cc b/compiler/optimizing/code_generator_arm64.cc
index 39d6db77da..c7ade65cd8 100644
--- a/compiler/optimizing/code_generator_arm64.cc
+++ b/compiler/optimizing/code_generator_arm64.cc
@@ -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;