diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2014-10-06 09:12:41 +0100 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2014-10-07 20:19:47 +0100 |
commit | 7fb49da8ec62e8a10ed9419ade9f32c6b1174687 (patch) | |
tree | 8b1bec67452b84809cecd5645543e1f885ccbd44 /compiler/optimizing/code_generator.h | |
parent | 4a1b4679cda2f0d2893b8e3f910c21231849291c (diff) | |
download | art-7fb49da8ec62e8a10ed9419ade9f32c6b1174687.tar.gz art-7fb49da8ec62e8a10ed9419ade9f32c6b1174687.tar.bz2 art-7fb49da8ec62e8a10ed9419ade9f32c6b1174687.zip |
Add support for floats and doubles.
- Follows Quick conventions.
- Currently only works with baseline register allocator.
Change-Id: Ie4b8e298f4f5e1cd82364da83e4344d4fc3621a3
Diffstat (limited to 'compiler/optimizing/code_generator.h')
-rw-r--r-- | compiler/optimizing/code_generator.h | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h index b58f3b3efc..c7623fe895 100644 --- a/compiler/optimizing/code_generator.h +++ b/compiler/optimizing/code_generator.h @@ -203,28 +203,42 @@ class CodeGenerator : public ArenaObject { DISALLOW_COPY_AND_ASSIGN(CodeGenerator); }; -template <typename T> +template <typename C, typename F> class CallingConvention { public: - CallingConvention(const T* registers, int number_of_registers) - : registers_(registers), number_of_registers_(number_of_registers) {} + CallingConvention(const C* registers, + size_t number_of_registers, + const F* fpu_registers, + size_t number_of_fpu_registers) + : registers_(registers), + number_of_registers_(number_of_registers), + fpu_registers_(fpu_registers), + number_of_fpu_registers_(number_of_fpu_registers) {} size_t GetNumberOfRegisters() const { return number_of_registers_; } + size_t GetNumberOfFpuRegisters() const { return number_of_fpu_registers_; } - T GetRegisterAt(size_t index) const { + C GetRegisterAt(size_t index) const { DCHECK_LT(index, number_of_registers_); return registers_[index]; } - uint8_t GetStackOffsetOf(size_t index) const { + F GetFpuRegisterAt(size_t index) const { + DCHECK_LT(index, number_of_fpu_registers_); + return fpu_registers_[index]; + } + + size_t GetStackOffsetOf(size_t index) const { // We still reserve the space for parameters passed by registers. // Add one for the method pointer. return (index + 1) * kVRegSize; } private: - const T* registers_; + const C* registers_; const size_t number_of_registers_; + const F* fpu_registers_; + const size_t number_of_fpu_registers_; DISALLOW_COPY_AND_ASSIGN(CallingConvention); }; |