]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/kru: fix collision when user plays with -march option docs-cache-kru-8qejro/deployments/7805 cache-kru 1726/head
authorVladimír Čunát <vladimir.cunat@nic.cz>
Mon, 20 Oct 2025 09:30:54 +0000 (11:30 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 21 Oct 2025 10:50:53 +0000 (12:50 +0200)
Affects just clang, apparently.  This is just a copy from knot-dns changes,
doing a bit more than this resolver commit title says.  See:
https://gitlab.nic.cz/knot/knot-dns/-/commit/ec4a2567b213efdb8ecab6573cebbc74fbb507b2
https://gitlab.nic.cz/knot/knot-dns/-/commit/509d9d82b51c58ea572dccb09f4fdbe1a3c2571e

lib/kru-avx2.c

index a850c5c83f43708cdbdaae2d9335f91abe4ca7cc..fd38b34fc2450dd5c5dc1f8955acbafc1bc4a40e 100644 (file)
     along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
-// Checked with clang 5 (2017) and gcc 6 (2016).
+// Checked with clang 12 (2021) and gcc 6 (2016).
 // For other cases we'll rather keep just the generic implementation.
-#if defined(__x86_64__) && (__clang_major__ >= 5 || __GNUC__ >= 6)
+#if defined(__x86_64__) && (__clang_major__ >= 12 || __GNUC__ >= 6) && !defined(__APPLE__)
 
 // This file has code for new-ish x86 (2015+ usually, Atom 2021+) - AES + AVX2
-#if __clang_major__ >= 12
-       #pragma clang attribute push (__attribute__((target("arch=x86-64-v3,aes"))), \
-                                                       apply_to = function)
-#elif __clang__
-       #pragma clang attribute push (__attribute__((target("avx2,aes"))), \
-                                                       apply_to = function)
+#ifdef __clang__
+       // Force using specific instructions only if target architecture/optimization not specified
+       #if !defined(__AVX2__)
+               #pragma clang attribute push (__attribute__((target("arch=x86-64-v3,aes"))), \
+                                                               apply_to = function)
+       #endif
 #else
        #pragma GCC push_options
        #if __GNUC__ >= 11
@@ -46,7 +46,9 @@ KR_EXPORT
 const struct kru_api KRU_AVX2 = KRU_API_INITIALIZER;
 
 #ifdef __clang__
-       #pragma clang attribute pop
+       #if !defined(__AVX2__)
+               #pragma clang attribute pop
+       #endif
 #else
        #pragma GCC pop_options
 #endif