Merge pull request #239120 from LibreCybernetics/arch-stuff
This commit is contained in:
commit
359e1136a6
2 changed files with 42 additions and 13 deletions
|
@ -3,8 +3,15 @@
|
||||||
rec {
|
rec {
|
||||||
# gcc.arch to its features (as in /proc/cpuinfo)
|
# gcc.arch to its features (as in /proc/cpuinfo)
|
||||||
features = {
|
features = {
|
||||||
|
# x86_64 Generic
|
||||||
|
# Spec: https://gitlab.com/x86-psABIs/x86-64-ABI/
|
||||||
default = [ ];
|
default = [ ];
|
||||||
|
x86-64 = [ ];
|
||||||
|
x86-64-v2 = [ "sse3" "ssse3" "sse4_1" "sse4_2" ];
|
||||||
|
x86-64-v3 = [ "sse3" "ssse3" "sse4_1" "sse4_2" "avx" "avx2" "fma" ];
|
||||||
|
x86-64-v4 = [ "sse3" "ssse3" "sse4_1" "sse4_2" "avx" "avx2" "avx512" "fma" ];
|
||||||
# x86_64 Intel
|
# x86_64 Intel
|
||||||
|
nehalem = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" ];
|
||||||
westmere = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" ];
|
westmere = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" ];
|
||||||
sandybridge = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" ];
|
sandybridge = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" ];
|
||||||
ivybridge = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" ];
|
ivybridge = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" ];
|
||||||
|
@ -41,22 +48,32 @@ rec {
|
||||||
|
|
||||||
# a superior CPU has all the features of an inferior and is able to build and test code for it
|
# a superior CPU has all the features of an inferior and is able to build and test code for it
|
||||||
inferiors = {
|
inferiors = {
|
||||||
|
# x86_64 Generic
|
||||||
|
default = [ ];
|
||||||
|
x86-64 = [ ];
|
||||||
|
x86-64-v2 = [ "x86-64" ];
|
||||||
|
x86-64-v3 = [ "x86-64-v2" ] ++ inferiors.x86-64-v2;
|
||||||
|
x86-64-v4 = [ "x86-64-v3" ] ++ inferiors.x86-64-v3;
|
||||||
|
|
||||||
# x86_64 Intel
|
# x86_64 Intel
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
|
# https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
|
||||||
default = [ ];
|
nehalem = [ "x86-64-v2" ] ++ inferiors.x86-64-v2;
|
||||||
westmere = [ ];
|
westmere = [ "nehalem" ] ++ inferiors.nehalem;
|
||||||
sandybridge = [ "westmere" ] ++ inferiors.westmere;
|
sandybridge = [ "westmere" ] ++ inferiors.westmere;
|
||||||
ivybridge = [ "sandybridge" ] ++ inferiors.sandybridge;
|
ivybridge = [ "sandybridge" ] ++ inferiors.sandybridge;
|
||||||
haswell = [ "ivybridge" ] ++ inferiors.ivybridge;
|
|
||||||
|
haswell = lib.unique ([ "ivybridge" "x86-64-v3" ] ++ inferiors.ivybridge ++ inferiors.x86-64-v3);
|
||||||
broadwell = [ "haswell" ] ++ inferiors.haswell;
|
broadwell = [ "haswell" ] ++ inferiors.haswell;
|
||||||
skylake = [ "broadwell" ] ++ inferiors.broadwell;
|
skylake = [ "broadwell" ] ++ inferiors.broadwell;
|
||||||
skylake-avx512 = [ "skylake" ] ++ inferiors.skylake;
|
|
||||||
|
skylake-avx512 = lib.unique ([ "skylake" "x86-64-v4" ] ++ inferiors.skylake ++ inferiors.x86-64-v4);
|
||||||
cannonlake = [ "skylake-avx512" ] ++ inferiors.skylake-avx512;
|
cannonlake = [ "skylake-avx512" ] ++ inferiors.skylake-avx512;
|
||||||
icelake-client = [ "cannonlake" ] ++ inferiors.cannonlake;
|
icelake-client = [ "cannonlake" ] ++ inferiors.cannonlake;
|
||||||
icelake-server = [ "icelake-client" ] ++ inferiors.icelake-client;
|
icelake-server = [ "icelake-client" ] ++ inferiors.icelake-client;
|
||||||
cascadelake = [ "skylake-avx512" ] ++ inferiors.cannonlake;
|
cascadelake = [ "cannonlake" ] ++ inferiors.cannonlake;
|
||||||
cooperlake = [ "cascadelake" ] ++ inferiors.cascadelake;
|
cooperlake = [ "cascadelake" ] ++ inferiors.cascadelake;
|
||||||
tigerlake = [ "icelake-server" ] ++ inferiors.icelake-server;
|
tigerlake = [ "icelake-server" ] ++ inferiors.icelake-server;
|
||||||
|
|
||||||
# CX16 does not exist on alderlake, while it does on nearly all other intel CPUs
|
# CX16 does not exist on alderlake, while it does on nearly all other intel CPUs
|
||||||
alderlake = [ ];
|
alderlake = [ ];
|
||||||
|
|
||||||
|
@ -87,10 +104,10 @@ rec {
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
|
# https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
|
||||||
# https://en.wikichip.org/wiki/amd/microarchitectures/zen
|
# https://en.wikichip.org/wiki/amd/microarchitectures/zen
|
||||||
# https://en.wikichip.org/wiki/intel/microarchitectures/skylake
|
# https://en.wikichip.org/wiki/intel/microarchitectures/skylake
|
||||||
znver1 = [ "skylake" ] ++ inferiors.skylake;
|
znver1 = [ "skylake" ] ++ inferiors.skylake; # Includes haswell and x86-64-v3
|
||||||
znver2 = [ "znver1" ] ++ inferiors.znver1;
|
znver2 = [ "znver1" ] ++ inferiors.znver1;
|
||||||
znver3 = [ "znver2" ] ++ inferiors.znver2;
|
znver3 = [ "znver2" ] ++ inferiors.znver2;
|
||||||
znver4 = [ "znver3" ] ++ inferiors.znver3;
|
znver4 = lib.unique ([ "znver3" "x86-64-v4" ] ++ inferiors.znver3 ++ inferiors.x86-64-v4);
|
||||||
|
|
||||||
# other
|
# other
|
||||||
armv5te = [ ];
|
armv5te = [ ];
|
||||||
|
|
|
@ -106,7 +106,12 @@ let
|
||||||
isGccArchSupported = arch:
|
isGccArchSupported = arch:
|
||||||
if targetPlatform.isPower then false else # powerpc does not allow -march=
|
if targetPlatform.isPower then false else # powerpc does not allow -march=
|
||||||
if isGNU then
|
if isGNU then
|
||||||
{ # Intel
|
{ # Generic
|
||||||
|
x86-64-v2 = versionAtLeast ccVersion "11.0";
|
||||||
|
x86-64-v3 = versionAtLeast ccVersion "11.0";
|
||||||
|
x86-64-v4 = versionAtLeast ccVersion "11.0";
|
||||||
|
|
||||||
|
# Intel
|
||||||
skylake = versionAtLeast ccVersion "6.0";
|
skylake = versionAtLeast ccVersion "6.0";
|
||||||
skylake-avx512 = versionAtLeast ccVersion "6.0";
|
skylake-avx512 = versionAtLeast ccVersion "6.0";
|
||||||
cannonlake = versionAtLeast ccVersion "8.0";
|
cannonlake = versionAtLeast ccVersion "8.0";
|
||||||
|
@ -117,6 +122,7 @@ let
|
||||||
tigerlake = versionAtLeast ccVersion "10.0";
|
tigerlake = versionAtLeast ccVersion "10.0";
|
||||||
knm = versionAtLeast ccVersion "8.0";
|
knm = versionAtLeast ccVersion "8.0";
|
||||||
alderlake = versionAtLeast ccVersion "12.0";
|
alderlake = versionAtLeast ccVersion "12.0";
|
||||||
|
|
||||||
# AMD
|
# AMD
|
||||||
znver1 = versionAtLeast ccVersion "6.0";
|
znver1 = versionAtLeast ccVersion "6.0";
|
||||||
znver2 = versionAtLeast ccVersion "9.0";
|
znver2 = versionAtLeast ccVersion "9.0";
|
||||||
|
@ -124,12 +130,18 @@ let
|
||||||
znver4 = versionAtLeast ccVersion "13.0";
|
znver4 = versionAtLeast ccVersion "13.0";
|
||||||
}.${arch} or true
|
}.${arch} or true
|
||||||
else if isClang then
|
else if isClang then
|
||||||
{ # Intel
|
{ #Generic
|
||||||
|
x86-64-v2 = versionAtLeast ccVersion "12.0";
|
||||||
|
x86-64-v3 = versionAtLeast ccVersion "12.0";
|
||||||
|
x86-64-v4 = versionAtLeast ccVersion "12.0";
|
||||||
|
|
||||||
|
# Intel
|
||||||
cannonlake = versionAtLeast ccVersion "5.0";
|
cannonlake = versionAtLeast ccVersion "5.0";
|
||||||
icelake-client = versionAtLeast ccVersion "7.0";
|
icelake-client = versionAtLeast ccVersion "7.0";
|
||||||
icelake-server = versionAtLeast ccVersion "7.0";
|
icelake-server = versionAtLeast ccVersion "7.0";
|
||||||
knm = versionAtLeast ccVersion "7.0";
|
knm = versionAtLeast ccVersion "7.0";
|
||||||
alderlake = versionAtLeast ccVersion "16.0";
|
alderlake = versionAtLeast ccVersion "16.0";
|
||||||
|
|
||||||
# AMD
|
# AMD
|
||||||
znver1 = versionAtLeast ccVersion "4.0";
|
znver1 = versionAtLeast ccVersion "4.0";
|
||||||
znver2 = versionAtLeast ccVersion "9.0";
|
znver2 = versionAtLeast ccVersion "9.0";
|
||||||
|
|
Loading…
Reference in a new issue