< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page

        

*** 10944,10953 **** --- 10944,10991 ---- jcc(Assembler::notZero, copy_chars_loop); bind(done); } + void MacroAssembler::cache_wb(Address line) + { + // 64 bit cpus always support clflush + assert(VM_Version::supports_clflush(), "should not reach here on 32-bit"); + bool optimized = VM_Version::supports_clflushopt(); + bool no_evict = VM_Version::supports_clwb(); + + // pick the correct implementation + + if (optimized) { + if (no_evict) { + clwb(line); + } else { + clflushopt(line); + } + } else { + // no need for fence when using CLFLUSH + clflush(line); + } + } + + + void MacroAssembler::cache_wbsync(bool is_pre) + { + assert(VM_Version::supports_clflush(), "should not reach here on 32-bit"); + bool optimized = VM_Version::supports_clflushopt(); + bool no_evict = VM_Version::supports_clwb(); + + // pick the correct implementation + + if (!is_pre && (optimized || no_evict)) { + // need an sfence for post flush when using clflushopt or clwb + // otherwise no no need for any synchroniaztion + + sfence(); + } + } + Assembler::Condition MacroAssembler::negate_condition(Assembler::Condition cond) { switch (cond) { // Note some conditions are synonyms for others case Assembler::zero: return Assembler::notZero; case Assembler::notZero: return Assembler::zero;
< prev index next >