diff options
author | 2015-01-26 10:10:46 +0000 | |
---|---|---|
committer | 2015-01-26 10:10:47 +0000 | |
commit | 2dadc9df0ffb822870a150f81257792b83241c77 (patch) | |
tree | ee8650cc14ec18ce0d7abf089c7d2e0dfc9e079d /compiler/optimizing/code_generator.h | |
parent | 336247fa6deba2948f5ede1df806f48cf67c790a (diff) | |
parent | 4dee636d21d9ce54386cdfbb824e5eb2a9c1af0d (diff) |
Merge "Support callee-save registers on ARM."
Diffstat (limited to 'compiler/optimizing/code_generator.h')
-rw-r--r-- | compiler/optimizing/code_generator.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h index 85d18c0b43..45f02e53dc 100644 --- a/compiler/optimizing/code_generator.h +++ b/compiler/optimizing/code_generator.h @@ -129,6 +129,20 @@ class CodeGenerator { size_t GetNumberOfFloatingPointRegisters() const { return number_of_fpu_registers_; } virtual void SetupBlockedRegisters(bool is_baseline) const = 0; + virtual void ComputeSpillMask() { + core_spill_mask_ = allocated_registers_.GetCoreRegisters() & core_callee_save_mask_; + DCHECK_NE(core_spill_mask_, 0u) << "At least the return address register must be saved"; + fpu_spill_mask_ = allocated_registers_.GetFloatingPointRegisters() & fpu_callee_save_mask_; + } + + static uint32_t ComputeRegisterMask(const int* registers, size_t length) { + uint32_t mask = 0; + for (size_t i = 0, e = length; i < e; ++i) { + mask |= (1 << registers[i]); + } + return mask; + } + virtual void DumpCoreRegister(std::ostream& stream, int reg) const = 0; virtual void DumpFloatingPointRegister(std::ostream& stream, int reg) const = 0; virtual InstructionSet GetInstructionSet() const = 0; |