commit:     262547d73d51be43333fd748302769e85a61f76b
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 15 12:06:51 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Fri Aug 15 14:31:10 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=262547d7

dev-python/numpy: Fix AVX512 logic

Bug: https://bugs.gentoo.org/961476
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 dev-python/numpy/numpy-2.3.2-r1.ebuild | 61 +++++++++++++++++++++++++---------
 1 file changed, 46 insertions(+), 15 deletions(-)

diff --git a/dev-python/numpy/numpy-2.3.2-r1.ebuild 
b/dev-python/numpy/numpy-2.3.2-r1.ebuild
index 7226a8b7a4c0..f4377e0e9825 100644
--- a/dev-python/numpy/numpy-2.3.2-r1.ebuild
+++ b/dev-python/numpy/numpy-2.3.2-r1.ebuild
@@ -75,6 +75,16 @@ PATCHES=(
        "${FILESDIR}"/${P}-no-detect.patch
 )
 
+has_all_x86() {
+       local flag
+       for flag; do
+               if ! use "cpu_flags_x86_${flag}"; then
+                       return 1
+               fi
+       done
+       return 0
+}
+
 python_configure_all() {
        local cpu_baseline=()
        local map flag
@@ -155,23 +165,44 @@ python_configure_all() {
 
                        if [[ ${cpu_baseline[@]} && ${cpu_baseline[-1]} == 
AVX512CD ]]; then
                                # upstream combines multiple instructions into 
per-CPU sets
-                               local avx512_mapping=(
-                                       "AVX512_KNL:avx512pf avx512er"
-                                       "AVX512_KNM:avx512_vpopcntdq 
avx512_4vnniw avx512_4fmaps"
-                                       "AVX512_SKX:avx512dq avx512bw avx512vl"
-                                       "AVX512_CLX:avx512_vnni"
-                                       "AVX512_CNL:avx512ifma avx512vbmi"
-                                       "AVX512_ICL:avx512_vbmi2 avx512_bitalg"
-                                       "AVX512_SPR:avx512_fp16"
+                               local -A avx512_mapping=(
+                                       [AVX512_KNL]="avx512pf avx512er"
+                                       [AVX512_KNM]="avx512_vpopcntdq 
avx512_4vnniw avx512_4fmaps"
+                                       [AVX512_SKX]="avx512dq avx512bw 
avx512vl"
+                                       [AVX512_CLX]="avx512_vnni"
+                                       [AVX512_CNL]="avx512ifma avx512vbmi"
+                                       [AVX512_ICL]="avx512_vbmi2 
avx512_bitalg"
+                                       [AVX512_SPR]="avx512_fp16"
                                )
-                               for map in "${avx512_mapping[@]}"; do
-                                       for flag in ${map#*:}; do
-                                               if ! use 
"cpu_flags_x86_${flag}"; then
-                                                       break 2
+
+                               # 1. AVX512CD -> AVX512_KNL -> AVX512_KNM
+                               if has_all_x86 ${avx512_mapping[AVX512_KNL]}; 
then
+                                       cpu_baseline+=( AVX512_KNL )
+                                       if has_all_x86 
${avx512_mapping[AVX512_KNM]}; then
+                                               cpu_baseline+=( AVX512_KNM )
+                                       fi
+                               fi
+                               # 2. AVX512CD -> AVX512_SKX -> [AVX512_CLX, 
AVX512_CNL]
+                               if has_all_x86 ${avx512_mapping[AVX512_SKX]}; 
then
+                                       cpu_baseline+=( AVX512_SKX )
+                                       if has_all_x86 
${avx512_mapping[AVX512_CLX]}; then
+                                               cpu_baseline+=( AVX512_CLX )
+                                       fi
+                                       if has_all_x86 
${avx512_mapping[AVX512_CNL]}; then
+                                               cpu_baseline+=( AVX512_CNL )
+                                       fi
+                               fi
+                               # 3. [AVX512_CLX, AVX512_CNL] -> AVX512_ICL -> 
AVX512_SPR
+                               if [[ ${cpu_baseline[-1]} == AVX512_CNL &&
+                                       ${cpu_baseline[-2]} == AVX512_CLX ]]
+                               then
+                                       if has_all_x86 
${avx512_mapping[AVX512_ICL]}; then
+                                               cpu_baseline+=( AVX512_ICL )
+                                               if has_all_x86 
${avx512_mapping[AVX512_SPR]}; then
+                                                       cpu_baseline+=( 
AVX512_SPR )
                                                fi
-                                       done
-                                       cpu_baseline+=( "${map%:*}" )
-                               done
+                                       fi
+                               fi
                        fi
                        ;;
                *)

Reply via email to