< prev index next >

src/hotspot/cpu/aarch64/aarch64.ad

Print this page
rev 52851 : Streamline CAS barriers, C2 ideal graph generation and matching

*** 1895,1904 **** --- 1895,1908 ---- case Op_CompareAndSwapL: case Op_CompareAndSwapP: case Op_CompareAndSwapN: // case Op_CompareAndSwapB: // case Op_CompareAndSwapS: + #if INCLUDE_SHENANDOAHGC + case Op_ShenandoahCompareAndSwapP: + case Op_ShenandoahCompareAndSwapN: + #endif return true; // These are TBD case Op_WeakCompareAndSwapB: case Op_WeakCompareAndSwapS: case Op_WeakCompareAndSwapI:
*** 9668,9678 **** ins_pipe(pipe_slow); %} instruct compareAndSwapP(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{ - predicate(!UseShenandoahGC || !ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypePtr::NULL_PTR); match(Set res (CompareAndSwapP mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(KILL cr); --- 9672,9681 ----
*** 9687,9698 **** ins_pipe(pipe_slow); %} instruct compareAndSwapP_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{ ! predicate(UseShenandoahGC && ShenandoahCASBarrier && n->in(3)->in(1)->bottom_type() != TypePtr::NULL_PTR); ! match(Set res (CompareAndSwapP mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{ --- 9690,9700 ---- ins_pipe(pipe_slow); %} instruct compareAndSwapP_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{ ! match(Set res (ShenandoahCompareAndSwapP mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{
*** 9704,9714 **** ins_pipe(pipe_slow); %} instruct compareAndSwapN(iRegINoSp res, indirect mem, iRegNNoSp oldval, iRegNNoSp newval, rFlagsReg cr) %{ - predicate(!UseShenandoahGC || !ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypeNarrowOop::NULL_PTR); match(Set res (CompareAndSwapN mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(KILL cr); --- 9706,9715 ----
*** 9723,9734 **** ins_pipe(pipe_slow); %} instruct compareAndSwapN_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{ ! predicate(UseShenandoahGC && ShenandoahCASBarrier && n->in(3)->in(1)->bottom_type() != TypeNarrowOop::NULL_PTR); ! match(Set res (CompareAndSwapN mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{ --- 9724,9734 ---- ins_pipe(pipe_slow); %} instruct compareAndSwapN_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{ ! match(Set res (ShenandoahCompareAndSwapN mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{
*** 9784,9794 **** ins_pipe(pipe_slow); %} instruct compareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{ ! predicate(needs_acquiring_load_exclusive(n) && (!UseShenandoahGC || !ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypePtr::NULL_PTR)); match(Set res (CompareAndSwapP mem (Binary oldval newval))); ins_cost(VOLATILE_REF_COST); effect(KILL cr); --- 9784,9794 ---- ins_pipe(pipe_slow); %} instruct compareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{ ! predicate(needs_acquiring_load_exclusive(n)); match(Set res (CompareAndSwapP mem (Binary oldval newval))); ins_cost(VOLATILE_REF_COST); effect(KILL cr);
*** 9803,9814 **** ins_pipe(pipe_slow); %} instruct compareAndSwapPAcq_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{ ! predicate(needs_acquiring_load_exclusive(n) && UseShenandoahGC && ShenandoahCASBarrier && n->in(3)->in(1)->bottom_type() != TypePtr::NULL_PTR); ! match(Set res (CompareAndSwapP mem (Binary oldval newval))); ins_cost(VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{ --- 9803,9814 ---- ins_pipe(pipe_slow); %} instruct compareAndSwapPAcq_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{ ! predicate(needs_acquiring_load_exclusive(n)); ! match(Set res (ShenandoahCompareAndSwapP mem (Binary oldval newval))); ins_cost(VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{
*** 9820,9830 **** ins_pipe(pipe_slow); %} instruct compareAndSwapNAcq(iRegINoSp res, indirect mem, iRegNNoSp oldval, iRegNNoSp newval, rFlagsReg cr) %{ ! predicate(needs_acquiring_load_exclusive(n) && (!UseShenandoahGC || !ShenandoahCASBarrier|| n->in(3)->in(1)->bottom_type() == TypeNarrowOop::NULL_PTR)); match(Set res (CompareAndSwapN mem (Binary oldval newval))); ins_cost(VOLATILE_REF_COST); effect(KILL cr); --- 9820,9830 ---- ins_pipe(pipe_slow); %} instruct compareAndSwapNAcq(iRegINoSp res, indirect mem, iRegNNoSp oldval, iRegNNoSp newval, rFlagsReg cr) %{ ! predicate(needs_acquiring_load_exclusive(n)); match(Set res (CompareAndSwapN mem (Binary oldval newval))); ins_cost(VOLATILE_REF_COST); effect(KILL cr);
*** 9839,9850 **** ins_pipe(pipe_slow); %} instruct compareAndSwapNAcq_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{ ! predicate(needs_acquiring_load_exclusive(n) && UseShenandoahGC && ShenandoahCASBarrier && n->in(3)->in(1)->bottom_type() != TypeNarrowOop::NULL_PTR); ! match(Set res (CompareAndSwapN mem (Binary oldval newval))); ins_cost(VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{ --- 9839,9850 ---- ins_pipe(pipe_slow); %} instruct compareAndSwapNAcq_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{ ! predicate(needs_acquiring_load_exclusive(n)); ! match(Set res (ShenandoahCompareAndSwapN mem (Binary oldval newval))); ins_cost(VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{
*** 9937,9947 **** %} ins_pipe(pipe_slow); %} instruct compareAndExchangeN(iRegNNoSp res, indirect mem, iRegN oldval, iRegN newval, rFlagsReg cr) %{ - predicate(!UseShenandoahGC || !ShenandoahCASBarrier); match(Set res (CompareAndExchangeN mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(TEMP_DEF res, KILL cr); format %{ "cmpxchg $res = $mem, $oldval, $newval\t# (narrow oop, weak) if $mem == $oldval then $mem <-- $newval" --- 9937,9946 ----
*** 9953,9964 **** %} ins_pipe(pipe_slow); %} instruct compareAndExchangeN_shenandoah(iRegNNoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{ ! predicate(UseShenandoahGC && ShenandoahCASBarrier); ! match(Set res (CompareAndExchangeN mem (Binary oldval newval))); ins_cost(3 * VOLATILE_REF_COST); effect(TEMP_DEF res, TEMP tmp, KILL cr); format %{ "cmpxchg_oop_shenandoah $res = $mem, $oldval, $newval\t# (narrow oop, weak) if $mem == $oldval then $mem <-- $newval" %} --- 9952,9962 ---- %} ins_pipe(pipe_slow); %} instruct compareAndExchangeN_shenandoah(iRegNNoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{ ! match(Set res (ShenandoahCompareAndExchangeN mem (Binary oldval newval))); ins_cost(3 * VOLATILE_REF_COST); effect(TEMP_DEF res, TEMP tmp, KILL cr); format %{ "cmpxchg_oop_shenandoah $res = $mem, $oldval, $newval\t# (narrow oop, weak) if $mem == $oldval then $mem <-- $newval" %}
*** 9970,9980 **** %} ins_pipe(pipe_slow); %} instruct compareAndExchangeP(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{ - predicate(!UseShenandoahGC || !ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypePtr::NULL_PTR); match(Set res (CompareAndExchangeP mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(TEMP_DEF res, KILL cr); format %{ "cmpxchg $res = $mem, $oldval, $newval\t# (ptr, weak) if $mem == $oldval then $mem <-- $newval" --- 9968,9977 ----
*** 9986,9997 **** %} ins_pipe(pipe_slow); %} instruct compareAndExchangeP_shenandoah(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{ ! predicate(UseShenandoahGC && ShenandoahCASBarrier); ! match(Set res (CompareAndExchangeP mem (Binary oldval newval))); ins_cost(3 * VOLATILE_REF_COST); effect(TEMP_DEF res, TEMP tmp, KILL cr); format %{ "cmpxchg_oop_shenandoah $mem, $oldval, $newval\t# (ptr) if $mem == $oldval then $mem <-- $newval with temp $tmp" %} --- 9983,9993 ---- %} ins_pipe(pipe_slow); %} instruct compareAndExchangeP_shenandoah(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{ ! match(Set res (ShenandoahCompareAndExchangeP mem (Binary oldval newval))); ins_cost(3 * VOLATILE_REF_COST); effect(TEMP_DEF res, TEMP tmp, KILL cr); format %{ "cmpxchg_oop_shenandoah $mem, $oldval, $newval\t# (ptr) if $mem == $oldval then $mem <-- $newval with temp $tmp" %}
*** 10071,10081 **** %} ins_pipe(pipe_slow); %} instruct weakCompareAndSwapN(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, rFlagsReg cr) %{ - predicate(!UseShenandoahGC || !ShenandoahCASBarrier); match(Set res (WeakCompareAndSwapN mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(KILL cr); format %{ "cmpxchg $res = $mem, $oldval, $newval\t# (narrow oop, weak) if $mem == $oldval then $mem <-- $newval" --- 10067,10076 ----
*** 10089,10100 **** %} ins_pipe(pipe_slow); %} instruct weakCompareAndSwapN_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{ ! predicate(UseShenandoahGC && ShenandoahCASBarrier); ! match(Set res (WeakCompareAndSwapN mem (Binary oldval newval))); ins_cost(3 * VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{ "cmpxchg_oop_shenandoah $res = $mem, $oldval, $newval\t# (narrow oop, weak) if $mem == $oldval then $mem <-- $newval" %} --- 10084,10094 ---- %} ins_pipe(pipe_slow); %} instruct weakCompareAndSwapN_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{ ! match(Set res (ShenandoahWeakCompareAndSwapN mem (Binary oldval newval))); ins_cost(3 * VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{ "cmpxchg_oop_shenandoah $res = $mem, $oldval, $newval\t# (narrow oop, weak) if $mem == $oldval then $mem <-- $newval" %}
*** 10106,10116 **** %} ins_pipe(pipe_slow); %} instruct weakCompareAndSwapP(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{ - predicate(!UseShenandoahGC || !ShenandoahCASBarrier || n->in(3)->in(1)->bottom_type() == TypePtr::NULL_PTR); match(Set res (WeakCompareAndSwapP mem (Binary oldval newval))); ins_cost(2 * VOLATILE_REF_COST); effect(KILL cr); format %{ "cmpxchg $res = $mem, $oldval, $newval\t# (ptr, weak) if $mem == $oldval then $mem <-- $newval" --- 10100,10109 ----
*** 10124,10135 **** %} ins_pipe(pipe_slow); %} instruct weakCompareAndSwapP_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{ ! predicate(UseShenandoahGC && ShenandoahCASBarrier); ! match(Set res (WeakCompareAndSwapP mem (Binary oldval newval))); ins_cost(3 * VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{ "cmpxchg_oop_shenandoah $res = $mem, $oldval, $newval\t# (ptr, weak) if $mem == $oldval then $mem <-- $newval" %} --- 10117,10127 ---- %} ins_pipe(pipe_slow); %} instruct weakCompareAndSwapP_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{ ! match(Set res (ShenandoahWeakCompareAndSwapP mem (Binary oldval newval))); ins_cost(3 * VOLATILE_REF_COST); effect(TEMP tmp, KILL cr); format %{ "cmpxchg_oop_shenandoah $res = $mem, $oldval, $newval\t# (ptr, weak) if $mem == $oldval then $mem <-- $newval" %}
< prev index next >