+int
+cpuid_get_cpusubfamily(void)
+{
+ int cpusubfamily = CPUSUBFAMILY_UNKNOWN;
+
+ if (cpuid_info()->arm_info.arm_implementor != CPU_VID_APPLE) {
+ return cpusubfamily;
+ }
+
+ switch (cpuid_info()->arm_info.arm_part) {
+ case CPU_PART_TYPHOON:
+ case CPU_PART_TWISTER:
+ case CPU_PART_HURRICANE:
+ case CPU_PART_MONSOON:
+ case CPU_PART_MISTRAL:
+ case CPU_PART_VORTEX:
+ case CPU_PART_TEMPEST:
+ case CPU_PART_LIGHTNING:
+ case CPU_PART_THUNDER:
+#ifndef RC_HIDE_XNU_FIRESTORM
+ case CPU_PART_FIRESTORM:
+ case CPU_PART_ICESTORM:
+#endif
+ cpusubfamily = CPUSUBFAMILY_ARM_HP;
+ break;
+ case CPU_PART_TYPHOON_CAPRI:
+ case CPU_PART_TWISTER_ELBA_MALTA:
+ case CPU_PART_HURRICANE_MYST:
+ case CPU_PART_VORTEX_ARUBA:
+ case CPU_PART_TEMPEST_ARUBA:
+#ifndef RC_HIDE_XNU_FIRESTORM
+ case CPU_PART_FIRESTORM_TONGA:
+ case CPU_PART_ICESTORM_TONGA:
+#endif
+ cpusubfamily = CPUSUBFAMILY_ARM_HG;
+ break;
+ case CPU_PART_TEMPEST_M9:
+#ifndef RC_HIDE_XNU_FIRESTORM
+ case CPU_PART_THUNDER_M10:
+#endif
+ cpusubfamily = CPUSUBFAMILY_ARM_M;
+ break;
+ default:
+ cpusubfamily = CPUFAMILY_UNKNOWN;
+ break;
+ }
+
+ return cpusubfamily;
+}
+