|
# Get flags |
|
readarray -td ' ' CPU_FLAG_ARRAY < <(lscpu -J | jq -r '.lscpu[] | select(.field == "Flags:") | .data' | tr -d '\n') |
|
|
|
# x86_64_v1 - lm cmov cx8 fpu fxsr mmx syscall sse2 |
|
cpu=$([ $(jq -c -n '$ARGS.positional | contains(["lm", "cmov", "cx8", "fpu", "fxsr", "mmx", "syscall", "sse2"])' --args "${CPU_FLAG_ARRAY[@]}") ] && echo "x86_64v1" || echo "x86_64v0") |
|
|
|
# x86_64_v2 - cx16 lahf_lm popcnt sse4_1 sse4_2 ssse3 |
|
[[ "$cpu" == "x86_64v1" ]] && cpu=$([ $(jq -c -n '$ARGS.positional | contains(["cx16", "lahf_lm", "popcnt", "sse4_1", "sse4_2", "ssse3"])' --args "${CPU_FLAG_ARRAY[@]}") ] && echo "x86_64v2" || echo "x86_64v1") |
|
|
|
# x86_64_v3 - avx avx2 bmi1 bmi2 f16c fma abm movbe xsave |
|
[[ "$cpu" == "x86_64v2" ]] && cpu=$([ $(jq -c -n '$ARGS.positional | contains(["avx", "avx2", "bmi1", "bmi2", "f16c", "fma", "abm", "movbe", "xsave"])' --args "${CPU_FLAG_ARRAY[@]}") ] && echo "x86_64v3" || echo "x86_64v2") |
|
|
|
# x86_64_v4 - avx512f avx512bw avx512cd avx512dq avx512vl |
|
[[ "$cpu" == "x86_64v3" ]] && cpu=$([ $(jq -c -n '$ARGS.positional | contains(["avx512f", "avx512bw", "avx512cd", "avx512dq", "avx512vl"])' --args "${CPU_FLAG_ARRAY[@]}") ] && echo "x86_64v4" || echo "x86_64v3") |
|
|
|
# Strict superset of x86_64v4 - https://github.com/CachyOS/CachyOS-PKGBUILDS/issues/359 |
|
# zNVer4 - sse3 sse4a aes pclmul prfchw fxsr xsaveopt fsgsbase rdrnd mwaitx adx rdseed clzeo clfulshopt xsavec xsaves sha lzcnt clwb rdpid wbnoinvd vaes vpclmulqdq pku znver3 avx512dq avx512fma avx512bf16 avx512vbmi avx512vbmi2 gfni avx512vnni avx512bitalg avx512vpopcntdq evex512 |
|
[[ "$cpu" == "x86_64v4" ]] && cpu=$([ $(jq -c -n '$ARGS.positional | contains(["sse3", "sse4a", "aes", "pclmul", "prfchw", "fxsr", "xsaveopt", "fsgsbase", "rdrnd", "mwaitx", "adx", "rdseed", "clzeo", "clfulshopt", "xsavec", "xsaves", "sha", "lzcnt", "clwb", "rdpid", "wbnoinvd", "vaes", "vpclmulqdq", "pku", "znver3", "avx512dq", "avx512fma", "avx512bf16", "avx512vbmi", "avx512vbmi2", "gfni", "avx512vnni", "avx512bitalg", "avx512vpopcntdq", "evex512"])' --args "${CPU_FLAG_ARRAY[@]}") ] && echo "znver4" || echo "x86_64v4") |
|
|
|
# Strict superset of znver4 - https://www.phoronix.com/news/AMD-Zen-5-Znver-5-GCC |
|
# znver5 - avxvnni movdiri movdir64b avx512vp2instersect prefretch |
|
[[ "$cpu" == "znver4" ]] && cpu=$([ $(jq -c -n '$ARGS.positional | contains(["avxvnni", "movdiri", "movdir64b", "avx512vp2instersect", "prefretch"])' --args "${CPU_FLAG_ARRAY[@]}") ] && echo "znver5" || echo "znver4") |
|
|
|
echo "CPU Arch: ${cpu}" |