summaryrefslogtreecommitdiff
path: root/src/compiler/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/codegen')
-rw-r--r--src/compiler/codegen/arm/Thumb2/Gen.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/compiler/codegen/arm/Thumb2/Gen.cc b/src/compiler/codegen/arm/Thumb2/Gen.cc
index 00be2be4b1..70981881f4 100644
--- a/src/compiler/codegen/arm/Thumb2/Gen.cc
+++ b/src/compiler/codegen/arm/Thumb2/Gen.cc
@@ -693,8 +693,11 @@ STATIC void genNewInstance(CompilationUnit* cUnit, MIR* mir,
RegLocation rlDest)
{
oatFlushAllRegs(cUnit); /* Everything to home location */
- loadWordDisp(cUnit, rSELF,
- OFFSETOF_MEMBER(Thread, pAllocObjectFromCode), rLR);
+ art::Class* classPtr = cUnit->method->GetDexCacheResolvedTypes()->
+ Get(mir->dalvikInsn.vB);
+ loadWordDisp(cUnit, rSELF, (classPtr != NULL)
+ ? OFFSETOF_MEMBER(Thread, pAllocObjectFromCode)
+ : OFFSETOF_MEMBER(Thread, pAllocObjectFromCodeSlowPath), rLR);
loadCurrMethodDirect(cUnit, r1); // arg1 <= Method*
loadConstant(cUnit, r0, mir->dalvikInsn.vB); // arg0 <- type_id
callRuntimeHelper(cUnit, rLR);