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