@@ -166,9 +166,11 @@ enum class CPU : uint32_t {
166
166
apple_a14,
167
167
apple_a15,
168
168
apple_a16,
169
+ apple_a17,
169
170
apple_m1,
170
171
apple_m2,
171
172
apple_m3,
173
+ apple_m4,
172
174
apple_s4,
173
175
apple_s5,
174
176
@@ -355,9 +357,11 @@ constexpr auto apple_a13 = armv8_4a_crypto | get_feature_masks(fp16fml, fullfp16
355
357
constexpr auto apple_a14 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3);
356
358
constexpr auto apple_a15 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3, i8mm, bf16 );
357
359
constexpr auto apple_a16 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3, i8mm, bf16 );
360
+ constexpr auto apple_a17 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3, i8mm, bf16 );
358
361
constexpr auto apple_m1 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3);
359
362
constexpr auto apple_m2 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3, i8mm, bf16 );
360
363
constexpr auto apple_m3 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3, i8mm, bf16 );
364
+ constexpr auto apple_m4 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3, i8mm, bf16 );
361
365
// Features based on https://github.com/llvm/llvm-project/blob/82507f1798768280cf5d5aab95caaafbc7fe6f47/llvm/include/llvm/Support/AArch64TargetParser.def
362
366
// and sysctl -a hw.optional
363
367
constexpr auto apple_s4 = apple_a12;
@@ -441,9 +445,11 @@ static constexpr CPUSpec<CPU, feature_sz> cpus[] = {
441
445
{" apple-a14" , CPU::apple_a14, CPU::apple_a13, 120000 , Feature::apple_a14},
442
446
{" apple-a15" , CPU::apple_a15, CPU::apple_a14, 160000 , Feature::apple_a15},
443
447
{" apple-a16" , CPU::apple_a16, CPU::apple_a14, 160000 , Feature::apple_a16},
448
+ {" apple-a17" , CPU::apple_a17, CPU::apple_a16, 190000 , Feature::apple_a17},
444
449
{" apple-m1" , CPU::apple_m1, CPU::apple_a14, 130000 , Feature::apple_m1},
445
450
{" apple-m2" , CPU::apple_m2, CPU::apple_m1, 160000 , Feature::apple_m2},
446
451
{" apple-m3" , CPU::apple_m3, CPU::apple_m2, 180000 , Feature::apple_m3},
452
+ {" apple-m4" , CPU::apple_m4, CPU::apple_m3, 190000 , Feature::apple_m4},
447
453
{" apple-s4" , CPU::apple_s4, CPU::generic, 100000 , Feature::apple_s4},
448
454
{" apple-s5" , CPU::apple_s5, CPU::generic, 100000 , Feature::apple_s5},
449
455
{" thunderx3t110" , CPU::marvell_thunderx3t110, CPU::cavium_thunderx2t99, 110000 ,
@@ -722,6 +728,8 @@ static NOINLINE std::pair<uint32_t,FeatureList<feature_sz>> _get_host_cpu()
722
728
return std::make_pair ((uint32_t )CPU::apple_m2, Feature::apple_m2);
723
729
else if (cpu_name.find (" M3" ) != StringRef ::npos)
724
730
return std::make_pair ((uint32_t )CPU::apple_m3, Feature::apple_m3);
731
+ else if (cpu_name.find (" M4" ) != StringRef ::npos)
732
+ return std::make_pair ((uint32_t )CPU::apple_m4, Feature::apple_m4);
725
733
else
726
734
return std::make_pair ((uint32_t )CPU::apple_m1, Feature::apple_m1);
727
735
}
@@ -1042,7 +1050,10 @@ static CPU get_cpu_name(CPUID cpuid)
1042
1050
default : return CPU::generic;
1043
1051
}
1044
1052
case 0x61 : // 'a': Apple
1045
- // https://opensource.apple.com/source/xnu/xnu-7195.141.2/osfmk/arm/cpuid.h.auto.html
1053
+ // Data here is partially based on these sources:
1054
+ // https://github.com/apple-oss-distributions/xnu/blob/main/osfmk/arm/cpuid.h
1055
+ // https://asahilinux.org/docs/hw/soc/soc-codenames/#socs
1056
+ // https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/AArch64/AArch64Processors.td
1046
1057
switch (cpuid.part ) {
1047
1058
case 0x0 : // Swift
1048
1059
return CPU::apple_swift;
@@ -1067,31 +1078,57 @@ static CPU get_cpu_name(CPUID cpuid)
1067
1078
return CPU::apple_a12;
1068
1079
case 0xF : // Tempest M9
1069
1080
return CPU::apple_s4;
1070
- case 0x12 : // Lightning
1071
- case 0x13 : // Thunder
1081
+ case 0x12 : // H12 Cebu p-Core " Lightning"
1082
+ case 0x13 : // H12 Cebu e-Core " Thunder"
1072
1083
return CPU::apple_a13;
1073
- case 0x20 : // Icestorm
1074
- case 0x21 : // Firestorm
1084
+ case 0x20 : // H13 Sicily e-Core " Icestorm"
1085
+ case 0x21 : // H13 Sicily p-Core " Firestorm"
1075
1086
return CPU::apple_a14;
1076
- case 0x22 : // Icestorm m1
1077
- case 0x23 : // Firestorm m1
1078
- case 0x24 :
1079
- case 0x25 : // From https://github.com/AsahiLinux/m1n1/blob/3b9a71422e45209ef57c563e418f877bf54358be/src/chickens.c#L9
1080
- case 0x28 :
1081
- case 0x29 :
1087
+ case 0x22 : // H13G Tonga e-Core " Icestorm" used in Apple M1
1088
+ case 0x23 : // H13G Tonga p-Core " Firestorm" used in Apple M1
1089
+ case 0x24 : // H13J Jade Chop e-Core "Icestorm" used in Apple M1 Pro
1090
+ case 0x25 : // H13J Jade Chop p-Core "Firestorm" used in Apple M1 Pro
1091
+ case 0x28 : // H13J Jade Die e-Core "Icestorm" used in Apple M1 Max / Ultra
1092
+ case 0x29 : // H13J Jade Die p-Core "Firestorm" used in Apple M1 Max / Ultra
1082
1093
return CPU::apple_m1;
1083
- case 0x30 : // Blizzard m2
1084
- case 0x31 : // Avalanche m2
1085
- case 0x32 :
1086
- case 0x33 :
1087
- case 0x34 :
1088
- case 0x35 :
1089
- case 0x38 :
1090
- case 0x39 :
1094
+ case 0x30 : // H14 Ellis e-Core "Blizzard" used in Apple A15
1095
+ case 0x31 : // H14 Ellis p-Core "Avalanche" used in Apple A15
1096
+ return CPU::apple_a15;
1097
+ case 0x32 : // H14G Staten e-Core "Blizzard" used in Apple M2
1098
+ case 0x33 : // H14G Staten p-Core "Avalanche" used in Apple M2
1099
+ case 0x34 : // H14S Rhodes Chop e-Core "Blizzard" used in Apple M2 Pro
1100
+ case 0x35 : // H14S Rhodes Chop p-Core "Avalanche" used in Apple M2 Pro
1101
+ case 0x38 : // H14C Rhodes Die e-Core "Blizzard" used in Apple M2 Max / Ultra
1102
+ case 0x39 : // H14C Rhodes Die p-Core "Avalanche" used in Apple M2 Max / Ultra
1091
1103
return CPU::apple_m2;
1092
- case 0x49 : // Everest m3
1093
- case 0x48 : // Sawtooth m3
1104
+ case 0x40 : // H15 Crete e-Core "Sawtooth" used in Apple A16
1105
+ case 0x41 : // H15 Crete p-Core "Everest" used in Apple A16
1106
+ return CPU::apple_a16;
1107
+ case 0x42 : // H15 Ibiza e-Core "Sawtooth" used in Apple M3
1108
+ case 0x43 : // H15 Ibiza p-Core "Everest" used in Apple M3
1109
+ case 0x44 : // H15 Lobos e-Core "Sawtooth" used in Apple M3 Pro
1110
+ case 0x45 : // H15 Lobos p-Core "Everest" used in Apple M3 Pro
1111
+ case 0x49 : // H15 Palma e-Core "Sawtooth" used in Apple M3 Max
1112
+ case 0x48 : // H15 Palma p-Core "Everest" used in Apple M3 Max
1094
1113
return CPU::apple_m3;
1114
+ // case 0x46: // M11 e-Core "Sawtooth" used in Apple S9
1115
+ // case 0x47: does not exist
1116
+ // return CPU::apple_s9;
1117
+ case 0x50 : // H15 Coll e-Core "Sawtooth" used in Apple A17 Pro
1118
+ case 0x51 : // H15 Coll p-Core "Everest" used in Apple A17 Pro
1119
+ return CPU::apple_a17;
1120
+ case 0x52 : // H16G Donan e-Core used in Apple M4
1121
+ case 0x53 : // H16H Donan p-Core used in Apple M4
1122
+ case 0x54 : // H16S Brava S e-Core used in Apple M4 Pro
1123
+ case 0x55 : // H16S Brava S p-Core used in Apple M4 Pro
1124
+ case 0x58 : // H16C Brava C e-Core used in Apple M4 Max
1125
+ case 0x59 : // H16C Brava C p-Core used in Apple M4 Max
1126
+ return CPU::apple_m4;
1127
+ // case 0x60: // H17P Tahiti e-Core used in Apple A18 Pro
1128
+ // case 0x61: // H17P Tahiti p-Core used in Apple A18 Pro
1129
+ // case 0x6a: // H17A Tupai e-Core used in Apple A18
1130
+ // case 0x6b: // H17A Tupai p-Core used in Apple A18
1131
+ // return CPU::apple_a18;
1095
1132
default : return CPU::generic;
1096
1133
}
1097
1134
case 0x68 : // 'h': Huaxintong Semiconductor
0 commit comments