< prev index next >
src/cpu/aarch64/vm/aarch64.ad
Print this page
rev 12203 : [mq]: casfixes.patch
*** 4280,4296 ****
Assembler::word, /*acquire*/ false, /*release*/ true,
/*weak*/ false, noreg);
%}
! enc_class aarch64_enc_cmpxchg_oop_shenandoah(memory mem, iRegLNoSp oldval, iRegLNoSp newval, iRegP tmp) %{
MacroAssembler _masm(&cbuf);
guarantee($mem$$index == -1 && $mem$$disp == 0, "impossible encoding");
Register tmp = $tmp$$Register;
- __ shenandoah_store_check($mem$$base$$Register, $newval$$Register);
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
! __ cmpxchg_oop_shenandoah($mem$$base$$Register, tmp, $newval$$Register,
Assembler::xword, /*acquire*/ false, /*release*/ true, /*weak*/ false);
%}
// The only difference between aarch64_enc_cmpxchg and
// aarch64_enc_cmpxchg_acq is that we use load-acquire in the
--- 4280,4295 ----
Assembler::word, /*acquire*/ false, /*release*/ true,
/*weak*/ false, noreg);
%}
! enc_class aarch64_enc_cmpxchg_oop_shenandoah(memory mem, iRegP oldval, iRegP newval, iRegPNoSp tmp) %{
MacroAssembler _masm(&cbuf);
guarantee($mem$$index == -1 && $mem$$disp == 0, "impossible encoding");
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
! __ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
Assembler::xword, /*acquire*/ false, /*release*/ true, /*weak*/ false);
%}
// The only difference between aarch64_enc_cmpxchg and
// aarch64_enc_cmpxchg_acq is that we use load-acquire in the
*** 4313,4329 ****
Assembler::word, /*acquire*/ true, /*release*/ true,
/*weak*/ false, noreg);
%}
! enc_class aarch64_enc_cmpxchg_acq_oop_shenandoah(memory mem, iRegLNoSp oldval, iRegLNoSp newval, iRegP tmp) %{
MacroAssembler _masm(&cbuf);
guarantee($mem$$index == -1 && $mem$$disp == 0, "impossible encoding");
Register tmp = $tmp$$Register;
- __ shenandoah_store_check($mem$$base$$Register, $newval$$Register);
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
! __ cmpxchg_oop_shenandoah($mem$$base$$Register, tmp, $newval$$Register,
Assembler::xword, /*acquire*/ true, /*release*/ true, /*weak*/ false);
%}
// auxiliary used for CompareAndSwapX to set result register
enc_class aarch64_enc_cset_eq(iRegINoSp res) %{
--- 4312,4327 ----
Assembler::word, /*acquire*/ true, /*release*/ true,
/*weak*/ false, noreg);
%}
! enc_class aarch64_enc_cmpxchg_acq_oop_shenandoah(memory mem, iRegP oldval, iRegP newval, iRegPNoSp tmp) %{
MacroAssembler _masm(&cbuf);
guarantee($mem$$index == -1 && $mem$$disp == 0, "impossible encoding");
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
! __ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
Assembler::xword, /*acquire*/ true, /*release*/ true, /*weak*/ false);
%}
// auxiliary used for CompareAndSwapX to set result register
enc_class aarch64_enc_cset_eq(iRegINoSp res) %{
*** 9647,9657 ****
ins_encode(aarch64_enc_cmpxchg(mem, oldval, newval),
aarch64_enc_cset_eq(res));
ins_pipe(pipe_slow);
%}
! instruct compareAndSwapP_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegP tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
--- 9645,9655 ----
ins_encode(aarch64_enc_cmpxchg(mem, oldval, newval),
aarch64_enc_cset_eq(res));
ins_pipe(pipe_slow);
%}
! instruct compareAndSwapP_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
*** 9685,9695 ****
aarch64_enc_cset_eq(res));
ins_pipe(pipe_slow);
%}
! instruct compareAndSwapN_shenandoah(iRegINoSp res, indirect mem, iRegNNoSp oldval, iRegNNoSp newval, iRegP tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (CompareAndSwapN mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
--- 9683,9693 ----
aarch64_enc_cset_eq(res));
ins_pipe(pipe_slow);
%}
! instruct compareAndSwapN_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (CompareAndSwapN mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
*** 9701,9711 ****
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
! __ cmpxchg_oop_shenandoah($mem$$base$$Register, tmp, $newval$$Register, Assembler::word, /*acquire*/ false, /*release*/ true, /*weak*/ false);
__ cset($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
--- 9699,9709 ----
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
! __ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register, Assembler::word, /*acquire*/ false, /*release*/ true, /*weak*/ false);
__ cset($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
*** 9767,9777 ****
aarch64_enc_cset_eq(res));
ins_pipe(pipe_slow);
%}
! instruct compareAndSwapPAcq_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegP tmp, rFlagsReg cr) %{
predicate(needs_acquiring_load_exclusive(n) && UseShenandoahGC);
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
--- 9765,9775 ----
aarch64_enc_cset_eq(res));
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);
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
*** 9805,9815 ****
aarch64_enc_cset_eq(res));
ins_pipe(pipe_slow);
%}
! instruct compareAndSwapNAcq_shenandoah(iRegINoSp res, indirect mem, iRegNNoSp oldval, iRegNNoSp newval, iRegP tmp, rFlagsReg cr) %{
predicate(needs_acquiring_load_exclusive(n) && UseShenandoahGC);
match(Set res (CompareAndSwapN mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
--- 9803,9813 ----
aarch64_enc_cset_eq(res));
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);
match(Set res (CompareAndSwapN mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
*** 9821,9831 ****
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
! __ cmpxchg_oop_shenandoah($mem$$base$$Register, tmp, $newval$$Register, Assembler::word, /*acquire*/ true, /*release*/ true, /*weak*/ false);
__ cset($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
--- 9819,9829 ----
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
! __ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register, Assembler::word, /*acquire*/ true, /*release*/ true, /*weak*/ false);
__ cset($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
*** 9842,9852 ****
instruct compareAndExchangeB(iRegI_R0 res, indirect mem, iRegI_R2 oldval, iRegI_R3 newval, rFlagsReg cr) %{
match(Set res (CompareAndExchangeB mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
! effect(KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (byte, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ uxtbw(rscratch2, $oldval$$Register);
--- 9840,9850 ----
instruct compareAndExchangeB(iRegI_R0 res, indirect mem, iRegI_R2 oldval, iRegI_R3 newval, rFlagsReg cr) %{
match(Set res (CompareAndExchangeB mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
! effect(TEMP_DEF res, KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (byte, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ uxtbw(rscratch2, $oldval$$Register);
*** 9859,9869 ****
%}
instruct compareAndExchangeS(iRegI_R0 res, indirect mem, iRegI_R2 oldval, iRegI_R3 newval, rFlagsReg cr) %{
match(Set res (CompareAndExchangeS mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
! effect(KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (short, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ uxthw(rscratch2, $oldval$$Register);
--- 9857,9867 ----
%}
instruct compareAndExchangeS(iRegI_R0 res, indirect mem, iRegI_R2 oldval, iRegI_R3 newval, rFlagsReg cr) %{
match(Set res (CompareAndExchangeS mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
! effect(TEMP_DEF res, KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (short, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ uxthw(rscratch2, $oldval$$Register);
*** 9876,9886 ****
%}
instruct compareAndExchangeI(iRegI_R0 res, indirect mem, iRegI_R2 oldval, iRegI_R3 newval, rFlagsReg cr) %{
match(Set res (CompareAndExchangeI mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
! effect(KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (int, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
--- 9874,9884 ----
%}
instruct compareAndExchangeI(iRegI_R0 res, indirect mem, iRegI_R2 oldval, iRegI_R3 newval, rFlagsReg cr) %{
match(Set res (CompareAndExchangeI mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
! effect(TEMP_DEF res, KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (int, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
*** 9891,9901 ****
%}
instruct compareAndExchangeL(iRegL_R0 res, indirect mem, iRegL_R2 oldval, iRegL_R3 newval, rFlagsReg cr) %{
match(Set res (CompareAndExchangeL mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
! effect(KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (long, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
--- 9889,9899 ----
%}
instruct compareAndExchangeL(iRegL_R0 res, indirect mem, iRegL_R2 oldval, iRegL_R3 newval, rFlagsReg cr) %{
match(Set res (CompareAndExchangeL mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
! effect(TEMP_DEF res, KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (long, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
*** 9907,9917 ****
instruct compareAndExchangeN(iRegN_R0 res, indirect mem, iRegN_R2 oldval, iRegN_R3 newval, rFlagsReg cr) %{
predicate(! UseShenandoahGC);
match(Set res (CompareAndExchangeN 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"
%}
ins_encode %{
__ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
--- 9905,9915 ----
instruct compareAndExchangeN(iRegN_R0 res, indirect mem, iRegN_R2 oldval, iRegN_R3 newval, rFlagsReg cr) %{
predicate(! UseShenandoahGC);
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"
%}
ins_encode %{
__ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
*** 9919,9951 ****
/*weak*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
! instruct compareAndExchangeN_shenandoah(iRegN_R0 res, indirect mem, iRegN_R2 oldval, iRegN_R3 newval, iRegP tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (CompareAndExchangeN 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"
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
__ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
! Assembler::word, /*acquire*/ false, /*release*/ true,
! /*weak*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
instruct compareAndExchangeP(iRegP_R0 res, indirect mem, iRegP_R2 oldval, iRegP_R3 newval, rFlagsReg cr) %{
predicate(!UseShenandoahGC || 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(KILL cr);
format %{
"cmpxchg $res = $mem, $oldval, $newval\t# (ptr, weak) if $mem == $oldval then $mem <-- $newval"
%}
ins_encode %{
__ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
--- 9917,9948 ----
/*weak*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
! instruct compareAndExchangeN_shenandoah(iRegNNoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
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"
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
__ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
! Assembler::word, /*acquire*/ false, /*release*/ true, /*weak*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
instruct compareAndExchangeP(iRegP_R0 res, indirect mem, iRegP_R2 oldval, iRegP_R3 newval, rFlagsReg cr) %{
predicate(!UseShenandoahGC || 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"
%}
ins_encode %{
__ cmpxchg($mem$$Register, $oldval$$Register, $newval$$Register,
*** 9953,9976 ****
/*weak*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
! instruct compareAndExchangeP_shenandoah(iRegP_R0 res, indirect mem, iRegP_R2 oldval, iRegP_R3 newval, iRegP tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (CompareAndExchangeP mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
! effect(TEMP tmp, KILL cr);
format %{
"cmpxchg_oop_shenandoah $mem, $oldval, $newval\t# (ptr) if $mem == $oldval then $mem <-- $newval with temp $tmp"
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
__ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
! Assembler::xword, /*acquire*/ false, /*release*/ true,
! /*weak*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
instruct weakCompareAndSwapB(iRegINoSp res, indirect mem, iRegI oldval, iRegI newval, rFlagsReg cr) %{
--- 9950,9972 ----
/*weak*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
! instruct compareAndExchangeP_shenandoah(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
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"
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
__ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
! Assembler::xword, /*acquire*/ false, /*release*/ true, /*weak*/ false, $res$$Register);
%}
ins_pipe(pipe_slow);
%}
instruct weakCompareAndSwapB(iRegINoSp res, indirect mem, iRegI oldval, iRegI newval, rFlagsReg cr) %{
*** 10059,10069 ****
__ csetw($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
! instruct weakCompareAndSwapN_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegP tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (WeakCompareAndSwapN mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
effect(TEMP tmp, KILL cr);
format %{
--- 10055,10065 ----
__ csetw($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
! instruct weakCompareAndSwapN_shenandoah(iRegINoSp res, indirect mem, iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (WeakCompareAndSwapN mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
effect(TEMP tmp, KILL cr);
format %{
*** 10072,10083 ****
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
__ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
! Assembler::word, /*acquire*/ false, /*release*/ true,
! /*weak*/ true);
__ csetw($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
--- 10068,10078 ----
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
__ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
! Assembler::word, /*acquire*/ false, /*release*/ true, /*weak*/ true);
__ csetw($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
*** 10097,10107 ****
__ csetw($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
! instruct weakCompareAndSwapP_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegP tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (WeakCompareAndSwapP mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
effect(TEMP tmp, KILL cr);
format %{
--- 10092,10102 ----
__ csetw($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
! instruct weakCompareAndSwapP_shenandoah(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp, rFlagsReg cr) %{
predicate(UseShenandoahGC);
match(Set res (WeakCompareAndSwapP mem (Binary oldval newval)));
ins_cost(3 * VOLATILE_REF_COST);
effect(TEMP tmp, KILL cr);
format %{
*** 10110,10121 ****
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
__ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
! Assembler::xword, /*acquire*/ false, /*release*/ true,
! /*weak*/ true);
__ csetw($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
// ---------------------------------------------------------------------
--- 10105,10115 ----
%}
ins_encode %{
Register tmp = $tmp$$Register;
__ mov(tmp, $oldval$$Register); // Must not clobber oldval.
__ cmpxchg_oop_shenandoah($mem$$Register, tmp, $newval$$Register,
! Assembler::xword, /*acquire*/ false, /*release*/ true, /*weak*/ true);
__ csetw($res$$Register, Assembler::EQ);
%}
ins_pipe(pipe_slow);
%}
// ---------------------------------------------------------------------
< prev index next >