summaryrefslogtreecommitdiff
path: root/compiler/optimizing
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2015-01-23 21:51:55 +0000
committer Nicolas Geoffray <ngeoffray@google.com> 2015-01-23 21:53:39 +0000
commit4597b5b7648169fbdca1af69b7643e27a6c8a523 (patch)
treee1979403ef5ca29bfcf72e6f5e4824de97a3e26b /compiler/optimizing
parentc08e6453878da2e064729e01d562973280948ce1 (diff)
Fix valgrind error.
Also introduce kLastCpuRegister to define kFakeReturnRegister. Change-Id: I58cef6186c0452d45b5d2dcba9298cbe07f3552d
Diffstat (limited to 'compiler/optimizing')
-rw-r--r--compiler/optimizing/code_generator_x86_64.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc
index e60f8a5690..8cc0678bae 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<const int*>(kCoreCalleeSaves),
- arraysize(kCoreCalleeSaves)),
+ arraysize(kCoreCalleeSaves))
+ | (1 << kFakeReturnRegister),
ComputeCalleeSaveMask(reinterpret_cast<const int*>(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));
}
}