Use gcc's atomic builtins on arm, when available.
diff --git a/asio/include/asio/detail/fenced_block.hpp b/asio/include/asio/detail/fenced_block.hpp
index f67fe36..8ee5f39 100644
--- a/asio/include/asio/detail/fenced_block.hpp
+++ b/asio/include/asio/detail/fenced_block.hpp
@@ -25,7 +25,8 @@
 # include "asio/detail/macos_fenced_block.hpp"
 #elif defined(__sun)
 # include "asio/detail/solaris_fenced_block.hpp"
-#elif defined(__GNUC__) && defined(__arm__)
+#elif defined(__GNUC__) && defined(__arm__) \
+  && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
 # include "asio/detail/gcc_arm_fenced_block.hpp"
 #elif defined(__GNUC__) && (defined(__hppa) || defined(__hppa__))
 # include "asio/detail/gcc_hppa_fenced_block.hpp"
@@ -53,7 +54,8 @@
 typedef macos_fenced_block fenced_block;
 #elif defined(__sun)
 typedef solaris_fenced_block fenced_block;
-#elif defined(__GNUC__) && defined(__arm__)
+#elif defined(__GNUC__) && defined(__arm__) \
+  && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
 typedef gcc_arm_fenced_block fenced_block;
 #elif defined(__GNUC__) && (defined(__hppa) || defined(__hppa__))
 typedef gcc_hppa_fenced_block fenced_block;