diff options
| author | David Butcher <david.butcher@arm.com> | 2013-06-04 16:00:41 +0100 |
|---|---|---|
| committer | Andrew Warfield <hiasant@gmail.com> | 2013-12-18 22:28:38 +0100 |
| commit | fdd9f546da84f55867b83fe7570e7db9d3f7edc1 (patch) | |
| tree | 6cf74e986a07f95799cfecf5f78b8c929e66d01a /vm/compiler/codegen/arm/CodegenDriver.cpp | |
| parent | 7500582f499c49cba75d43d44ee6cc5dc43336ff (diff) | |
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
Diffstat (limited to 'vm/compiler/codegen/arm/CodegenDriver.cpp')
| -rw-r--r-- | vm/compiler/codegen/arm/CodegenDriver.cpp | 14 |
1 files changed, 7 insertions, 7 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 */ |
