summaryrefslogtreecommitdiff
path: root/src/compiler/codegen/MethodBitcode.cc
diff options
context:
space:
mode:
author buzbee <buzbee@google.com> 2012-07-17 15:45:43 -0700
committer Android Git Automerger <android-git-automerger@android.com> 2012-07-17 15:45:43 -0700
commit2c272b35099ee333d9b1fd5bb8539f7d6434e5d0 (patch)
tree622a880cbe1b96a891d8dc2dbe165be7eb91a529 /src/compiler/codegen/MethodBitcode.cc
parentc77d4cefa5f7ca5b7dffa21d0b388b7b6339058f (diff)
parent85eee02c456cd54f9e4110e90ebed6b55906e1bf (diff)
am 85eee02c: Quick compiler: various bug fixes
* commit '85eee02c456cd54f9e4110e90ebed6b55906e1bf': Quick compiler: various bug fixes
Diffstat (limited to 'src/compiler/codegen/MethodBitcode.cc')
-rw-r--r--src/compiler/codegen/MethodBitcode.cc15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/compiler/codegen/MethodBitcode.cc b/src/compiler/codegen/MethodBitcode.cc
index b7c4331d7d..3ec4a1100e 100644
--- a/src/compiler/codegen/MethodBitcode.cc
+++ b/src/compiler/codegen/MethodBitcode.cc
@@ -1298,7 +1298,12 @@ bool convertMIRNode(CompilationUnit* cUnit, MIR* mir, BasicBlock* bb,
case Instruction::MOVE_RESULT_WIDE:
case Instruction::MOVE_RESULT:
case Instruction::MOVE_RESULT_OBJECT:
+#if defined(TARGET_ARM)
CHECK(false) << "Unexpected MOVE_RESULT";
+#else
+ UNIMPLEMENTED(WARNING) << "need x86 move-result fusing";
+#endif
+
break;
case Instruction::MONITOR_ENTER:
@@ -1448,7 +1453,7 @@ bool convertMIRNode(CompilationUnit* cUnit, MIR* mir, BasicBlock* bb,
}
break;
case Instruction::IPUT:
- if (rlDest.fp) {
+ if (rlSrc[0].fp) {
convertIput(cUnit, optFlags, greenland::IntrinsicHelper::HLIPutFloat,
rlSrc[0], rlSrc[1], vC);
} else {
@@ -1477,7 +1482,7 @@ bool convertMIRNode(CompilationUnit* cUnit, MIR* mir, BasicBlock* bb,
rlSrc[0], rlSrc[1], vC);
break;
case Instruction::IPUT_WIDE:
- if (rlDest.fp) {
+ if (rlSrc[0].fp) {
convertIput(cUnit, optFlags, greenland::IntrinsicHelper::HLIPutDouble,
rlSrc[0], rlSrc[1], vC);
} else {
@@ -1918,11 +1923,13 @@ void oatMethodMIR2Bitcode(CompilationUnit* cUnit)
arg_iter++; /* Skip path method */
for (int i = 0; i < cUnit->numSSARegs; i++) {
llvm::Value* val;
- if ((SRegToVReg(cUnit, i) < 0) || cUnit->regLocation[i].highWord) {
+ RegLocation rlTemp = cUnit->regLocation[i];
+ if ((SRegToVReg(cUnit, i) < 0) || rlTemp.highWord) {
oatInsertGrowableList(cUnit, &cUnit->llvmValues, 0);
} else if ((i < cUnit->numRegs) ||
(i >= (cUnit->numRegs + cUnit->numIns))) {
- llvm::Constant* immValue = cUnit->irb->GetJInt(0);
+ llvm::Constant* immValue = cUnit->regLocation[i].wide ?
+ cUnit->irb->GetJLong(0) : cUnit->irb->GetJInt(0);
val = emitConst(cUnit, immValue, cUnit->regLocation[i]);
val->setName(llvmSSAName(cUnit, i));
oatInsertGrowableList(cUnit, &cUnit->llvmValues, (intptr_t)val);