@@ -166,9 +166,11 @@ enum class CPU : uint32_t {
166166    apple_a14,
167167    apple_a15,
168168    apple_a16,
169+     apple_a17,
169170    apple_m1,
170171    apple_m2,
171172    apple_m3,
173+     apple_m4,
172174    apple_s4,
173175    apple_s5,
174176
@@ -355,9 +357,11 @@ constexpr auto apple_a13 = armv8_4a_crypto | get_feature_masks(fp16fml, fullfp16
355357constexpr  auto  apple_a14 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3);
356358constexpr  auto  apple_a15 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3, i8mm, bf16 );
357359constexpr  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 );
358361constexpr  auto  apple_m1 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3);
359362constexpr  auto  apple_m2 = armv8_5a_crypto | get_feature_masks(dotprod,fp16fml, fullfp16, sha3, i8mm, bf16 );
360363constexpr  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 );
361365//  Features based on https://github.com/llvm/llvm-project/blob/82507f1798768280cf5d5aab95caaafbc7fe6f47/llvm/include/llvm/Support/AArch64TargetParser.def
362366//  and sysctl -a hw.optional
363367constexpr  auto  apple_s4 = apple_a12;
@@ -441,9 +445,11 @@ static constexpr CPUSpec<CPU, feature_sz> cpus[] = {
441445    {" apple-a14" 120000 , Feature::apple_a14},
442446    {" apple-a15" 160000 , Feature::apple_a15},
443447    {" apple-a16" 160000 , Feature::apple_a16},
448+     {" apple-a17" 190000 , Feature::apple_a17},
444449    {" apple-m1" 130000 , Feature::apple_m1},
445450    {" apple-m2" 160000 , Feature::apple_m2},
446451    {" apple-m3" 180000 , Feature::apple_m3},
452+     {" apple-m4" 190000 , Feature::apple_m4},
447453    {" apple-s4" 100000 , Feature::apple_s4},
448454    {" apple-s5" 100000 , Feature::apple_s5},
449455    {" thunderx3t110" 110000 ,
@@ -722,6 +728,8 @@ static NOINLINE std::pair<uint32_t,FeatureList<feature_sz>> _get_host_cpu()
722728        return  std::make_pair ((uint32_t )CPU::apple_m2, Feature::apple_m2);
723729    else  if  (cpu_name.find (" M3" 
724730        return  std::make_pair ((uint32_t )CPU::apple_m3, Feature::apple_m3);
731+     else  if  (cpu_name.find (" M4" 
732+         return  std::make_pair ((uint32_t )CPU::apple_m4, Feature::apple_m4);
725733    else 
726734        return  std::make_pair ((uint32_t )CPU::apple_m1, Feature::apple_m1);
727735}
@@ -1042,7 +1050,10 @@ static CPU get_cpu_name(CPUID cpuid)
10421050        default : return  CPU::generic;
10431051        }
10441052    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
10461057        switch  (cpuid.part ) {
10471058        case  0x0 : //  Swift
10481059            return  CPU::apple_swift;
@@ -1067,31 +1078,57 @@ static CPU get_cpu_name(CPUID cpuid)
10671078            return  CPU::apple_a12;
10681079        case  0xF : //  Tempest M9
10691080            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" 
10721083            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" 
10751086            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 
10821093            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
10911103            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
10941113            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;
10951132        default : return  CPU::generic;
10961133        }
10971134    case  0x68 : //  'h': Huaxintong Semiconductor
0 commit comments