diff options
Diffstat (limited to 'vm/compiler/codegen/arm/ArchFactory.c')
-rw-r--r-- | vm/compiler/codegen/arm/ArchFactory.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/vm/compiler/codegen/arm/ArchFactory.c b/vm/compiler/codegen/arm/ArchFactory.c index 581ba395c..805a6fc48 100644 --- a/vm/compiler/codegen/arm/ArchFactory.c +++ b/vm/compiler/codegen/arm/ArchFactory.c @@ -32,7 +32,21 @@ static TGT_LIR *genRegImmCheck(CompilationUnit *cUnit, TGT_LIR *pcrLabel) { TGT_LIR *branch = genCmpImmBranch(cUnit, cond, reg, checkValue); - return genCheckCommon(cUnit, dOffset, branch, pcrLabel); + if (cUnit->methodJitMode) { + BasicBlock *bb = cUnit->curBlock; + if (bb->taken) { + ArmLIR *exceptionLabel = (ArmLIR *) cUnit->blockLabelList; + exceptionLabel += bb->taken->id; + branch->generic.target = (LIR *) exceptionLabel; + return exceptionLabel; + } else { + LOGE("Catch blocks not handled yet"); + dvmAbort(); + return NULL; + } + } else { + return genCheckCommon(cUnit, dOffset, branch, pcrLabel); + } } /* |