< prev index next >

src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp

Print this page

        

*** 2363,2372 **** --- 2363,2410 ---- __ leave(); __ ret(lr); 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 is_pre = c_rarg0; // pre or post sync + + __ align(CodeEntryAlignment); + + StubCodeMark mark(this, "StubRoutines", "_data_cache_writeback_sync"); + + // pre wbsync is a no-op + // post wbsync translates to an sfence + + Label skip; + address start = __ pc(); + __ enter(); + __ cbnz(is_pre, skip); + __ cache_wbsync(false); + __ bind(skip); + __ leave(); + __ ret(lr); + + return start; + } + void generate_arraycopy_stubs() { address entry; address entry_jbyte_arraycopy; address entry_jshort_arraycopy; address entry_jint_arraycopy;
*** 5822,5831 **** --- 5860,5873 ---- // generate GHASH intrinsics code if (UseGHASHIntrinsics) { 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(); StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt(); StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt();
< prev index next >