summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Butcher <david.butcher@arm.com>2013-06-04 16:00:41 +0100
committerSteve Kondik <shade@chemlab.org>2014-01-02 18:29:50 +0000
commitea94fa6cd02cb82899f59a4726926de29f322820 (patch)
treef09cdee21d227c71455bde417d489409dddb5850
parent3f6e6e01529699ef373bbf80cf4a8df4b0193a98 (diff)
downloadandroid_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)
-rw-r--r--vm/compiler/codegen/arm/CodegenDriver.cpp14
-rw-r--r--vm/compiler/codegen/arm/Thumb2/Gen.cpp4
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);