summaryrefslogtreecommitdiff
path: root/compiler/optimizing/locations.h
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/locations.h')
-rw-r--r--compiler/optimizing/locations.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/compiler/optimizing/locations.h b/compiler/optimizing/locations.h
index 8f5eed7afd..2a09921ba4 100644
--- a/compiler/optimizing/locations.h
+++ b/compiler/optimizing/locations.h
@@ -478,6 +478,23 @@ class RegisterSet : public ValueObject {
return (register_set & (1 << reg)) != 0;
}
+ bool OverlapsRegisters(Location out) {
+ DCHECK(out.IsRegisterKind());
+ switch (out.GetKind()) {
+ case Location::Kind::kRegister:
+ return ContainsCoreRegister(out.reg());
+ case Location::Kind::kFpuRegister:
+ return ContainsFloatingPointRegister(out.reg());
+ case Location::Kind::kRegisterPair:
+ return ContainsCoreRegister(out.low()) || ContainsCoreRegister(out.high());
+ case Location::Kind::kFpuRegisterPair:
+ return ContainsFloatingPointRegister(out.low()) ||
+ ContainsFloatingPointRegister(out.high());
+ default:
+ return false;
+ }
+ }
+
size_t GetNumberOfRegisters() const {
return POPCOUNT(core_registers_) + POPCOUNT(floating_point_registers_);
}