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