@@ -1509,6 +1509,18 @@ StringRef sys::getHostCPUName() {
1509
1509
return getCPUNameFromS390Model (Id, HaveVectorSupport);
1510
1510
}
1511
1511
#elif defined(__APPLE__) && (defined(__arm__) || defined(__aarch64__))
1512
+ // Copied from <mach/machine.h> in the macOS SDK.
1513
+ //
1514
+ // Also available here, though usually not as up-to-date:
1515
+ // https://github.com/apple-oss-distributions/xnu/blob/xnu-11215.41.3/osfmk/mach/machine.h#L403-L452.
1516
+ #define CPUFAMILY_UNKNOWN 0
1517
+ #define CPUFAMILY_ARM_9 0xe73283ae
1518
+ #define CPUFAMILY_ARM_11 0x8ff620d8
1519
+ #define CPUFAMILY_ARM_XSCALE 0x53b005f5
1520
+ #define CPUFAMILY_ARM_12 0xbd1b0ae9
1521
+ #define CPUFAMILY_ARM_13 0x0cc90e64
1522
+ #define CPUFAMILY_ARM_14 0x96077ef1
1523
+ #define CPUFAMILY_ARM_15 0xa8511bca
1512
1524
#define CPUFAMILY_ARM_SWIFT 0x1e2d6381
1513
1525
#define CPUFAMILY_ARM_CYCLONE 0x37a09642
1514
1526
#define CPUFAMILY_ARM_TYPHOON 0x2c91a47e
@@ -1520,13 +1532,46 @@ StringRef sys::getHostCPUName() {
1520
1532
#define CPUFAMILY_ARM_FIRESTORM_ICESTORM 0x1b588bb3
1521
1533
#define CPUFAMILY_ARM_BLIZZARD_AVALANCHE 0xda33d83d
1522
1534
#define CPUFAMILY_ARM_EVEREST_SAWTOOTH 0x8765edea
1535
+ #define CPUFAMILY_ARM_IBIZA 0xfa33415e
1536
+ #define CPUFAMILY_ARM_PALMA 0x72015832
1537
+ #define CPUFAMILY_ARM_COLL 0x2876f5b5
1538
+ #define CPUFAMILY_ARM_LOBOS 0x5f4dea93
1539
+ #define CPUFAMILY_ARM_DONAN 0x6f5129ac
1540
+ #define CPUFAMILY_ARM_BRAVA 0x17d5b93a
1541
+ #define CPUFAMILY_ARM_TAHITI 0x75d4acb9
1542
+ #define CPUFAMILY_ARM_TUPAI 0x204526d0
1523
1543
1524
1544
StringRef sys::getHostCPUName () {
1525
1545
uint32_t Family;
1526
1546
size_t Length = sizeof (Family);
1527
1547
sysctlbyname (" hw.cpufamily" , &Family, &Length, NULL , 0 );
1528
1548
1549
+ // This is found by testing on actual hardware, and by looking at:
1550
+ // https://github.com/apple-oss-distributions/xnu/blob/xnu-11215.41.3/osfmk/arm/cpuid.c#L109-L231.
1551
+ //
1552
+ // Another great resource is
1553
+ // https://github.com/AsahiLinux/docs/wiki/Codenames.
1554
+ //
1555
+ // NOTE: We choose to return `apple-mX` instead of `apple-aX`, since the M1,
1556
+ // M2, M3 etc. aliases are more widely known to users than A14, A15, A16 etc.
1557
+ // (and this code is basically only used on host macOS anyways).
1529
1558
switch (Family) {
1559
+ case CPUFAMILY_UNKNOWN:
1560
+ return " generic" ;
1561
+ case CPUFAMILY_ARM_9:
1562
+ return " arm920t" ; // or arm926ej-s
1563
+ case CPUFAMILY_ARM_11:
1564
+ return " arm1136jf-s" ;
1565
+ case CPUFAMILY_ARM_XSCALE:
1566
+ return " xscale" ;
1567
+ case CPUFAMILY_ARM_12: // Seems unused by the kernel
1568
+ return " generic" ;
1569
+ case CPUFAMILY_ARM_13:
1570
+ return " cortex-a8" ;
1571
+ case CPUFAMILY_ARM_14:
1572
+ return " cortex-a9" ;
1573
+ case CPUFAMILY_ARM_15:
1574
+ return " cortex-a7" ;
1530
1575
case CPUFAMILY_ARM_SWIFT:
1531
1576
return " swift" ;
1532
1577
case CPUFAMILY_ARM_CYCLONE:
@@ -1543,15 +1588,25 @@ StringRef sys::getHostCPUName() {
1543
1588
return " apple-a12" ;
1544
1589
case CPUFAMILY_ARM_LIGHTNING_THUNDER:
1545
1590
return " apple-a13" ;
1546
- case CPUFAMILY_ARM_FIRESTORM_ICESTORM:
1591
+ case CPUFAMILY_ARM_FIRESTORM_ICESTORM: // A14 / M1
1547
1592
return " apple-m1" ;
1548
- case CPUFAMILY_ARM_BLIZZARD_AVALANCHE:
1593
+ case CPUFAMILY_ARM_BLIZZARD_AVALANCHE: // A15 / M2
1549
1594
return " apple-m2" ;
1550
- case CPUFAMILY_ARM_EVEREST_SAWTOOTH:
1595
+ case CPUFAMILY_ARM_EVEREST_SAWTOOTH: // A16
1596
+ case CPUFAMILY_ARM_IBIZA: // M3
1597
+ case CPUFAMILY_ARM_PALMA: // M3 Max
1598
+ case CPUFAMILY_ARM_LOBOS: // M3 Pro
1551
1599
return " apple-m3" ;
1600
+ case CPUFAMILY_ARM_COLL: // A17 Pro
1601
+ return " apple-a17" ;
1602
+ case CPUFAMILY_ARM_DONAN: // M4
1603
+ case CPUFAMILY_ARM_BRAVA: // M4 Max
1604
+ case CPUFAMILY_ARM_TAHITI: // A18 Pro
1605
+ case CPUFAMILY_ARM_TUPAI: // A18
1606
+ return " apple-m4" ;
1552
1607
default :
1553
1608
// Default to the newest CPU we know about.
1554
- return " apple-m3 " ;
1609
+ return " apple-m4 " ;
1555
1610
}
1556
1611
}
1557
1612
#elif defined(_AIX)
0 commit comments