< prev index next >

src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.hpp

Print this page
rev 51517 : 8207169: X86: Modularize cmpxchg-oop assembler for C1 and C2

*** 36,45 **** --- 36,54 ---- void incr_allocated_bytes(MacroAssembler* masm, Register thread, Register var_size_in_bytes, int con_size_in_bytes, Register t1); + protected: + // Atomically store newval into addr, if addr currently contains oldval. + // - exchange: if true, the previous value is returned in oldval, res is expected to be noreg + // - expect_null: if true, oldval is known to be NULL, might allow for optimizations + virtual void cmpxchg_oop(MacroAssembler* masm, + Address addr, Register oldval, Register newval, + Register tmp1, Register tmp2, + bool narrow); + public: virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register src, Register dst, Register count) {} virtual void arraycopy_epilogue(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register src, Register dst, Register count) {}
*** 47,56 **** --- 56,78 ---- virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Register dst, Address src, Register tmp1, Register tmp_thread); virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type, Address dst, Register val, Register tmp1, Register tmp2); + virtual bool handle_cmpxchg_oop() const { return BarrierSetAlwaysHandlesCmpxchg; } + + // Atomically store newval into addr, if addr currently contains oldval. + // This version is intended for use by C1 assembler, and encodes uncompressed + // oops if necessary. + virtual void cmpxchg_oop_c1(MacroAssembler* masm, Address addr, Register oldval, Register newval, + Register tmp1, Register tmp2); + + virtual void cmpxchg_oop_c2(MacroAssembler* masm, + Register res, Address addr, Register oldval, Register newval, + Register tmp1, Register tmp2, + bool narrow, bool exchange, bool expect_null); + #ifndef _LP64 virtual void obj_equals(MacroAssembler* masm, Address obj1, jobject obj2); virtual void obj_equals(MacroAssembler* masm, Register obj1, jobject obj2);
< prev index next >