ARM libatomic inline asm uses sel, uadd8, uadd16 instructions
which are only available if __ARM_FEATURE_SIMD32 is defined.

libatomic/
2017-01-25  Szabolcs Nagy  <szabolcs.n...@arm.com>

        PR target/78945
        * config/arm/exch_n.c (libat_exchange): Check __ARM_FEATURE_SIMD32.
diff --git a/libatomic/config/arm/exch_n.c b/libatomic/config/arm/exch_n.c
index 991f19d..685cb95 100644
--- a/libatomic/config/arm/exch_n.c
+++ b/libatomic/config/arm/exch_n.c
@@ -29,7 +29,7 @@
 /* When using STREX to implement sub-word exchange, we can do much better
    than the compiler by using the APSR.GE and APSR.C flags.  */
 
-#if !DONE && HAVE_STREX && !HAVE_STREXBH && N == 2
+#if !DONE && __ARM_FEATURE_SIMD32 && HAVE_STREX && !HAVE_STREXBH && N == 2
 UTYPE
 SIZE(libat_exchange) (UTYPE *mptr, UTYPE newval, int smodel)
 {
@@ -79,7 +79,7 @@ SIZE(libat_exchange) (UTYPE *mptr, UTYPE newval, int smodel)
 #endif /* !HAVE_STREXBH && N == 2 */
 
 
-#if !DONE && HAVE_STREX && !HAVE_STREXBH && N == 1
+#if !DONE && __ARM_FEATURE_SIMD32 && HAVE_STREX && !HAVE_STREXBH && N == 1
 UTYPE
 SIZE(libat_exchange) (UTYPE *mptr, UTYPE newval, int smodel)
 {

Reply via email to