From 36a4aeb91f3a940f53e1209b5f1671403142a130 Mon Sep 17 00:00:00 2001 From: Ben Niu Date: Thu, 21 Jan 2021 09:56:17 -0800 Subject: [PATCH] util: When building 'ARM64EC', don't use x64 intrinsics which need to be emulated ARM64EC is a new build target for Windows ARM64 devices for x64 support. These binaries can be loaded in x64 processes, but don't need to be emulated. For code that's heavily used, avoiding the emulation can be a huge perf win. Acked-by: Ilia Mirkin Reviewed-by: Jesse Natalie Part-of: --- src/util/rounding.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/util/rounding.h b/src/util/rounding.h index e329d438244..5392ad642bf 100644 --- a/src/util/rounding.h +++ b/src/util/rounding.h @@ -29,7 +29,7 @@ #include #include -#if defined(__SSE__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || defined(_M_X64) +#if defined(__SSE__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || (defined(_M_X64) && !defined(_M_ARM64EC)) #include #include #endif @@ -95,7 +95,7 @@ _mesa_roundeven(double x) static inline long _mesa_lroundevenf(float x) { -#if defined(__SSE__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || defined(_M_X64) +#if defined(__SSE__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1)) || (defined(_M_X64) && !defined(_M_ARM64EC)) #if LONG_MAX == INT64_MAX return _mm_cvtss_si64(_mm_load_ss(&x)); #elif LONG_MAX == INT32_MAX @@ -108,7 +108,6 @@ _mesa_lroundevenf(float x) #endif } - /** * \brief Rounds \c x to the nearest integer, with ties to the even integer, * and returns the value as a long int. @@ -116,7 +115,7 @@ _mesa_lroundevenf(float x) static inline long _mesa_lroundeven(double x) { -#if defined(__SSE2__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(_M_X64) +#if defined(__SSE2__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || (defined(_M_X64) && !defined(_M_ARM64EC)) #if LONG_MAX == INT64_MAX return _mm_cvtsd_si64(_mm_load_sd(&x)); #elif LONG_MAX == INT32_MAX