freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

intel compiler support interest?


From: Stephen McDowell
Subject: intel compiler support interest?
Date: Fri, 12 Jun 2020 07:45:25 -0400

Hi :)

I help maintain the spack package manager when I can, currently users with intel compilers cannot build / install any version after 2.7.1 due to the usage of __builtin_shuffle (for some reason Intel still doesn't support this).

https://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/sfnt/pngshim.c#n64

As far as I can tell, the easiest thing to do is to just disable the vectorized code (see patch below).  I do not experience any compilation problems, but was unable to determine how to test this code.  I could only find the fuzzer on GitHub and it wasn't clear to me which executable would even test this :/

Would the freetype team intend on accepting this patch?  I will be creating a slightly different one for spack (minimal diff just changing 2 lines), but I took the liberty of re-lining up the operators since it looks like that's what was once going on here :)

diff --git a/src/sfnt/pngshim.c b/src/sfnt/pngshim.c
index 3acc1d551..ff40eab66 100644
--- a/src/sfnt/pngshim.c
+++ b/src/sfnt/pngshim.c
@@ -61,11 +61,13 @@
     /* predates clang; the `__BYTE_ORDER__' preprocessor symbol was */
     /* introduced in gcc 4.6 and clang 3.2, respectively.           */
     /* `__builtin_shuffle' for gcc was introduced in gcc 4.7.0.     */
-#if ( ( defined( __GNUC__ )                                &&             \
-        ( ( __GNUC__ >= 5 )                              ||               \
-        ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 7 ) ) ) )         ||   \
-      ( defined( __clang__ )                                       &&     \
-        ( ( __clang_major__ >= 4 )                               ||       \
+    /* Intel compilers do not currently support __builtin_shuffle.  */
+#if !defined(__INTEL_COMPILER) /* NOTE: Intel check must be first.  */ && \
+    ( ( defined( __GNUC__ )                                            && \
+        ( ( __GNUC__ >= 5 )                                            || \
+        ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 7 ) ) ) )           || \
+      ( defined( __clang__ )                                           && \
+        ( ( __clang_major__ >= 4 )                                     || \
         ( ( __clang_major__ == 3 ) && ( __clang_minor__ >= 2 ) ) ) ) ) && \
     defined( __OPTIMIZE__ )                                            && \
     defined( __SSE__ )                                                 && \

Please let me know what you think / if there are any changes you would like.  Thanks for freetype!

-Stephen McDowell

reply via email to

[Prev in Thread] Current Thread [Next in Thread]