From fb05198bddcc21b97232df5f4000583d66d033b3 Mon Sep 17 00:00:00 2001 From: David Gao Date: Thu, 20 Jan 2022 00:44:17 +0000 Subject: [PATCH] Port EIGEN_OPTIMIZATION_BARRIER to soft float arm --- Eigen/src/Core/util/Macros.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Eigen/src/Core/util/Macros.h b/Eigen/src/Core/util/Macros.h index 32bb16805..62566eec9 100644 --- a/Eigen/src/Core/util/Macros.h +++ b/Eigen/src/Core/util/Macros.h @@ -1002,11 +1002,17 @@ namespace Eigen { // General, Altivec, VSX. #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+r,v,wa" (X)); #elif EIGEN_ARCH_ARM_OR_ARM64 - // General, NEON. - // Clang doesn't like "r", - // error: non-trivial scalar-to-vector conversion, possible invalid - // constraint for vector typ - #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+g,w" (X)); + #ifdef __ARM_FP + // General, VFP or NEON. + // Clang doesn't like "r", + // error: non-trivial scalar-to-vector conversion, possible invalid + // constraint for vector typ + #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+g,w" (X)); + #else + // Arm without VFP or NEON. + // "w" constraint will not compile. + #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+g" (X)); + #endif #elif EIGEN_ARCH_i386_OR_x86_64 // General, SSE. #define EIGEN_OPTIMIZATION_BARRIER(X) __asm__ ("" : "+g,x" (X));