< 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 >