From 4597b5b7648169fbdca1af69b7643e27a6c8a523 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Fri, 23 Jan 2015 21:51:55 +0000 Subject: [PATCH] Fix valgrind error. Also introduce kLastCpuRegister to define kFakeReturnRegister. Change-Id: I58cef6186c0452d45b5d2dcba9298cbe07f3552d --- compiler/optimizing/code_generator_x86_64.cc | 14 +++++++------- runtime/arch/x86_64/registers_x86_64.h | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc index e60f8a569..8cc0678ba 100644 --- a/compiler/optimizing/code_generator_x86_64.cc +++ b/compiler/optimizing/code_generator_x86_64.cc @@ -45,9 +45,7 @@ static constexpr size_t kRuntimeParameterCoreRegistersLength = static constexpr FloatRegister kRuntimeParameterFpuRegisters[] = { XMM0, XMM1 }; static constexpr size_t kRuntimeParameterFpuRegistersLength = arraysize(kRuntimeParameterFpuRegisters); -static constexpr Register kFakeReturnRegister = Register(16); -static constexpr Register kCoreCalleeSaves[] = - { RBX, RBP, R12, R13, R14, R15, kFakeReturnRegister }; +static constexpr Register kCoreCalleeSaves[] = { RBX, RBP, R12, R13, R14, R15 }; static constexpr FloatRegister kFpuCalleeSaves[] = { XMM12, XMM13, XMM14, XMM15 }; static constexpr int kC2ConditionMask = 0x400; @@ -412,13 +410,16 @@ static uint32_t ComputeCalleeSaveMask(const int* registers, size_t length) { } static constexpr int kNumberOfCpuRegisterPairs = 0; +// Use a fake return address register to mimic Quick. +static constexpr Register kFakeReturnRegister = Register(kLastCpuRegister + 1); CodeGeneratorX86_64::CodeGeneratorX86_64(HGraph* graph, const CompilerOptions& compiler_options) : CodeGenerator(graph, kNumberOfCpuRegisters, kNumberOfFloatRegisters, kNumberOfCpuRegisterPairs, ComputeCalleeSaveMask(reinterpret_cast(kCoreCalleeSaves), - arraysize(kCoreCalleeSaves)), + arraysize(kCoreCalleeSaves)) + | (1 << kFakeReturnRegister), ComputeCalleeSaveMask(reinterpret_cast(kFpuCalleeSaves), arraysize(kFpuCalleeSaves)), compiler_options), @@ -426,7 +427,6 @@ CodeGeneratorX86_64::CodeGeneratorX86_64(HGraph* graph, const CompilerOptions& c location_builder_(graph, this), instruction_visitor_(graph, this), move_resolver_(graph->GetArena(), this) { - // Use a fake return address register to mimic Quick. AddAllocatedRegister(Location::RegisterLocation(kFakeReturnRegister)); } @@ -492,7 +492,7 @@ void CodeGeneratorX86_64::GenerateFrameEntry() { for (int i = arraysize(kCoreCalleeSaves) - 1; i >= 0; --i) { Register reg = kCoreCalleeSaves[i]; - if (allocated_registers_.ContainsCoreRegister(reg) && reg != kFakeReturnRegister) { + if (allocated_registers_.ContainsCoreRegister(reg)) { __ pushq(CpuRegister(reg)); } } @@ -525,7 +525,7 @@ void CodeGeneratorX86_64::GenerateFrameExit() { for (size_t i = 0; i < arraysize(kCoreCalleeSaves); ++i) { Register reg = kCoreCalleeSaves[i]; - if (allocated_registers_.ContainsCoreRegister(reg) && reg != kFakeReturnRegister) { + if (allocated_registers_.ContainsCoreRegister(reg)) { __ popq(CpuRegister(reg)); } } diff --git a/runtime/arch/x86_64/registers_x86_64.h b/runtime/arch/x86_64/registers_x86_64.h index 8b0dc07e0..dda1d5f56 100644 --- a/runtime/arch/x86_64/registers_x86_64.h +++ b/runtime/arch/x86_64/registers_x86_64.h @@ -43,6 +43,7 @@ enum Register { R13 = 13, R14 = 14, R15 = 15, + kLastCpuRegister = 15, kNumberOfCpuRegisters = 16, kNoRegister = -1 // Signals an illegal register. }; -- 2.11.0