diff options
| author | Brian Carlstrom <bdc@google.com> | 2010-06-30 09:28:53 -0700 |
|---|---|---|
| committer | Brian Carlstrom <bdc@google.com> | 2010-06-30 09:40:25 -0700 |
| commit | 0d3291c78488fc64455270c42e4a70d433e11f33 (patch) | |
| tree | 3a1152d4095b91f36ec313f828264b71cffaf186 /vm/compiler/codegen/arm/CodegenDriver.c | |
| parent | 11b4c7c0934cbf93f737f8c52cec68fbbd415145 (diff) | |
| parent | 3d037eca03604e2e64a66140f0693c570f9067bc (diff) | |
Merge remote branch 'goog/dalvik-dev' into mm
Change-Id: I4346c9891939e589c627b9de4d71b959ed8f3b51
Diffstat (limited to 'vm/compiler/codegen/arm/CodegenDriver.c')
| -rw-r--r-- | vm/compiler/codegen/arm/CodegenDriver.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c index f625771ec..3e5126aec 100644 --- a/vm/compiler/codegen/arm/CodegenDriver.c +++ b/vm/compiler/codegen/arm/CodegenDriver.c @@ -1214,6 +1214,8 @@ static void genInterpSingleStep(CompilationUnit *cUnit, MIR *mir) opReg(cUnit, kOpBlx, r2); } +#if defined(WITH_DEADLOCK_PREDICTION) || defined(WITH_MONITOR_TRACKING) || \ + defined(_ARMV5TE) || defined(_ARMV5TE_VFP) /* * To prevent a thread in a monitor wait from blocking the Jit from * resetting the code cache, heavyweight monitor lock will not @@ -1259,6 +1261,7 @@ static void genMonitorPortable(CompilationUnit *cUnit, MIR *mir) dvmCompilerClobberCallRegs(cUnit); } } +#endif /* * The following are the first-level codegen routines that analyze the format @@ -1277,8 +1280,7 @@ static bool handleFmt10t_Fmt20t_Fmt30t(CompilationUnit *cUnit, MIR *mir, static bool handleFmt10x(CompilationUnit *cUnit, MIR *mir) { OpCode dalvikOpCode = mir->dalvikInsn.opCode; - if (((dalvikOpCode >= OP_UNUSED_3E) && (dalvikOpCode <= OP_UNUSED_43)) || - ((dalvikOpCode >= OP_UNUSED_E3) && (dalvikOpCode <= OP_UNUSED_E7))) { + if ((dalvikOpCode >= OP_UNUSED_3E) && (dalvikOpCode <= OP_UNUSED_43)) { LOGE("Codegen: got unused opcode 0x%x\n",dalvikOpCode); return true; } @@ -1289,6 +1291,8 @@ static bool handleFmt10x(CompilationUnit *cUnit, MIR *mir) case OP_UNUSED_73: case OP_UNUSED_79: case OP_UNUSED_7A: + case OP_UNUSED_F1: + case OP_UNUSED_FF: LOGE("Codegen: got unused opcode 0x%x\n",dalvikOpCode); return true; case OP_NOP: @@ -3643,6 +3647,16 @@ void dvmCompilerMIR2LIR(CompilationUnit *cUnit) labelList[i].operands[0] = blockList[i]->startOffset; if (blockList[i]->blockType >= kChainingCellGap) { + if (blockList[i]->firstMIRInsn != NULL && + ((blockList[i]->firstMIRInsn->dalvikInsn.opCode == + OP_MOVE_RESULT) || + (blockList[i]->firstMIRInsn->dalvikInsn.opCode == + OP_MOVE_RESULT_WIDE) || + (blockList[i]->firstMIRInsn->dalvikInsn.opCode == + OP_MOVE_RESULT_OBJECT))) { + /* Align this block first since it is a return chaining cell */ + newLIR0(cUnit, kArmPseudoPseudoAlign4); + } /* * Append the label pseudo LIR first. Chaining cells will be handled * separately afterwards. @@ -3878,7 +3892,7 @@ void dvmCompilerMIR2LIR(CompilationUnit *cUnit) if (notHandled) { LOGE("%#06x: Opcode 0x%x (%s) / Fmt %d not handled\n", mir->offset, - dalvikOpCode, getOpcodeName(dalvikOpCode), + dalvikOpCode, dexGetOpcodeName(dalvikOpCode), dalvikFormat); dvmCompilerAbort(cUnit); break; |
