summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/dex/quick/codegen_util.cc11
-rw-r--r--compiler/dex/quick/gen_invoke.cc6
2 files changed, 9 insertions, 8 deletions
diff --git a/compiler/dex/quick/codegen_util.cc b/compiler/dex/quick/codegen_util.cc
index c3f9b673d2..b030bb4ec8 100644
--- a/compiler/dex/quick/codegen_util.cc
+++ b/compiler/dex/quick/codegen_util.cc
@@ -555,8 +555,8 @@ static int AssignLiteralOffsetCommon(LIR* lir, CodeOffset offset) {
return offset;
}
-static int AssignLiteralPointerOffsetCommon(LIR* lir, CodeOffset offset) {
- unsigned int element_size = sizeof(void*);
+static int AssignLiteralPointerOffsetCommon(LIR* lir, CodeOffset offset,
+ unsigned int element_size) {
// Align to natural pointer size.
offset = (offset + (element_size - 1)) & ~(element_size - 1);
for (; lir != NULL; lir = lir->next) {
@@ -726,9 +726,10 @@ void Mir2Lir::CreateNativeGcMap() {
/* Determine the offset of each literal field */
int Mir2Lir::AssignLiteralOffset(CodeOffset offset) {
offset = AssignLiteralOffsetCommon(literal_list_, offset);
- offset = AssignLiteralPointerOffsetCommon(code_literal_list_, offset);
- offset = AssignLiteralPointerOffsetCommon(method_literal_list_, offset);
- offset = AssignLiteralPointerOffsetCommon(class_literal_list_, offset);
+ unsigned int ptr_size = GetInstructionSetPointerSize(cu_->instruction_set);
+ offset = AssignLiteralPointerOffsetCommon(code_literal_list_, offset, ptr_size);
+ offset = AssignLiteralPointerOffsetCommon(method_literal_list_, offset, ptr_size);
+ offset = AssignLiteralPointerOffsetCommon(class_literal_list_, offset, ptr_size);
return offset;
}
diff --git a/compiler/dex/quick/gen_invoke.cc b/compiler/dex/quick/gen_invoke.cc
index 05313a95a0..93a23a6a6e 100644
--- a/compiler/dex/quick/gen_invoke.cc
+++ b/compiler/dex/quick/gen_invoke.cc
@@ -455,14 +455,14 @@ static int NextSDCallInsn(CompilationUnit* cu, CallInfo* info,
if (direct_code != 0 && direct_method != 0) {
switch (state) {
case 0: // Get the current Method* [sets kArg0]
- if (direct_code != static_cast<unsigned int>(-1)) {
+ if (direct_code != static_cast<uintptr_t>(-1)) {
if (cu->instruction_set != kX86 && cu->instruction_set != kX86_64) {
cg->LoadConstant(cg->TargetReg(kInvokeTgt), direct_code);
}
} else if (cu->instruction_set != kX86 && cu->instruction_set != kX86_64) {
cg->LoadCodeAddress(target_method, type, kInvokeTgt);
}
- if (direct_method != static_cast<unsigned int>(-1)) {
+ if (direct_method != static_cast<uintptr_t>(-1)) {
cg->LoadConstant(cg->TargetReg(kArg0), direct_method);
} else {
cg->LoadMethodAddress(target_method, type, kArg0);
@@ -483,7 +483,7 @@ static int NextSDCallInsn(CompilationUnit* cu, CallInfo* info,
cg->TargetReg(kArg0));
// Set up direct code if known.
if (direct_code != 0) {
- if (direct_code != static_cast<unsigned int>(-1)) {
+ if (direct_code != static_cast<uintptr_t>(-1)) {
cg->LoadConstant(cg->TargetReg(kInvokeTgt), direct_code);
} else if (cu->instruction_set != kX86 && cu->instruction_set != kX86_64) {
CHECK_LT(target_method.dex_method_index, target_method.dex_file->NumMethodIds());