[aarch64-port-dev ] Why is 8079315 only specific to x86? and why is it not in JDK8?

Andrew Dinn adinn at redhat.com
Mon Oct 26 17:05:38 UTC 2015


I noticed what looks to me like an anomaly when backporting the volatile
object/CAS optimizations to JDK8 and wondered if someone could explain
it to me.

Why is the fix for

  8079315: UseCondCardMark broken in conjunction with CMS precleaning on x86

only applied for x86?

This JDK9 patch modifies the shared C1 and C2 code to plant a StoreLoad
into the card mark code when UseCondCardMark is true and CMS is in use.

It also modifies macroAssembler_x86.cpp to insert a StoreLoad inside
routine store_check.

However, store_check in  macroAssembler_aarch64.cpp does not include a
StoreLoad. Surely it ought to?

n.b. the related patch for the interpreter

  8078438: Interpreter should support conditional card marks
(UseCondCardMark) on x86 and aarch64

includes modifications for both architectures.

It looks to me like 8079315 (and 8078438) probably ought to be
backported to JDK8 but it seems Oracle have not done so and hence that
we have not done it either. This is relevant to the vol obj/CAS backport
to jdk8-aarch64 because that patch includes special case handling for
CMS to cope with the extra MemBarVolatile that may result from this
patch being applied to C2. It copes ok if the MemBarVolatile is not
generated because that can happen when e.g. a NULL value is written. But
the extra case handling only really makes sense if 8079315 is backported
to jdk8-aarch64 (I still prefer to leave it in just in case they do get
backported otherwise the backprot will break the vol obj/CAS handling).

regards,


Andrew Dinn
-----------



More information about the aarch64-port-dev mailing list