summaryrefslogtreecommitdiffstats
path: root/compiler/utils/arm/assembler_arm.cc
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2014-04-01 10:36:00 -0700
committerIan Rogers <irogers@google.com>2014-04-01 10:36:00 -0700
commit790a6b7312979513710c366b411ba6791ddf78c2 (patch)
treecb0f98dce2585727850ea7a60a34e933b5e8928a /compiler/utils/arm/assembler_arm.cc
parent88e0463fa7e8ea7b427b65a07cd7b28111575174 (diff)
downloadandroid_art-790a6b7312979513710c366b411ba6791ddf78c2.tar.gz
android_art-790a6b7312979513710c366b411ba6791ddf78c2.tar.bz2
android_art-790a6b7312979513710c366b411ba6791ddf78c2.zip
Calling convention support for cross 64/32 compilation.
Add REX support for x86-64 operands. Change-Id: I093ae26fb8c111d54b8c72166f054984564c04c6
Diffstat (limited to 'compiler/utils/arm/assembler_arm.cc')
-rw-r--r--compiler/utils/arm/assembler_arm.cc12
1 files changed, 7 insertions, 5 deletions
diff --git a/compiler/utils/arm/assembler_arm.cc b/compiler/utils/arm/assembler_arm.cc
index 59eb98e3ca..effc38e4c4 100644
--- a/compiler/utils/arm/assembler_arm.cc
+++ b/compiler/utils/arm/assembler_arm.cc
@@ -1436,6 +1436,8 @@ void ArmAssembler::Rrx(Register rd, Register rm, Condition cond) {
mov(rd, ShifterOperand(rm, ROR, 0), cond);
}
+constexpr size_t kFramePointerSize = 4;
+
void ArmAssembler::BuildFrame(size_t frame_size, ManagedRegister method_reg,
const std::vector<ManagedRegister>& callee_save_regs,
const ManagedRegisterEntrySpills& entry_spills) {
@@ -1453,8 +1455,8 @@ void ArmAssembler::BuildFrame(size_t frame_size, ManagedRegister method_reg,
PushList(push_list);
// Increase frame to required size.
- CHECK_GT(frame_size, pushed_values * kPointerSize); // Must be at least space to push Method*
- size_t adjust = frame_size - (pushed_values * kPointerSize);
+ CHECK_GT(frame_size, pushed_values * kFramePointerSize); // Must at least have space for Method*.
+ size_t adjust = frame_size - (pushed_values * kFramePointerSize);
IncreaseFrameSize(adjust);
// Write out Method*.
@@ -1463,7 +1465,7 @@ void ArmAssembler::BuildFrame(size_t frame_size, ManagedRegister method_reg,
// Write out entry spills.
for (size_t i = 0; i < entry_spills.size(); ++i) {
Register reg = entry_spills.at(i).AsArm().AsCoreRegister();
- StoreToOffset(kStoreWord, reg, SP, frame_size + kPointerSize + (i * kPointerSize));
+ StoreToOffset(kStoreWord, reg, SP, frame_size + kFramePointerSize + (i * kFramePointerSize));
}
}
@@ -1480,8 +1482,8 @@ void ArmAssembler::RemoveFrame(size_t frame_size,
}
// Decrease frame to start of callee saves
- CHECK_GT(frame_size, pop_values * kPointerSize);
- size_t adjust = frame_size - (pop_values * kPointerSize);
+ CHECK_GT(frame_size, pop_values * kFramePointerSize);
+ size_t adjust = frame_size - (pop_values * kFramePointerSize);
DecreaseFrameSize(adjust);
// Pop callee saves and PC