Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Jun 2013 19:23:28 +0200
From:      Ed Schouten <ed@80386.nl>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        Andre Oppermann <andre@freebsd.org>, freebsd-mips@freebsd.org, freebsd-arch@freebsd.org
Subject:   Re: Kernelspace C11 atomics for MIPS
Message-ID:  <CAJOYFBBiee3wqr52tf9fCdRXDagXa2yDbTO6cDcRU=ZuBU3A8Q@mail.gmail.com>
In-Reply-To: <20130604165652.GT3047@kib.kiev.ua>
References:  <CAJOYFBD502MYbkVR2hnVDTYWOvOUr15=OPyjotNvv%2BZ09vQ1OQ@mail.gmail.com> <51ADA308.6040904@freebsd.org> <201306040952.51513.jhb@freebsd.org> <20130604165652.GT3047@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
2013/6/4 Konstantin Belousov <kostikbel@gmail.com>:
> I do not think so.  The compilers are free to use whatever means to
> implement the stdatomic.  In particular, they are allowed to use simple
> global lock to protect the 'atomic' access, see ATOMIC_type_LOCK_FREE
> documented macros.

Well, yes, no, it's complicated. The fact is, we are still free to
implement <stdatomic.h> without using those compiler's features. For
example, we could have also decided to implement <stdatomic.h> using
only code we provide ourselves, as follows:

static inline int8_t
our_8bit_atomic_store(...)
{
    ...
}

#define atomic_store(...) _Generic( \
    int8_t: our_8bit_atomic_store(....), \
    ... \
)

Also, it is extremely unlikely that compilers implement handlers for
non-lock-free atomics themselves. Both Clang and GCC 4.7+, for
example, will call into __atomic_*_{1,2,4,8,16,c}() whenever it does
not know built-in CPU instructions to perform the operation. More
details:

http://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary

So in my opinion there are tons of ways we can still influence how the
atomic operations are performed. The patch I sent out already
demonstrates this, as we are free to implement the GCC intrinsics the
way we like.

--
Ed Schouten <ed@80386.nl>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJOYFBBiee3wqr52tf9fCdRXDagXa2yDbTO6cDcRU=ZuBU3A8Q>