summaryrefslogtreecommitdiffstats
path: root/m4
diff options
context:
space:
mode:
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>2016-09-28 01:47:12 +0300
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>2016-09-28 01:47:12 +0300
commitdb3f85d062ae688dfed5d52970d2740e446a5220 (patch)
tree638fddff442b29dbfa284ac6a2b2726a16691b70 /m4
parentd24f24e145cf8f26132a3c937fe90cdbd383ad29 (diff)
autoconf for detecting 32/64 bit CPU
Diffstat (limited to 'm4')
-rw-r--r--m4/ac_c___atomic.m430
-rw-r--r--m4/ac_c__generic.m428
2 files changed, 58 insertions, 0 deletions
diff --git a/m4/ac_c___atomic.m4 b/m4/ac_c___atomic.m4
new file mode 100644
index 0000000000..046a5514b8
--- /dev/null
+++ b/m4/ac_c___atomic.m4
@@ -0,0 +1,30 @@
+# AC_C___ATOMIC
+# -------------
+# Define HAVE_C___ATOMIC if __atomic works.
+AN_IDENTIFIER([__atomic], [AC_C___ATOMIC])
+AC_DEFUN([AC_C___ATOMIC],
+[AC_CACHE_CHECK([for __atomic], ac_cv_c___atomic,
+[AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[int
+ main (int argc, char **argv)
+ {
+ volatile unsigned long ul1 = 1, ul2 = 0, ul3 = 2;
+ __atomic_compare_exchange(&ul1, &ul2, &ul3, 1, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
+ __atomic_fetch_add(&ul1, 1, __ATOMIC_SEQ_CST);
+ __atomic_fetch_sub(&ul3, 1, __ATOMIC_SEQ_CST);
+ volatile unsigned long long ull1 = 1, ull2 = 0, ull3 = 2;
+ __atomic_compare_exchange(&ull1, &ull2, &ull3, 1, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST);
+ __atomic_fetch_add(&ull1, 1, __ATOMIC_SEQ_CST);
+ __atomic_fetch_sub(&ull3, 1, __ATOMIC_SEQ_CST);
+ return 0;
+ }
+ ]])],
+ [ac_cv_c___atomic=yes],
+ [ac_cv_c___atomic=no])])
+if test $ac_cv_c___atomic = yes; then
+ AC_DEFINE([HAVE_C___ATOMIC], 1,
+ [Define to 1 if __atomic operations work.])
+fi
+])# AC_C___ATOMIC
+
diff --git a/m4/ac_c__generic.m4 b/m4/ac_c__generic.m4
new file mode 100644
index 0000000000..0c4dd52c6a
--- /dev/null
+++ b/m4/ac_c__generic.m4
@@ -0,0 +1,28 @@
+# https://lists.gnu.org/archive/html/autoconf-commit/2012-12/msg00004.html
+# AC_C__GENERIC
+# -------------
+# Define HAVE_C__GENERIC if _Generic works, a la C11.
+AN_IDENTIFIER([_Generic], [AC_C__GENERIC])
+AC_DEFUN([AC_C__GENERIC],
+[AC_CACHE_CHECK([for _Generic], ac_cv_c__Generic,
+[AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[int
+ main (int argc, char **argv)
+ {
+ int a = _Generic (argc, int: argc = 1);
+ int *b = &_Generic (argc, default: argc);
+ char ***c = _Generic (argv, int: argc, default: argv ? &argv : 0);
+ _Generic (1 ? 0 : b, int: a, default: b) = &argc;
+ _Generic (a = 1, default: a) = 3;
+ return a + !b + !c;
+ }
+ ]])],
+ [ac_cv_c__Generic=yes],
+ [ac_cv_c__Generic=no])])
+if test $ac_cv_c__Generic = yes; then
+ AC_DEFINE([HAVE_C__GENERIC], 1,
+ [Define to 1 if C11-style _Generic works.])
+fi
+])# AC_C__GENERIC
+