cOMS/check_cpu_features.sh
Dennis Eichhorn eb9a135ca7
Some checks failed
CodeQL / Analyze (${{ matrix.language }}) (autobuild, c-cpp) (push) Has been cancelled
Microsoft C++ Code Analysis / Analyze (push) Has been cancelled
fixing bugs and adding some test scripts
2025-04-27 20:10:58 +00:00

58 lines
1.3 KiB
Bash

#!/bin/bash
check_cpu_features() {
local FLAGS=""
local MACROS=""
# Check for SSE4.2
if lscpu | grep -qi sse4_2; then
FLAGS+=" -msse4.2"
MACROS+=" -D__SSE4_2__"
fi
# Check for AVX
if lscpu | grep -qi avx; then
FLAGS+=" -mavx"
MACROS+=" -D__AVX__"
fi
# Check for AVX2
if lscpu | grep -qi avx2; then
FLAGS+=" -mavx2"
MACROS+=" -D__AVX2__"
fi
# Check for AVX512
if lscpu | grep -qi avx512; then
FLAGS+=" -mavx512f -mavx512cd -mavx512vl -mavx512bw -mavx512dq -mavx512ifma -mavx512vbmi"
MACROS+=" -D__AVX512F__"
fi
# Check for FMA
if lscpu | grep -qi fma; then
FLAGS+=" -mfma"
MACROS+=" -D__FMA__"
fi
# Check for POPCNT
if lscpu | grep -qi popcnt; then
FLAGS+=" -mpopcnt"
MACROS+=" -D__POPCNT__"
fi
# Check for endianness
if [ "$(lscpu | grep -i 'byte order' | awk '{print $3}')" = "Little" ]; then
MACROS+=" -D__LITTLE_ENDIAN__"
elif [ "$(lscpu | grep -i 'byte order' | awk '{print $3}')" = "Big" ]; then
MACROS+=" -D__BIG_ENDIAN__"
fi
# Return the results (two different methods shown)
# Method 1: Set global variables
CPU_FLAGS="$FLAGS"
CPU_MACROS="$MACROS"
# Method 2: Output to stdout (alternative approach)
echo "$FLAGS $MACROS"
}