diff options
Diffstat (limited to 'compiler/optimizing/locations.h')
-rw-r--r-- | compiler/optimizing/locations.h | 17 |
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_); } |