* Add TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV target macro.
[official-gcc.git] / libatomic / config / x86 / host-config.h
blob9615d3849d1e7551da3b9deb27b6e9212b324e70
1 /* Copyright (C) 2012-2014 Free Software Foundation, Inc.
2 Contributed by Richard Henderson <rth@redhat.com>.
4 This file is part of the GNU Atomic Library (libatomic).
6 Libatomic is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 Libatomic is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 more details.
16 Under Section 7 of GPL version 3, you are granted additional
17 permissions described in the GCC Runtime Library Exception, version
18 3.1, as published by the Free Software Foundation.
20 You should have received a copy of the GNU General Public License and
21 a copy of the GCC Runtime Library Exception along with this program;
22 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 <http://www.gnu.org/licenses/>. */
25 #if HAVE_IFUNC
26 #include <cpuid.h>
28 extern unsigned int libat_feat1_ecx HIDDEN;
29 extern unsigned int libat_feat1_edx HIDDEN;
31 #ifdef __x86_64__
32 # define IFUNC_COND_1 (libat_feat1_ecx & bit_CMPXCHG16B)
33 #else
34 # define IFUNC_COND_1 (libat_feat1_edx & bit_CMPXCHG8B)
35 #endif
37 #ifdef __x86_64__
38 # define IFUNC_NCOND(N) (N == 16)
39 #else
40 # define IFUNC_NCOND(N) (N == 8)
41 #endif
43 #ifdef __x86_64__
44 # undef MAYBE_HAVE_ATOMIC_CAS_16
45 # define MAYBE_HAVE_ATOMIC_CAS_16 IFUNC_COND_1
46 # undef MAYBE_HAVE_ATOMIC_EXCHANGE_16
47 # define MAYBE_HAVE_ATOMIC_EXCHANGE_16 IFUNC_COND_1
48 # undef MAYBE_HAVE_ATOMIC_LDST_16
49 # define MAYBE_HAVE_ATOMIC_LDST_16 IFUNC_COND_1
50 # if IFUNC_ALT == 1
51 # undef HAVE_ATOMIC_CAS_16
52 # define HAVE_ATOMIC_CAS_16 1
53 # endif
54 #else
55 # undef MAYBE_HAVE_ATOMIC_CAS_8
56 # define MAYBE_HAVE_ATOMIC_CAS_8 IFUNC_COND_1
57 # undef MAYBE_HAVE_ATOMIC_EXCHANGE_8
58 # define MAYBE_HAVE_ATOMIC_EXCHANGE_8 IFUNC_COND_1
59 # undef MAYBE_HAVE_ATOMIC_LDST_8
60 # define MAYBE_HAVE_ATOMIC_LDST_8 IFUNC_COND_1
61 # if IFUNC_ALT == 1
62 # undef HAVE_ATOMIC_CAS_8
63 # define HAVE_ATOMIC_CAS_8 1
64 # endif
65 #endif
67 #endif /* HAVE_IFUNC */
69 #include_next <host-config.h>