git.iko.soy/typeable/nixpkgs
on master help sign in
Merge pull request #107507 from LibreCybernetics/add-zen-info

lib.systems: update processor architecture info

commitfb875dcf6fbadafb41c64d9f4e1ef056f127bcb3 authorJohn Ericson <git@JohnEricson.me> dateThu 24 Dec 2020, 10:23 (6 years ago) parenta24ea362a9ac17
2 files changed+41−7
lib/systems/architectures.nix+37−7 pkgs/build-support/cc-wrapper/default.nix+4
lib/systems/architectures.nix+37−7
@@ -12,6 +12,12 @@ rec {
1212 broadwell = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "fma" ];
1313 skylake = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "fma" ];
1414 skylake-avx512 = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "avx512" "fma" ];
15+ cannonlake = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "avx512" "fma" ];
16+ icelake-client = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "avx512" "fma" ];
17+ icelake-server = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "avx512" "fma" ];
18+ cascadelake = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "avx512" "fma" ];
19+ cooperlake = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "avx512" "fma" ];
20+ tigerlake = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" "avx2" "avx512" "fma" ];
1521 # x86_64 AMD
1622 btver1 = [ "sse3" "ssse3" "sse4_1" "sse4_2" ];
1723 btver2 = [ "sse3" "ssse3" "sse4_1" "sse4_2" "aes" "avx" ];
@@ -21,6 +27,7 @@ rec {
2127 bdver4 = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx" "avx2" "fma" "fma4" ];
2228 znver1 = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx" "avx2" "fma" ];
2329 znver2 = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx" "avx2" "fma" ];
30+ znver3 = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx" "avx2" "fma" ];
2431 # other
2532 armv5te = [ ];
2633 armv6 = [ ];
@@ -41,15 +48,38 @@ rec {
4148 broadwell = [ "haswell" ] ++ inferiors.haswell;
4249 skylake = [ "broadwell" ] ++ inferiors.broadwell;
4350 skylake-avx512 = [ "skylake" ] ++ inferiors.skylake;
51+
4452 # x86_64 AMD
53+ # TODO: fill this (need testing)
4554 btver1 = [ ];
46− btver2 = [ ]; # TODO: fill this (need testing)
47− bdver1 = [ ]; # TODO: fill this (need testing)
48− bdver2 = [ ]; # TODO: fill this (need testing)
49− bdver3 = [ ]; # TODO: fill this (need testing)
50− bdver4 = [ ]; # TODO: fill this (need testing)
51− znver1 = [ ]; # TODO: fill this (need testing)
52− znver2 = [ ]; # TODO: fill this (need testing)
55+ btver2 = [ ];
56+ bdver1 = [ ];
57+ bdver2 = [ ];
58+ bdver3 = [ ];
59+ bdver4 = [ ];
60+ # Regarding `skylake` as inferior of `znver1`, there are reports of
61+ # successful usage by Gentoo users and Phoronix benchmarking of different
62+ # `-march` targets.
63+ #
64+ # The GCC documentation on extensions used and wikichip documentation
65+ # regarding supperted extensions on znver1 and skylake was used to create
66+ # this partial order.
67+ #
68+ # Note:
69+ #
70+ # - The succesors of `skylake` (`cannonlake`, `icelake`, etc) use `avx512`
71+ # which no current AMD Zen michroarch support.
72+ # - `znver1` uses `ABM`, `CLZERO`, `CX16`, `MWAITX`, and `SSE4A` which no
73+ # current Intel microarch support.
74+ #
75+ # https://www.phoronix.com/scan.php?page=article&item=amd-znver3-gcc11&num=1
76+ # https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
77+ # https://en.wikichip.org/wiki/amd/microarchitectures/zen
78+ # https://en.wikichip.org/wiki/intel/microarchitectures/skylake
79+ znver1 = [ "skylake" ] ++ inferiors.skylake;
80+ znver2 = [ "znver1" ] ++ inferiors.znver1;
81+ znver3 = [ "znver2" ] ++ inferiors.znver2;
82+
5383 # other
5484 armv5te = [ ];
5585 armv6 = [ ];
pkgs/build-support/cc-wrapper/default.nix+4
@@ -76,10 +76,14 @@ let
7676 cannonlake = versionAtLeast ccVersion "8.0";
7777 icelake-client = versionAtLeast ccVersion "8.0";
7878 icelake-server = versionAtLeast ccVersion "8.0";
79+ cascadelake = versionAtLeast ccVersion "9.0";
80+ cooperlake = versionAtLeast ccVersion "10.0";
81+ tigerlake = versionAtLeast ccVersion "10.0";
7982 knm = versionAtLeast ccVersion "8.0";
8083 # AMD
8184 znver1 = versionAtLeast ccVersion "6.0";
8285 znver2 = versionAtLeast ccVersion "9.0";
86+ znver3 = versionAtLeast ccVersion "11.0";
8387 }.${arch} or true
8488 else if isClang then
8589 { # Intel