Mercurial > hg > icedtea7-forest-aarch64 > hotspot
changeset 5683:4df02e5f0433
Add some memory barriers for object creation and runtime calls.
author | adinn |
---|---|
date | Fri, 21 Nov 2014 19:18:22 +0000 |
parents | ae4b26e6783b |
children | 93b1103ebb83 |
files | src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp src/cpu/aarch64/vm/templateInterpreter_aarch64.cpp src/cpu/aarch64/vm/templateTable_aarch64.cpp |
diffstat | 3 files changed, 7 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp Fri Nov 21 13:21:30 2014 +0000 +++ b/src/cpu/aarch64/vm/sharedRuntime_aarch64.cpp Fri Nov 21 19:18:22 2014 +0000 @@ -319,7 +319,8 @@ __ mov(c_rarg1, lr); __ lea(rscratch1, RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::fixup_callers_callsite))); __ blrt(rscratch1, 2, 0, 0); - __ maybe_isb(); + __ maybe_isb(); + __ membar(Assembler::LoadLoad | Assembler::LoadStore); __ pop_CPU_state(); // restore sp
--- a/src/cpu/aarch64/vm/templateInterpreter_aarch64.cpp Fri Nov 21 13:21:30 2014 +0000 +++ b/src/cpu/aarch64/vm/templateInterpreter_aarch64.cpp Fri Nov 21 19:18:22 2014 +0000 @@ -325,6 +325,7 @@ address entry = __ pc(); __ push(state); __ call_VM(noreg, runtime_entry); + __ membar(Assembler::AnyAny); __ dispatch_via(vtos, Interpreter::_normal_table.table_for(vtos)); return entry; }
--- a/src/cpu/aarch64/vm/templateTable_aarch64.cpp Fri Nov 21 13:21:30 2014 +0000 +++ b/src/cpu/aarch64/vm/templateTable_aarch64.cpp Fri Nov 21 19:18:22 2014 +0000 @@ -3391,6 +3391,8 @@ // continue __ bind(done); + // Must prevent reordering of stores for object initialization with stores that publish the new object. + __ membar(Assembler::StoreStore); } void TemplateTable::newarray() { @@ -3399,6 +3401,7 @@ __ mov(c_rarg2, r0); call_VM(r0, CAST_FROM_FN_PTR(address, InterpreterRuntime::newarray), c_rarg1, c_rarg2); + __ membar(Assembler::StoreStore); } void TemplateTable::anewarray() { @@ -3408,6 +3411,7 @@ __ mov(c_rarg3, r0); call_VM(r0, CAST_FROM_FN_PTR(address, InterpreterRuntime::anewarray), c_rarg1, c_rarg2, c_rarg3); + __ membar(Assembler::StoreStore); } void TemplateTable::arraylength() {