public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Eliot Moss <moss@cs.umass.edu>
To: "cygwin@cygwin.com" <cygwin@cygwin.com>
Subject: Re: gcc and 128-bit compare/exchange
Date: Wed, 11 Mar 2020 02:13:40 -0400	[thread overview]
Message-ID: <0fc8a150-99b1-34dc-0dfb-a096fc3b2096@cs.umass.edu> (raw)
In-Reply-To: <0a2c77b2-7ff2-8118-8631-29d186184ad9@SystematicSw.ab.ca>

On 3/11/2020 1:31 AM, Brian Inglis wrote:

>>>> A quick followup: I was able to get __sync_val_compare_and_swap_16 to work
>>>> (and its bool form).  That will do for now, though of course it's deprecated.

This does get me the inlined asm code.

> Digging further into the murk where a simple builtin inline cmpxchg16b isn't.
> 
> Doing what you're doing now seems easier and better supported than alternatives.
> You can drop stdatomic.h and -latomic as the low level functions are builtins.
> 
> You could also write your own inline function using cmpxchg16b directly in asm.
> 
> Looks like because of cpu and library requirements, you would have to enable
> indirect inline functions in gcc, write libatomic library functions which
> support gcc indirect inline functions, to test cpu cx16 feature, then setup
> indirection, to bypass mutexes.

There are two issues here:

1) Whether the call is inlined.

2) Whether I get the compare-exchange instruction or a block of code protected
    by a pthread mutex.

The __atomic functions do not inline, as far as I know, from my testing on true
Linux platforms.  But Linux _does_ give me the compare-exchange version of
the function.

What I am really reporting is that Cygwin is giving the pthread mutex form
when it should not be.  My CPU clearly has the capability, and the compiler clearly
knows how to emit the instruction, since the __sync form does it.  What is
mysterious and tangled is why libatomic / libc are not delivering the desired
version of the atomic compare-exchange function.

My _guess_ is that having that as an option depends somehow on how gcc is built,
e.g., its build configuration.  I don't know enough about how those ifunc mechanisms
work to know if that is it, or if it's something else, but the behavior seems to
be Cygwin-specific.  Hence my report.

Regards - Eliot

  reply	other threads:[~2020-03-11  6:13 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-09  2:29 Eliot Moss
2020-03-09  2:59 ` Eliot Moss
2020-03-10 20:35   ` Brian Inglis
2020-03-10 21:13     ` Eliot Moss
2020-03-11  5:31       ` Brian Inglis
2020-03-11  6:13         ` Eliot Moss [this message]
2020-03-11 16:30           ` Brian Inglis
2020-03-12  3:36             ` Eliot Moss
2020-03-12 21:13               ` Brian Inglis
2020-03-12 22:49                 ` Eliot Moss
2020-03-13  5:35                   ` Brian Inglis
2020-03-11 17:31           ` Achim Gratz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0fc8a150-99b1-34dc-0dfb-a096fc3b2096@cs.umass.edu \
    --to=moss@cs.umass.edu \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).