Some more extra casts to avoid alignment warnings with Clang and -Wcast-align on...
[BearSSL] / src / symcipher / aes_x86ni.c
index dcc3952..d2d6369 100644 (file)
 #if BR_AES_X86NI
 
 #if BR_AES_X86NI_GCC
+#if BR_AES_X86NI_GCC_OLD
+#pragma GCC push_options
+#pragma GCC target("sse2,sse4.1,aes,pclmul")
+#endif
 #include <wmmintrin.h>
 #include <cpuid.h>
+#if BR_AES_X86NI_GCC_OLD
+#pragma GCC pop_options
+#endif
 #endif
 
 #if BR_AES_X86NI_MSC
@@ -71,6 +78,14 @@ br_aes_x86ni_supported(void)
 #undef MASK
 }
 
+/*
+ * Per-function attributes appear unreliable on old GCC, so we use the
+ * pragma for all remaining functions in this file.
+ */
+#if BR_AES_X86NI_GCC_OLD
+#pragma GCC target("sse2,sse4.1,aes,pclmul")
+#endif
+
 BR_TARGET("sse2,aes")
 static inline __m128i
 expand_step128(__m128i k, __m128i k2)