< prev index next >
src/cpu/aarch64/vm/macroAssembler_aarch64.hpp
Print this page
rev 10243 : 8150394: aarch64: add support for 8.1 LSE CAS instructions
Reviewed-by: aph
Contributed-by: ananth.jasty@caviumnetworks.com, edward.nevill@linaro.org
*** 969,993 ****
orr(rscratch2, rscratch2, src.as_constant());
str(rscratch2, adr);
}
// A generic CAS; success or failure is in the EQ flag.
! template <typename T1, typename T2>
! void cmpxchg(Register addr, Register expected, Register new_val,
! T1 load_insn,
! void (MacroAssembler::*cmp_insn)(Register, Register),
! T2 store_insn,
! Register tmp = rscratch1) {
! Label retry_load, done;
! bind(retry_load);
! (this->*load_insn)(tmp, addr);
! (this->*cmp_insn)(tmp, expected);
! br(Assembler::NE, done);
! (this->*store_insn)(tmp, new_val, addr);
! cbnzw(tmp, retry_load);
! bind(done);
! }
// Calls
address trampoline_call(Address entry, CodeBuffer *cbuf = NULL);
--- 969,982 ----
orr(rscratch2, rscratch2, src.as_constant());
str(rscratch2, adr);
}
// A generic CAS; success or failure is in the EQ flag.
! void cmpxchg(operand_size sz,
! Register oldv, Register newv, Register addr,
! bool acquire = true, bool release = true,
! Register tmp = rscratch1);
// Calls
address trampoline_call(Address entry, CodeBuffer *cbuf = NULL);
< prev index next >