summaryrefslogtreecommitdiff
path: root/compiler/optimizing
diff options
context:
space:
mode:
author Mathieu Chartier <mathieuc@google.com> 2015-05-31 14:29:23 -0700
committer Mathieu Chartier <mathieuc@google.com> 2015-05-31 17:36:10 -0700
commite3b034a6f6f0d80d519ab08bdd18be4de2a4a2db (patch)
tree660cc713e0ad2d71ccd1e0af1399c92665b626c7 /compiler/optimizing
parent119a8025bbc1c6f4a2d537e9a6d22f33ef31e552 (diff)
Fix some ArtMethod related bugs
Added root visiting for runtime methods, not currently required since the GcRoots in these methods are null. Added missing GetInterfaceMethodIfProxy in GetMethodLine, fixes --trace run-tests 005, 044. Fixed optimizing compiler bug where we used a normal stack location instead of double on ARM64, this fixes the debuggable tests. TODO: Fix JDWP tests. Bug: 19264997 Change-Id: I7c55f69c61d1b45351fd0dc7185ffe5efad82bd3
Diffstat (limited to 'compiler/optimizing')
-rw-r--r--compiler/optimizing/code_generator.cc3
-rw-r--r--compiler/optimizing/code_generator_arm64.cc2
-rw-r--r--compiler/optimizing/code_generator_x86_64.cc2
3 files changed, 4 insertions, 3 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc
index c106d3064c..0cd63a679c 100644
--- a/compiler/optimizing/code_generator.cc
+++ b/compiler/optimizing/code_generator.cc
@@ -124,13 +124,14 @@ void CodeGenerator::CompileBaseline(CodeAllocator* allocator, bool is_leaf) {
if (!is_leaf) {
MarkNotLeaf();
}
+ const bool is_64_bit = Is64BitInstructionSet(GetInstructionSet());
InitializeCodeGeneration(GetGraph()->GetNumberOfLocalVRegs()
+ GetGraph()->GetTemporariesVRegSlots()
+ 1 /* filler */,
0, /* the baseline compiler does not have live registers at slow path */
0, /* the baseline compiler does not have live registers at slow path */
GetGraph()->GetMaximumNumberOfOutVRegs()
- + 1 /* current method */,
+ + (is_64_bit ? 2 : 1) /* current method */,
GetGraph()->GetBlocks());
CompileInternal(allocator, /* is_baseline */ true);
}
diff --git a/compiler/optimizing/code_generator_arm64.cc b/compiler/optimizing/code_generator_arm64.cc
index fbe26b02ec..40432e43d3 100644
--- a/compiler/optimizing/code_generator_arm64.cc
+++ b/compiler/optimizing/code_generator_arm64.cc
@@ -637,7 +637,7 @@ void CodeGeneratorARM64::Move(HInstruction* instruction,
DCHECK_NE(type, Primitive::kPrimVoid);
if (instruction->IsCurrentMethod()) {
- MoveLocation(location, Location::StackSlot(kCurrentMethodStackOffset));
+ MoveLocation(location, Location::DoubleStackSlot(kCurrentMethodStackOffset));
} else if (locations != nullptr && locations->Out().Equals(location)) {
return;
} else if (instruction->IsIntConstant()
diff --git a/compiler/optimizing/code_generator_x86_64.cc b/compiler/optimizing/code_generator_x86_64.cc
index 59a956515c..78d585115a 100644
--- a/compiler/optimizing/code_generator_x86_64.cc
+++ b/compiler/optimizing/code_generator_x86_64.cc
@@ -692,7 +692,7 @@ void CodeGeneratorX86_64::Move(HInstruction* instruction,
HInstruction* move_for) {
LocationSummary* locations = instruction->GetLocations();
if (instruction->IsCurrentMethod()) {
- Move(location, Location::StackSlot(kCurrentMethodStackOffset));
+ Move(location, Location::DoubleStackSlot(kCurrentMethodStackOffset));
} else if (locations != nullptr && locations->Out().Equals(location)) {
return;
} else if (locations != nullptr && locations->Out().IsConstant()) {