diff options
author | David Butcher <david.butcher@arm.com> | 2013-06-04 16:00:41 +0100 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2014-01-02 18:29:50 +0000 |
commit | ea94fa6cd02cb82899f59a4726926de29f322820 (patch) | |
tree | f09cdee21d227c71455bde417d489409dddb5850 /vm | |
parent | 3f6e6e01529699ef373bbf80cf4a8df4b0193a98 (diff) | |
download | android_dalvik-ea94fa6cd02cb82899f59a4726926de29f322820.tar.gz android_dalvik-ea94fa6cd02cb82899f59a4726926de29f322820.tar.bz2 android_dalvik-ea94fa6cd02cb82899f59a4726926de29f322820.zip |
Dalvik: DMB Optimisations for TracingJIT
Makes DMB domain ISH or ISHST instead of the implicit System.
ISH (Inner Shareable) should be sufficient for all cores/clusters,
but is not sufficient for GPU or other memory-mapped peripherals
Change-Id: Id159228daba97bc3692d2eb1ee2786bae2ee34a7
(cherry picked from commit 48704eccc23e91f3ee46ea4882d1dfef43646cc4)
Diffstat (limited to 'vm')
-rw-r--r-- | vm/compiler/codegen/arm/CodegenDriver.cpp | 14 | ||||
-rw-r--r-- | vm/compiler/codegen/arm/Thumb2/Gen.cpp | 4 |
2 files changed, 9 insertions, 9 deletions
diff --git a/vm/compiler/codegen/arm/CodegenDriver.cpp b/vm/compiler/codegen/arm/CodegenDriver.cpp index 541427592..19fad894e 100644 --- a/vm/compiler/codegen/arm/CodegenDriver.cpp +++ b/vm/compiler/codegen/arm/CodegenDriver.cpp @@ -378,7 +378,7 @@ static void genIGet(CompilationUnit *cUnit, MIR *mir, OpSize size, size, rlObj.sRegLow); HEAP_ACCESS_SHADOW(false); if (isVolatile) { - dvmCompilerGenMemBarrier(cUnit, kSY); + dvmCompilerGenMemBarrier(cUnit, kISH); } storeValue(cUnit, rlDest, rlResult); @@ -400,13 +400,13 @@ static void genIPut(CompilationUnit *cUnit, MIR *mir, OpSize size, NULL);/* null object? */ if (isVolatile) { - dvmCompilerGenMemBarrier(cUnit, kST); + dvmCompilerGenMemBarrier(cUnit, kISHST); } HEAP_ACCESS_SHADOW(true); storeBaseDisp(cUnit, rlObj.lowReg, fieldOffset, rlSrc.lowReg, size); HEAP_ACCESS_SHADOW(false); if (isVolatile) { - dvmCompilerGenMemBarrier(cUnit, kSY); + dvmCompilerGenMemBarrier(cUnit, kISH); } if (isObject) { /* NOTE: marking card based on object head */ @@ -1544,7 +1544,7 @@ static bool handleFmt10x(CompilationUnit *cUnit, MIR *mir) } switch (dalvikOpcode) { case OP_RETURN_VOID_BARRIER: - dvmCompilerGenMemBarrier(cUnit, kST); + dvmCompilerGenMemBarrier(cUnit, kISHST); // Intentional fallthrough case OP_RETURN_VOID: genReturnCommon(cUnit,mir); @@ -1725,7 +1725,7 @@ static bool handleFmt21c_Fmt31c(CompilationUnit *cUnit, MIR *mir) loadConstant(cUnit, tReg, (int) fieldPtr + valOffset); if (isVolatile) { - dvmCompilerGenMemBarrier(cUnit, kSY); + dvmCompilerGenMemBarrier(cUnit, kISH); } HEAP_ACCESS_SHADOW(true); loadWordDisp(cUnit, tReg, 0, rlResult.lowReg); @@ -1803,14 +1803,14 @@ static bool handleFmt21c_Fmt31c(CompilationUnit *cUnit, MIR *mir) loadWordDisp(cUnit, tReg, OFFSETOF_MEMBER(Field, clazz), objHead); } if (isVolatile) { - dvmCompilerGenMemBarrier(cUnit, kST); + dvmCompilerGenMemBarrier(cUnit, kISHST); } HEAP_ACCESS_SHADOW(true); storeWordDisp(cUnit, tReg, valOffset ,rlSrc.lowReg); dvmCompilerFreeTemp(cUnit, tReg); HEAP_ACCESS_SHADOW(false); if (isVolatile) { - dvmCompilerGenMemBarrier(cUnit, kSY); + dvmCompilerGenMemBarrier(cUnit, kISH); } if (isSputObject) { /* NOTE: marking card based sfield->clazz */ diff --git a/vm/compiler/codegen/arm/Thumb2/Gen.cpp b/vm/compiler/codegen/arm/Thumb2/Gen.cpp index a2adc6f7e..d49f027b5 100644 --- a/vm/compiler/codegen/arm/Thumb2/Gen.cpp +++ b/vm/compiler/codegen/arm/Thumb2/Gen.cpp @@ -259,7 +259,7 @@ static void genMonitorEnter(CompilationUnit *cUnit, MIR *mir) LW_LOCK_OWNER_SHIFT - 1); hopBranch = newLIR2(cUnit, kThumb2Cbnz, r2, 0); newLIR4(cUnit, kThumb2Strex, r2, r3, r1, offsetof(Object, lock) >> 2); - dvmCompilerGenMemBarrier(cUnit, kSY); + dvmCompilerGenMemBarrier(cUnit, kISH); branch = newLIR2(cUnit, kThumb2Cbz, r2, 0); hopTarget = newLIR0(cUnit, kArmPseudoTargetLabel); @@ -322,7 +322,7 @@ static void genMonitorExit(CompilationUnit *cUnit, MIR *mir) UNSET_CCODE; #endif hopBranch = opCondBranch(cUnit, kArmCondNe); - dvmCompilerGenMemBarrier(cUnit, kSY); + dvmCompilerGenMemBarrier(cUnit, kISH); storeWordDisp(cUnit, r1, offsetof(Object, lock), r7); branch = opNone(cUnit, kOpUncondBr); |