[aarch64-port-dev ] AARCH64: 8064611: Changes to HotSpot shared code
Dean Long
dean.long at oracle.com
Thu Dec 11 05:58:15 UTC 2014
On 12/10/2014 8:24 PM, Vladimir Kozlov wrote:
> On 12/10/14 12:44 PM, Andrew Haley wrote:
>> On 12/10/2014 08:27 PM, David Holmes wrote:
>>> If I had paid more attention to this earlier I would have suggested
>>> reversing the sense of the UseBarriersForVolatile flag
>>> (ElideBarriersForVolatiles?) because it makes it seem like using
>>> barriers for volatiles is experimental - which of course it isn't.
>>
>> OK.
>>
>>> Also this seems C2 specific so shouldn't it be defined in
>>> c2_globals.hpp?
>>
>> Sure. This is the Patch That Never Ends, after all. :-)
>>
>> Let's see what the other reviewers say, and I'll wrap it all together.
>>
>> Thanks,
>> Andrew.
>>
>
> I agree with David about reversing flag and putting it into
> c2_globals.hpp. But, please, confirm that you left volatile barriers
> generated by C1 compiler (in c1_LIR_Generator.cpp) as they are - I
> don't see any changes there.
>
> One thing left is barriers for volatile loads - there is inconsistency
> of code in library_call.cpp and parse3.cpp. We discussed it already
> before.
> If you want to remove MemBarAcquire for volatile loads then, please,
> also change code in Parse::do_get_xxx() in parse3.cpp.
Let me see if I'm on the same page. Would that be something like:
272 // If reference is volatile, prevent following memory ops from
273 // floating up past the volatile read. Also prevents commoning
274 // another volatile read.
275 if (field->is_volatile()) {
276 // Memory barrier includes bogus read of value to force load BEFORE membar
277 insert_mem_bar(ElideBarriersForVolatiles ? Op_MemBarCPUOrder : Op_MemBarAcquire, ld);
278 }
? Does the "bogus read" comment and extra "ld" arg still apply if
Op_MemBarCPUOrder is used?
dl
> If not, the code in library_call.cpp should avoid membars only for
> stores:
>
> // For Stores, place a memory ordering barrier now.
> if (is_store) {
> - insert_mem_bar(Op_MemBarRelease);
> + insert_mem_bar(ElideBarriersForVolatiles ? Op_MemBarCPUOrder :
> Op_MemBarRelease);
> } else {
> if (support_IRIW_for_not_multiple_copy_atomic_cpu) {
> insert_mem_bar(Op_MemBarVolatile);
> }
> }
>
>
> if (is_volatile) {
> if (!is_store) {
> insert_mem_bar(Op_MemBarAcquire);
> } else {
> if (!support_IRIW_for_not_multiple_copy_atomic_cpu) {
> - insert_mem_bar(Op_MemBarVolatile);
> + insert_mem_bar(ElideBarriersForVolatiles ? Op_MemBarCPUOrder
> : Op_MemBarVolatile);
> }
> }
> }
>
>
> Thanks,
> Vladimir
>
More information about the aarch64-port-dev
mailing list