< prev index next >
src/hotspot/cpu/x86/stubGenerator_x86_64.cpp
Print this page
*** 2783,2792 ****
--- 2783,2835 ----
__ ret(0);
return start;
}
+ address generate_data_cache_writeback() {
+ bool optimized = VM_Version::supports_clflushopt();
+ bool no_evict = VM_Version::supports_clwb();
+
+ const Register src = c_rarg0; // source address
+
+ __ align(CodeEntryAlignment);
+
+ StubCodeMark mark(this, "StubRoutines", "_data_cache_writeback");
+
+ address start = __ pc();
+ __ enter();
+ const Address line(src, 0);
+ __ cache_wb(line);
+ __ leave();
+ __ ret(0);
+
+ 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();
+ __ cmpl(is_pre, 0);
+ __ jcc(Assembler::notEqual, skip);
+ __ cache_wbsync(false);
+ __ bind(skip);
+ __ leave();
+ __ ret(0);
+
+ return start;
+ }
+
void generate_arraycopy_stubs() {
address entry;
address entry_jbyte_arraycopy;
address entry_jshort_arraycopy;
address entry_jint_arraycopy;
*** 5775,5784 ****
--- 5818,5831 ----
StubRoutines::x86::_double_sign_flip = generate_fp_mask("double_sign_flip", 0x8000000000000000);
// support for verify_oop (must happen after universe_init)
StubRoutines::_verify_oop_subroutine_entry = generate_verify_oop();
+ // data cache line writeback
+ StubRoutines::_data_cache_writeback = generate_data_cache_writeback();
+ StubRoutines::_data_cache_writeback_sync = generate_data_cache_writeback_sync();
+
// arraycopy stubs used by compilers
generate_arraycopy_stubs();
// don't bother generating these AES intrinsic stubs unless global flag is set
if (UseAESIntrinsics) {
< prev index next >