RFR: Some more AArch64 CAS/CAE fixes
Roman Kennke
rkennke at redhat.com
Fri Nov 18 14:04:34 UTC 2016
Am Freitag, den 18.11.2016, 14:41 +0100 schrieb Aleksey Shipilev:
> On 11/17/2016 09:11 PM, Roman Kennke wrote:
> >
> > http://cr.openjdk.java.net/~rkennke/aarch64-cas/webrev.02/
>
> *) I don't quite get the NoSp change. The change now allows some
> operands to take SP. Was it an overlook, or AArch64 really has some
> constraints about this?
Input (read-only) registers can be anything. It is important that
output (write-to) registers are *not* SP (e.g. the current thread or
heap-base registers). We had a few places where the result or tmp
registers was including SP, e.g. :
-instruct compareAndSwapNAcq_shenandoah(iRegINoSp res, indirect mem,
iRegNNoSp oldval, iRegNNoSp newval, iRegP tmp, rFlagsReg cr) %{
+instruct compareAndSwapNAcq_shenandoah(iRegINoSp res, indirect mem,
iRegN oldval, iRegN newval, iRegNNoSp tmp, rFlagsReg cr) %{
> *) src/cpu/aarch64/vm/macroAssembler_aarch64.cpp:
>
> Missed one:
> if (size == word) {
>
> Would appreciate parentheses here:
> bool is_cae = result != noreg;
> bool is_narrow = size == word;
Fixed:
http://cr.openjdk.java.net/~rkennke/aarch64-cas/webrev.03/
ok?
Roman
More information about the shenandoah-dev
mailing list