diff --git a/configure.ac b/configure.ac index 8fbc4f580..816898854 100644 --- a/configure.ac +++ b/configure.ac @@ -2596,10 +2596,20 @@ if test x"$GCC" = xyes; then AC_MSG_RESULT($glib_cv_gcc_has_builtin_atomic_operations) fi - AM_CONDITIONAL(HAVE_GCC_BUILTINS_FOR_ATOMIC_OPERATIONS, [test $glib_cv_gcc_has_builtin_atomic_operations = yes]) +AC_MSG_CHECKING([for Win32 atomic intrinsics]) +glib_cv_has_win32_atomic_operations=no +AC_TRY_LINK([], + [int i; _InterlockedExchangeAdd (&i, 0);], + [glib_cv_has_win32_atomic_operations=yes], + [glib_cv_has_win32_atomic_operations=no]) +AC_MSG_RESULT($glib_cv_has_win32_atomic_operations) +if test "x$glib_cv_has_win32_atomic_operations" = xyes; then + AC_DEFINE(HAVE_WIN32_BUILTINS_FOR_ATOMIC_OPERATIONS,1,[Have Win32 atomic intrinsics]) +fi + dnl ************************ dnl ** Check for futex(2) ** dnl ************************ diff --git a/glib/gatomic.c b/glib/gatomic.c index 328ad4f1e..1e83f193f 100644 --- a/glib/gatomic.c +++ b/glib/gatomic.c @@ -455,7 +455,7 @@ gsize return g_atomic_pointer_xor ((volatile gpointer *) atomic, val); } -#elif defined (G_PLATFORM_WIN32) +#elif defined (G_PLATFORM_WIN32) && defined(HAVE_WIN32_BUILTINS_FOR_ATOMIC_OPERATIONS) #include #if !defined(_M_AMD64) && !defined (_M_IA64) && !defined(_M_X64)