On Tue, Nov 27, 2012 at 4:39 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Tue, Nov 27, 2012 at 04:35:33PM +0400, Dmitry Vyukov wrote: >> On Tue, Nov 27, 2012 at 4:27 PM, Jakub Jelinek <ja...@redhat.com> wrote: >> > On Tue, Nov 27, 2012 at 09:23:30AM +0100, Jakub Jelinek wrote: >> >> On Tue, Nov 27, 2012 at 12:13:42PM +0400, Dmitry Vyukov wrote: >> >> > I've added 128-bit atomic ops: >> >> > http://llvm.org/viewvc/llvm-project?view=rev&revision=168683 >> >> >> >> Thanks. >> > >> > +#if (defined(__clang__) && defined(__clang_major__) \ >> > + && defined(__clang_minor__) && __clang__ >= 1 && __clang_major__ >= >> > 3 \ >> > + && __clang_minor__ >= 3) \ >> > + || (defined(__GNUC__) && defined(__GNUC_MINOR__) \ >> > + && defined(__GNUC_PATCHLEVEL__) && __GNUC__ >= 4 && __GNUC_MINOR__ >> > >= 6 \ >> > + && __GNUC_PATCHLEVEL__ >= 3) >> > >> > is wrong, one thing is that __int128 is available only on a couple of >> > architectures (i?86/x86_64/ia64 or so), and more importantly, the above >> > isn't true for say GCC 4.7.0, because __GNUC_PATCHLEVEL__ is then < 3. >> > So, either you want something like >> > #define GCC_VERSION ((__GNUC__) * 10000 + (__GNUC_MINOR__) * 100 + >> > (__GNUC_PATCHLEVEL__)) >> > and then you can test like #if GCC_VERSION >= 40603 >> > or, for the int128 case, much better just to test >> > defined(__GNUC__) && defined(__SIZEOF_INT128__) >> > (no idea if clang doesn't define the same macro, if it does, you could >> > just test for presence of the sizeof macro). >> >> clang does not support the macro. >> what about >> #if defined(__SIZEOF_INT128__) || defined(__clang__) >> ? > > Then for __clang__ you need to do a version check I guess (and, the same > what I wrote applies, consider clang 4.0; don't care about that though), > but for GCC sure, just the #ifdef __SIZEOF_INT128__ is what lots of tests do.
I've wrote: #if defined(__SIZEOF_INT128__) \ || (__clang_major__ * 100 + __clang_minor__ >= 302) thanks!