This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: [patch] Provide a can_compare_and_swap_p target hook.
- From: Andrew Haley <aph at redhat dot com>
- To: Andrew MacLeod <amacleod at redhat dot com>, Richard Biener <richard dot guenther at gmail dot com>, Richard Henderson <rth at redhat dot com>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Cc: Jeff Law <law at redhat dot com>, java at gcc dot gnu dot org
- Date: Fri, 07 Nov 2014 09:31:34 +0000
- Subject: Re: [patch] Provide a can_compare_and_swap_p target hook.
- Authentication-results: sourceware.org; auth=none
- References: <5458FE9C dot 2090409 at redhat dot com> <54590C19 dot 40208 at redhat dot com> <54591348 dot 1010904 at redhat dot com> <545913A4 dot 5010400 at redhat dot com> <54591B3A dot 8030908 at redhat dot com> <70044BE8-9F38-4BDB-B73F-6E2FC9AC2629 at gmail dot com> <54593352 dot 2000700 at redhat dot com> <545BB682 dot 9000209 at redhat dot com> <545BBCA5 dot 7060203 at redhat dot com> <545BC666 dot 5020007 at redhat dot com>
On 06/11/14 19:05, Andrew MacLeod wrote:
>
>
> 1) Given that the compiler *always* provides support via libatomic now
> (even if it is via locks), does that mean that VMSupportsCS8_builtin()
> should always return true?
>
> or should we map to that a call to __atomic_always_lock_free() ? (that
> always gets folded to a true or false at compile time) my guess is the
> latter?
Perhaps so. The problem is that some targets can't do CAS on 64-bit
doublewords.
> 2) and in compareAndSwapLong_builtin(), thre is a wonky bit:
>
> /* We don't trust flag_use_atomic_builtins for multi-word compareAndSwap.
> Some machines such as ARM have atomic libfuncs but not the multi-word
> versions. */
> if (can_compare_and_swap_p (mode,
> (flag_use_atomic_builtins
> && GET_MODE_SIZE (mode) <= UNITS_PER_WORD)))
> <..> /* generate 8 byte CAS */
>
> I gather we dont need to do anything special here anymore either? As
> an observation of inconsistency,
> compareAndSwapObject_builtin doesn't do that check before calling the 8
> byte CAS :
I believe that any machine which has 64-bit pointers and can do CAS
can do a 64-bit CAS. I'm worried about 32-bit machines trying to do a
64-bit CAS.
> 3) And finally, is flag_use_atomic_builtins suppose to turn them off
> completely? Right now it is passed in to the second parameter of
> can_compare_and_swap_p, which really just says can we compare and swap
> without calling a libfunc.. so currently if the flag is 0, but there
> is native support, the call is generated anyway. should that condition
> really be:
>
> if (flag_use_atomic_builtins)
> {
> <...> /* generate atomic call */
> }
I'm sorry, I really can't remember. I can't think of any reason to
want to turn off builtin support. You have to remember that all this
was written when our support for atomic builtins was seriously flaky
and we would just punt back to the user anything we hadn't written
yet.
Andrew.