--- old/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp 2018-07-19 11:58:41.232252217 +0100 +++ new/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp 2018-07-19 11:58:40.962251404 +0100 @@ -2365,6 +2365,38 @@ return start; } + address generate_data_cache_writeback() { + const Register line = c_rarg0; // address of line to write back + + __ align(CodeEntryAlignment); + + StubCodeMark mark(this, "StubRoutines", "_data_cache_writeback"); + + address start = __ pc(); + __ enter(); + __ cache_wb(Address(line, 0)); + __ leave(); + __ ret(lr); + + return start; + } + + address generate_data_cache_writeback_sync() { + const Register kind = c_rarg0; // pre or post sync (unused) + + __ align(CodeEntryAlignment); + + StubCodeMark mark(this, "StubRoutines", "_data_cache_writeback_sync"); + + address start = __ pc(); + __ enter(); + __ cache_wbsync(); + __ leave(); + __ ret(lr); + + return start; + } + void generate_arraycopy_stubs() { address entry; address entry_jbyte_arraycopy; @@ -5824,6 +5856,10 @@ StubRoutines::_ghash_processBlocks = generate_ghash_processBlocks(); } + // data cache line writeback + StubRoutines::_data_cache_writeback = generate_data_cache_writeback(); + StubRoutines::_data_cache_writeback_sync = generate_data_cache_writeback_sync(); + if (UseAESIntrinsics) { StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock();