< prev index next >
src/hotspot/cpu/x86/x86_64.ad
Print this page
rev 52851 : Streamline CAS barriers, C2 ideal graph generation and matching
@@ -7621,11 +7621,11 @@
instruct compareAndSwapP(rRegI res,
memory mem_ptr,
rax_RegP oldval, rRegP newval,
rFlagsReg cr)
%{
- predicate(VM_Version::supports_cx8() && (!UseShenandoahGC || !ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypePtr::NULL_PTR));
+ predicate(VM_Version::supports_cx8());
match(Set res (CompareAndSwapP mem_ptr (Binary oldval newval)));
match(Set res (WeakCompareAndSwapP mem_ptr (Binary oldval newval)));
effect(KILL cr, KILL oldval);
format %{ "cmpxchgq $mem_ptr,$newval\t# "
@@ -7647,20 +7647,21 @@
memory mem_ptr,
rRegP tmp1, rRegP tmp2,
rax_RegP oldval, rRegP newval,
rFlagsReg cr)
%{
- predicate(VM_Version::supports_cx8() && UseShenandoahGC && ShenandoahCASBarrier && n->in(3)->in(1)->bottom_type() != TypePtr::NULL_PTR);
- match(Set res (CompareAndSwapP mem_ptr (Binary oldval newval)));
- match(Set res (WeakCompareAndSwapP mem_ptr (Binary oldval newval)));
+ predicate(VM_Version::supports_cx8());
+ match(Set res (ShenandoahCompareAndSwapP mem_ptr (Binary oldval newval)));
+ match(Set res (ShenandoahWeakCompareAndSwapP mem_ptr (Binary oldval newval)));
effect(TEMP tmp1, TEMP tmp2, KILL cr, KILL oldval);
format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
ins_encode %{
#if INCLUDE_SHENANDOAHGC
- ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
+ ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
+ $res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
false, // swap
$tmp1$$Register, $tmp2$$Register
);
#else
ShouldNotReachHere();
@@ -7769,11 +7770,10 @@
instruct compareAndSwapN(rRegI res,
memory mem_ptr,
rax_RegN oldval, rRegN newval,
rFlagsReg cr) %{
- predicate(!UseShenandoahGC || !ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypeNarrowOop::NULL_PTR);
match(Set res (CompareAndSwapN mem_ptr (Binary oldval newval)));
match(Set res (WeakCompareAndSwapN mem_ptr (Binary oldval newval)));
effect(KILL cr, KILL oldval);
format %{ "cmpxchgl $mem_ptr,$newval\t# "
@@ -7794,20 +7794,20 @@
instruct compareAndSwapN_shenandoah(rRegI res,
memory mem_ptr,
rRegP tmp1, rRegP tmp2,
rax_RegN oldval, rRegN newval,
rFlagsReg cr) %{
- predicate(UseShenandoahGC && ShenandoahCASBarrier && n->in(3)->in(1)->bottom_type() != TypeNarrowOop::NULL_PTR);
- match(Set res (CompareAndSwapN mem_ptr (Binary oldval newval)));
- match(Set res (WeakCompareAndSwapN mem_ptr (Binary oldval newval)));
+ match(Set res (ShenandoahCompareAndSwapN mem_ptr (Binary oldval newval)));
+ match(Set res (ShenandoahWeakCompareAndSwapN mem_ptr (Binary oldval newval)));
effect(TEMP tmp1, TEMP tmp2, KILL cr, KILL oldval);
format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
ins_encode %{
#if INCLUDE_SHENANDOAHGC
- ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, $res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
+ ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
+ $res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
false, // swap
$tmp1$$Register, $tmp2$$Register
);
#else
ShouldNotReachHere();
@@ -7896,11 +7896,10 @@
instruct compareAndExchangeN(
memory mem_ptr,
rax_RegN oldval, rRegN newval,
rFlagsReg cr) %{
- predicate(!UseShenandoahGC || !ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypeNarrowOop::NULL_PTR);
match(Set oldval (CompareAndExchangeN mem_ptr (Binary oldval newval)));
effect(KILL cr);
format %{ "cmpxchgl $mem_ptr,$newval\t# "
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t" %}
@@ -7915,19 +7914,19 @@
instruct compareAndExchangeN_shenandoah(memory mem_ptr,
rax_RegN oldval, rRegN newval,
rRegP tmp1, rRegP tmp2,
rFlagsReg cr) %{
- predicate(UseShenandoahGC && ShenandoahCASBarrier && n->in(3)->in(1)->bottom_type() != TypeNarrowOop::NULL_PTR);
- match(Set oldval (CompareAndExchangeN mem_ptr (Binary oldval newval)));
+ match(Set oldval (ShenandoahCompareAndExchangeN mem_ptr (Binary oldval newval)));
effect(TEMP tmp1, TEMP tmp2, KILL cr);
format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
ins_encode %{
#if INCLUDE_SHENANDOAHGC
- ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
+ ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
+ NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
true, // exchange
$tmp1$$Register, $tmp2$$Register
);
#else
ShouldNotReachHere();
@@ -7939,11 +7938,11 @@
instruct compareAndExchangeP(
memory mem_ptr,
rax_RegP oldval, rRegP newval,
rFlagsReg cr)
%{
- predicate(VM_Version::supports_cx8() && (!UseShenandoahGC || ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypePtr::NULL_PTR));
+ predicate(VM_Version::supports_cx8());
match(Set oldval (CompareAndExchangeP mem_ptr (Binary oldval newval)));
effect(KILL cr);
format %{ "cmpxchgq $mem_ptr,$newval\t# "
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t" %}
@@ -7959,20 +7958,21 @@
instruct compareAndExchangeP_shenandoah(memory mem_ptr,
rax_RegP oldval, rRegP newval,
rRegP tmp1, rRegP tmp2,
rFlagsReg cr)
%{
- predicate(VM_Version::supports_cx8() && UseShenandoahGC && ShenandoahCASBarrier && n->in(3)->in(1)->bottom_type() != TypePtr::NULL_PTR);
- match(Set oldval (CompareAndExchangeP mem_ptr (Binary oldval newval)));
+ predicate(VM_Version::supports_cx8());
+ match(Set oldval (ShenandoahCompareAndExchangeP mem_ptr (Binary oldval newval)));
effect(KILL cr, TEMP tmp1, TEMP tmp2);
ins_cost(1000);
format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
ins_encode %{
#if INCLUDE_SHENANDOAHGC
- ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm, NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
+ ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
+ NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
true, // exchange
$tmp1$$Register, $tmp2$$Register
);
#else
ShouldNotReachHere();
< prev index next >