Lines Matching +full:loongson +full:- +full:1 +full:c

1 //===-- Host.cpp - Implement OS Host Detection ------------------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
11 //===----------------------------------------------------------------------===//
18 #include "llvm/Config/llvm-config.h"
25 // Include the platform-specific parts of this class.
54 #define DEBUG_TYPE "host-detection"
56 //===----------------------------------------------------------------------===//
60 //===----------------------------------------------------------------------===//
78 // and so we must use an operating-system interface to determine the current in getHostCPUNameForPowerPC()
98 if (CIP < CPUInfoEnd && *CIP == 'c') { in getHostCPUNameForPowerPC()
117 CPULen = CIP - CPUStart; in getHostCPUNameForPowerPC()
184 // which is undeterministic and wrong. Always return cortex-a53 for these SoC. in getHostCPUNameForARM()
186 return "cortex-a53"; in getHostCPUNameForARM()
193 // and is used in programs like sys-utils in getHostCPUNameForARM()
195 .Case("0x926", "arm926ej-s") in getHostCPUNameForARM()
197 .Case("0xb36", "arm1136j-s") in getHostCPUNameForARM()
198 .Case("0xb56", "arm1156t2-s") in getHostCPUNameForARM()
199 .Case("0xb76", "arm1176jz-s") in getHostCPUNameForARM()
200 .Case("0xc05", "cortex-a5") in getHostCPUNameForARM()
201 .Case("0xc07", "cortex-a7") in getHostCPUNameForARM()
202 .Case("0xc08", "cortex-a8") in getHostCPUNameForARM()
203 .Case("0xc09", "cortex-a9") in getHostCPUNameForARM()
204 .Case("0xc0f", "cortex-a15") in getHostCPUNameForARM()
205 .Case("0xc0e", "cortex-a17") in getHostCPUNameForARM()
206 .Case("0xc20", "cortex-m0") in getHostCPUNameForARM()
207 .Case("0xc23", "cortex-m3") in getHostCPUNameForARM()
208 .Case("0xc24", "cortex-m4") in getHostCPUNameForARM()
209 .Case("0xc27", "cortex-m7") in getHostCPUNameForARM()
210 .Case("0xd20", "cortex-m23") in getHostCPUNameForARM()
211 .Case("0xd21", "cortex-m33") in getHostCPUNameForARM()
212 .Case("0xd24", "cortex-m52") in getHostCPUNameForARM()
213 .Case("0xd22", "cortex-m55") in getHostCPUNameForARM()
214 .Case("0xd23", "cortex-m85") in getHostCPUNameForARM()
215 .Case("0xc18", "cortex-r8") in getHostCPUNameForARM()
216 .Case("0xd13", "cortex-r52") in getHostCPUNameForARM()
217 .Case("0xd16", "cortex-r52plus") in getHostCPUNameForARM()
218 .Case("0xd15", "cortex-r82") in getHostCPUNameForARM()
219 .Case("0xd14", "cortex-r82ae") in getHostCPUNameForARM()
220 .Case("0xd02", "cortex-a34") in getHostCPUNameForARM()
221 .Case("0xd04", "cortex-a35") in getHostCPUNameForARM()
222 .Case("0xd03", "cortex-a53") in getHostCPUNameForARM()
223 .Case("0xd05", "cortex-a55") in getHostCPUNameForARM()
224 .Case("0xd46", "cortex-a510") in getHostCPUNameForARM()
225 .Case("0xd80", "cortex-a520") in getHostCPUNameForARM()
226 .Case("0xd88", "cortex-a520ae") in getHostCPUNameForARM()
227 .Case("0xd07", "cortex-a57") in getHostCPUNameForARM()
228 .Case("0xd06", "cortex-a65") in getHostCPUNameForARM()
229 .Case("0xd43", "cortex-a65ae") in getHostCPUNameForARM()
230 .Case("0xd08", "cortex-a72") in getHostCPUNameForARM()
231 .Case("0xd09", "cortex-a73") in getHostCPUNameForARM()
232 .Case("0xd0a", "cortex-a75") in getHostCPUNameForARM()
233 .Case("0xd0b", "cortex-a76") in getHostCPUNameForARM()
234 .Case("0xd0e", "cortex-a76ae") in getHostCPUNameForARM()
235 .Case("0xd0d", "cortex-a77") in getHostCPUNameForARM()
236 .Case("0xd41", "cortex-a78") in getHostCPUNameForARM()
237 .Case("0xd42", "cortex-a78ae") in getHostCPUNameForARM()
238 .Case("0xd4b", "cortex-a78c") in getHostCPUNameForARM()
239 .Case("0xd47", "cortex-a710") in getHostCPUNameForARM()
240 .Case("0xd4d", "cortex-a715") in getHostCPUNameForARM()
241 .Case("0xd81", "cortex-a720") in getHostCPUNameForARM()
242 .Case("0xd89", "cortex-a720ae") in getHostCPUNameForARM()
243 .Case("0xd87", "cortex-a725") in getHostCPUNameForARM()
244 .Case("0xd44", "cortex-x1") in getHostCPUNameForARM()
245 .Case("0xd4c", "cortex-x1c") in getHostCPUNameForARM()
246 .Case("0xd48", "cortex-x2") in getHostCPUNameForARM()
247 .Case("0xd4e", "cortex-x3") in getHostCPUNameForARM()
248 .Case("0xd82", "cortex-x4") in getHostCPUNameForARM()
249 .Case("0xd85", "cortex-x925") in getHostCPUNameForARM()
250 .Case("0xd4a", "neoverse-e1") in getHostCPUNameForARM()
251 .Case("0xd0c", "neoverse-n1") in getHostCPUNameForARM()
252 .Case("0xd49", "neoverse-n2") in getHostCPUNameForARM()
253 .Case("0xd8e", "neoverse-n3") in getHostCPUNameForARM()
254 .Case("0xd40", "neoverse-v1") in getHostCPUNameForARM()
255 .Case("0xd4f", "neoverse-v2") in getHostCPUNameForARM()
256 .Case("0xd84", "neoverse-v3") in getHostCPUNameForARM()
257 .Case("0xd83", "neoverse-v3ae") in getHostCPUNameForARM()
301 .Case("0x800", "cortex-a73") // Kryo 2xx Gold in getHostCPUNameForARM()
302 .Case("0x801", "cortex-a73") // Kryo 2xx Silver in getHostCPUNameForARM()
303 .Case("0x802", "cortex-a75") // Kryo 3xx Gold in getHostCPUNameForARM()
304 .Case("0x803", "cortex-a75") // Kryo 3xx Silver in getHostCPUNameForARM()
305 .Case("0x804", "cortex-a76") // Kryo 4xx Gold in getHostCPUNameForARM()
306 .Case("0x805", "cortex-a76") // Kryo 4xx/5xx Silver in getHostCPUNameForARM()
309 .Case("0x001", "oryon-1") in getHostCPUNameForARM()
316 // Look for the CPU variant line, whose value is a 1 digit hexadecimal in getHostCPUNameForARM()
334 return "exynos-m3"; in getHostCPUNameForARM()
336 return "exynos-m4"; in getHostCPUNameForARM()
343 .Case("0xd49", "neoverse-n2") in getHostCPUNameForARM()
365 case 2094: // z9-109 not supported by LLVM in getCPUNameFromS390Model()
408 Lines[I].drop_front(Pos + 1).split(CPUFeatures, ' '); in getHostCPUNameForS390x()
427 Pos += sizeof("machine = ") - 1; in getHostCPUNameForS390x()
454 .Case("sifive,u74-mc", "sifive-u74") in getHostCPUNameForRISCV()
455 .Case("sifive,bullet0", "sifive-u74") in getHostCPUNameForRISCV()
466 /* BPF_MOV64_IMM(BPF_REG_2, 1) */ in getHostCPUNameForBPF()
468 /* BPF_JMP32_REG(BPF_JLT, BPF_REG_0, BPF_REG_2, 1) */ in getHostCPUNameForBPF()
470 /* BPF_MOV64_IMM(BPF_REG_0, 1) */ in getHostCPUNameForBPF()
478 /* BPF_MOV64_IMM(BPF_REG_2, 1) */ in getHostCPUNameForBPF()
480 /* BPF_JMP_REG(BPF_JLT, BPF_REG_0, BPF_REG_2, 1) */ in getHostCPUNameForBPF()
482 /* BPF_MOV64_IMM(BPF_REG_0, 1) */ in getHostCPUNameForBPF()
498 attr.prog_type = 1; /* BPF_PROG_TYPE_SOCKET_FILTER */ in getHostCPUNameForBPF()
512 attr.prog_type = 1; /* BPF_PROG_TYPE_SOCKET_FILTER */ in getHostCPUNameForBPF()
534 // or test-suite, but are used in external projects e.g. libstdcxx
549 " je 1f\n" in isCpuIdSupported()
550 " movl $1,%0\n" in isCpuIdSupported()
551 "1:" in isCpuIdSupported()
563 /// getX86CpuIDAndInfo - Execute the specified cpuid and return the 4 values in
574 : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX) in getX86CpuIDAndInfo()
581 : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX) in getX86CpuIDAndInfo()
592 *rEBX = registers[1]; in getX86CpuIDAndInfo()
616 if (getX86CpuIDAndInfo(0, MaxLeaf, &EBX, &ECX, &EDX) || *MaxLeaf < 1) in getVendorSignature()
637 /// getX86CpuIDAndInfoEx - Execute the specified cpuid with subleaf and return
650 : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX) in getX86CpuIDAndInfoEx()
651 : "a"(value), "c"(subleaf)); in getX86CpuIDAndInfoEx()
657 : "=a"(*rEAX), "=S"(*rEBX), "=c"(*rECX), "=d"(*rEDX) in getX86CpuIDAndInfoEx()
658 : "a"(value), "c"(subleaf)); in getX86CpuIDAndInfoEx()
667 *rEBX = registers[1]; in getX86CpuIDAndInfoEx()
682 __asm__(".byte 0x0f, 0x01, 0xd0" : "=a"(*rEAX), "=d"(*rEDX) : "c"(0)); in getX86XCR0()
696 *Family = (EAX >> 8) & 0xf; // Bits 8 - 11 in detectX86FamilyModel()
697 *Model = (EAX >> 4) & 0xf; // Bits 4 - 7 in detectX86FamilyModel()
701 *Family += (EAX >> 20) & 0xff; // Bits 20 - 27 in detectX86FamilyModel()
703 *Model += ((EAX >> 16) & 0xf) << 4; // Bits 16 - 19 in detectX86FamilyModel()
707 #define testFeature(F) (Features[F / 32] & (1 << (F % 32))) != 0
725 CPU = "pentium-mmx"; in getIntelProcessorTypeAndSubtype()
735 // Pentium Dual-Core processor, Intel Xeon processor, model in getIntelProcessorTypeAndSubtype()
808 case 0xa5: // Comet Lake-H/S in getIntelProcessorTypeAndSubtype()
809 case 0xa6: // Comet Lake-U in getIntelProcessorTypeAndSubtype()
832 CPU = "skylake-avx512"; in getIntelProcessorTypeAndSubtype()
847 CPU = "icelake-client"; in getIntelProcessorTypeAndSubtype()
888 CPU = "arrowlake-s"; in getIntelProcessorTypeAndSubtype()
909 CPU = "graniterapids-d"; in getIntelProcessorTypeAndSubtype()
917 CPU = "icelake-server"; in getIntelProcessorTypeAndSubtype()
957 CPU = "goldmont-plus"; in getIntelProcessorTypeAndSubtype()
998 // They're used above to keep the code in sync with compiler-rt. in getIntelProcessorTypeAndSubtype()
1003 CPU = "icelake-client"; in getIntelProcessorTypeAndSubtype()
1011 CPU = "skylake-avx512"; in getIntelProcessorTypeAndSubtype()
1040 CPU = "pentium-m"; in getIntelProcessorTypeAndSubtype()
1089 CPU = "k6-2"; in getAMDProcessorTypeAndSubtype()
1093 CPU = "k6-3"; in getAMDProcessorTypeAndSubtype()
1102 CPU = "athlon-xp"; in getAMDProcessorTypeAndSubtype()
1109 CPU = "k8-sse3"; in getAMDProcessorTypeAndSubtype()
1139 break; // 60h-7Fh: Excavator in getAMDProcessorTypeAndSubtype()
1144 break; // 30h-3Fh: Steamroller in getAMDProcessorTypeAndSubtype()
1149 break; // 02h, 10h-1Fh: Piledriver in getAMDProcessorTypeAndSubtype()
1153 break; // 00h-0Fh: Bulldozer in getAMDProcessorTypeAndSubtype()
1168 // Family 17h Models 30h-3Fh (Starship) Zen 2 in getAMDProcessorTypeAndSubtype()
1170 // Family 17h Models 60h-67h (Renoir) Zen 2 in getAMDProcessorTypeAndSubtype()
1171 // Family 17h Models 68h-6Fh (Lucienne) Zen 2 in getAMDProcessorTypeAndSubtype()
1172 // Family 17h Models 70h-7Fh (Matisse) Zen 2 in getAMDProcessorTypeAndSubtype()
1173 // Family 17h Models 84h-87h (ProjectX) Zen 2 in getAMDProcessorTypeAndSubtype()
1174 // Family 17h Models 90h-97h (VanGogh) Zen 2 in getAMDProcessorTypeAndSubtype()
1175 // Family 17h Models 98h-9Fh (Mero) Zen 2 in getAMDProcessorTypeAndSubtype()
1176 // Family 17h Models A0h-AFh (Mendocino) Zen 2 in getAMDProcessorTypeAndSubtype()
1182 // Family 17h Models 10h-1Fh (Raven1) Zen in getAMDProcessorTypeAndSubtype()
1183 // Family 17h Models 10h-1Fh (Picasso) Zen+ in getAMDProcessorTypeAndSubtype()
1184 // Family 17h Models 20h-2Fh (Raven2 x86) Zen in getAMDProcessorTypeAndSubtype()
1195 // Family 19h Models 00h-0Fh (Genesis, Chagall) Zen 3 in getAMDProcessorTypeAndSubtype()
1196 // Family 19h Models 20h-2Fh (Vermeer) Zen 3 in getAMDProcessorTypeAndSubtype()
1197 // Family 19h Models 30h-3Fh (Badami) Zen 3 in getAMDProcessorTypeAndSubtype()
1198 // Family 19h Models 40h-4Fh (Rembrandt) Zen 3+ in getAMDProcessorTypeAndSubtype()
1199 // Family 19h Models 50h-5Fh (Cezanne) Zen 3 in getAMDProcessorTypeAndSubtype()
1206 // Family 19h Models 10h-1Fh (Stones; Storm Peak) Zen 4 in getAMDProcessorTypeAndSubtype()
1207 // Family 19h Models 60h-6Fh (Raphael) Zen 4 in getAMDProcessorTypeAndSubtype()
1208 // Family 19h Models 70h-77h (Phoenix, Hawkpoint1) Zen 4 in getAMDProcessorTypeAndSubtype()
1209 // Family 19h Models 78h-7Fh (Phoenix 2, Hawkpoint2) Zen 4 in getAMDProcessorTypeAndSubtype()
1210 // Family 19h Models A0h-AFh (Stones-Dense) Zen 4 in getAMDProcessorTypeAndSubtype()
1220 // Models 00h-0Fh (Breithorn). in getAMDProcessorTypeAndSubtype()
1221 // Models 10h-1Fh (Breithorn-Dense). in getAMDProcessorTypeAndSubtype()
1222 // Models 20h-2Fh (Strix 1). in getAMDProcessorTypeAndSubtype()
1223 // Models 30h-37h (Strix 2). in getAMDProcessorTypeAndSubtype()
1224 // Models 38h-3Fh (Strix 3). in getAMDProcessorTypeAndSubtype()
1225 // Models 40h-4Fh (Granite Ridge). in getAMDProcessorTypeAndSubtype()
1226 // Models 50h-5Fh (Weisshorn). in getAMDProcessorTypeAndSubtype()
1227 // Models 60h-6Fh (Krackan1). in getAMDProcessorTypeAndSubtype()
1228 // Models 70h-77h (Sarlak). in getAMDProcessorTypeAndSubtype()
1249 Features[F / 32] |= 1U << (F % 32); in getAvailableFeatures()
1252 if ((EDX >> 15) & 1) in getAvailableFeatures()
1254 if ((EDX >> 23) & 1) in getAvailableFeatures()
1256 if ((EDX >> 25) & 1) in getAvailableFeatures()
1258 if ((EDX >> 26) & 1) in getAvailableFeatures()
1261 if ((ECX >> 0) & 1) in getAvailableFeatures()
1263 if ((ECX >> 1) & 1) in getAvailableFeatures()
1265 if ((ECX >> 9) & 1) in getAvailableFeatures()
1267 if ((ECX >> 12) & 1) in getAvailableFeatures()
1269 if ((ECX >> 19) & 1) in getAvailableFeatures()
1271 if ((ECX >> 20) & 1) { in getAvailableFeatures()
1275 if ((ECX >> 23) & 1) in getAvailableFeatures()
1277 if ((ECX >> 25) & 1) in getAvailableFeatures()
1280 if ((ECX >> 22) & 1) in getAvailableFeatures()
1286 const unsigned AVXBits = (1 << 27) | (1 << 28); in getAvailableFeatures()
1305 if (HasLeaf7 && ((EBX >> 3) & 1)) in getAvailableFeatures()
1307 if (HasLeaf7 && ((EBX >> 5) & 1) && HasAVX) in getAvailableFeatures()
1309 if (HasLeaf7 && ((EBX >> 8) & 1)) in getAvailableFeatures()
1311 if (HasLeaf7 && ((EBX >> 16) & 1) && HasAVX512Save) { in getAvailableFeatures()
1315 if (HasLeaf7 && ((EBX >> 17) & 1) && HasAVX512Save) in getAvailableFeatures()
1317 if (HasLeaf7 && ((EBX >> 19) & 1)) in getAvailableFeatures()
1319 if (HasLeaf7 && ((EBX >> 21) & 1) && HasAVX512Save) in getAvailableFeatures()
1321 if (HasLeaf7 && ((EBX >> 23) & 1)) in getAvailableFeatures()
1323 if (HasLeaf7 && ((EBX >> 28) & 1) && HasAVX512Save) in getAvailableFeatures()
1325 if (HasLeaf7 && ((EBX >> 29) & 1)) in getAvailableFeatures()
1327 if (HasLeaf7 && ((EBX >> 30) & 1) && HasAVX512Save) in getAvailableFeatures()
1329 if (HasLeaf7 && ((EBX >> 31) & 1) && HasAVX512Save) in getAvailableFeatures()
1332 if (HasLeaf7 && ((ECX >> 1) & 1) && HasAVX512Save) in getAvailableFeatures()
1334 if (HasLeaf7 && ((ECX >> 6) & 1) && HasAVX512Save) in getAvailableFeatures()
1336 if (HasLeaf7 && ((ECX >> 8) & 1)) in getAvailableFeatures()
1338 if (HasLeaf7 && ((ECX >> 10) & 1) && HasAVX) in getAvailableFeatures()
1340 if (HasLeaf7 && ((ECX >> 11) & 1) && HasAVX512Save) in getAvailableFeatures()
1342 if (HasLeaf7 && ((ECX >> 12) & 1) && HasAVX512Save) in getAvailableFeatures()
1344 if (HasLeaf7 && ((ECX >> 14) & 1) && HasAVX512Save) in getAvailableFeatures()
1347 if (HasLeaf7 && ((EDX >> 2) & 1) && HasAVX512Save) in getAvailableFeatures()
1349 if (HasLeaf7 && ((EDX >> 3) & 1) && HasAVX512Save) in getAvailableFeatures()
1351 if (HasLeaf7 && ((EDX >> 8) & 1) && HasAVX512Save) in getAvailableFeatures()
1357 HasLeaf7 && EAX >= 1 && in getAvailableFeatures()
1359 if (HasLeaf7Subleaf1 && ((EAX >> 5) & 1) && HasAVX512Save) in getAvailableFeatures()
1367 if (HasExtLeaf1 && ((ECX >> 6) & 1)) in getAvailableFeatures()
1369 if (HasExtLeaf1 && ((ECX >> 11) & 1)) in getAvailableFeatures()
1371 if (HasExtLeaf1 && ((ECX >> 16) & 1)) in getAvailableFeatures()
1374 if (HasExtLeaf1 && ((EDX >> 29) & 1)) in getAvailableFeatures()
1393 // same or similar to compiler-rt. in getHostCPUName()
1460 StringRef Content = P ? P->getBuffer() : ""; in getHostCPUName()
1466 StringRef Content = P ? P->getBuffer() : ""; in getHostCPUName()
1472 StringRef Content = P ? P->getBuffer() : ""; in getHostCPUName()
1479 // It is stored as 31 bit pointer and will be zero-extended to 64 bit. in getHostCPUName()
1481 // Since its stored as a 31-bit pointer, get the 4 bytes from the start in getHostCPUName()
1487 // The model number is located in the CVT prefix at offset -6 and stored as in getHostCPUName()
1489 uint16_t Id = *(uint16_t *)&CVT[-6]; in getHostCPUName()
1520 return "apple-a7"; in getHostCPUName()
1522 return "apple-a8"; in getHostCPUName()
1524 return "apple-a9"; in getHostCPUName()
1526 return "apple-a10"; in getHostCPUName()
1528 return "apple-a11"; in getHostCPUName()
1530 return "apple-a12"; in getHostCPUName()
1532 return "apple-a13"; in getHostCPUName()
1534 return "apple-m1"; in getHostCPUName()
1536 return "apple-m2"; in getHostCPUName()
1538 return "apple-m3"; in getHostCPUName()
1541 return "apple-m3"; in getHostCPUName()
1589 case 0xc000: // Loongson 64bit, 4-issue in getHostCPUName()
1591 case 0xd000: // Loongson 64bit, 6-issue in getHostCPUName()
1603 StringRef Content = P ? P->getBuffer() : ""; in getHostCPUName()
1609 return "generic-rv64"; in getHostCPUName()
1611 return "generic-rv32"; in getHostCPUName()
1650 .StartsWith("SPARC-M7", "niagara4" /* "niagara7" */) in getHostCPUNameForSPARC()
1651 .StartsWith("SPARC-S7", "niagara4" /* "niagara7" */) in getHostCPUNameForSPARC()
1652 .StartsWith("SPARC-M8", "niagara4" /* "m8" */) in getHostCPUNameForSPARC()
1660 StringRef Content = P ? P->getBuffer() : ""; in getHostCPUName()
1670 ksp = kstat_lookup(kc, const_cast<char *>("cpu_info"), -1, NULL); in getHostCPUName()
1671 if (ksp != NULL && kstat_read(kc, ksp, NULL) != -1 && in getHostCPUName()
1672 ksp->ks_type == KSTAT_TYPE_NAMED) in getHostCPUName()
1675 if (brand != NULL && brand->data_type == KSTAT_DATA_STRING) in getHostCPUName()
1690 .Case("UltraSPARC-I", "ultrasparc") in getHostCPUName()
1691 .Case("UltraSPARC-II", "ultrasparc") in getHostCPUName()
1692 .Case("UltraSPARC-IIe", "ultrasparc") in getHostCPUName()
1693 .Case("UltraSPARC-IIi", "ultrasparc") in getHostCPUName()
1694 .Case("SPARC64-III", "ultrasparc") in getHostCPUName()
1695 .Case("SPARC64-IV", "ultrasparc") in getHostCPUName()
1696 .Case("UltraSPARC-III", "ultrasparc3") in getHostCPUName()
1697 .Case("UltraSPARC-III+", "ultrasparc3") in getHostCPUName()
1698 .Case("UltraSPARC-IIIi", "ultrasparc3") in getHostCPUName()
1699 .Case("UltraSPARC-IIIi+", "ultrasparc3") in getHostCPUName()
1700 .Case("UltraSPARC-IV", "ultrasparc3") in getHostCPUName()
1701 .Case("UltraSPARC-IV+", "ultrasparc3") in getHostCPUName()
1702 .Case("SPARC64-V", "ultrasparc3") in getHostCPUName()
1703 .Case("SPARC64-VI", "ultrasparc3") in getHostCPUName()
1704 .Case("SPARC64-VII", "ultrasparc3") in getHostCPUName()
1705 .Case("UltraSPARC-T1", "niagara") in getHostCPUName()
1706 .Case("UltraSPARC-T2", "niagara2") in getHostCPUName()
1707 .Case("UltraSPARC-T2", "niagara2") in getHostCPUName()
1708 .Case("UltraSPARC-T2+", "niagara2") in getHostCPUName()
1709 .Case("SPARC-T3", "niagara3") in getHostCPUName()
1710 .Case("SPARC-T4", "niagara4") in getHostCPUName()
1711 .Case("SPARC-T5", "niagara4") in getHostCPUName()
1713 .Case("SPARC-M7", "niagara4" /* "niagara7" */) in getHostCPUName()
1714 .Case("SPARC-S7", "niagara4" /* "niagara7" */) in getHostCPUName()
1715 .Case("SPARC-M8", "niagara4" /* "m8" */) in getHostCPUName()
1745 if (getX86CpuIDAndInfo(0, &MaxLevel, &EBX, &ECX, &EDX) || MaxLevel < 1) in getHostCPUFeatures()
1748 getX86CpuIDAndInfo(1, &EAX, &EBX, &ECX, &EDX); in getHostCPUFeatures()
1750 Features["cx8"] = (EDX >> 8) & 1; in getHostCPUFeatures()
1751 Features["cmov"] = (EDX >> 15) & 1; in getHostCPUFeatures()
1752 Features["mmx"] = (EDX >> 23) & 1; in getHostCPUFeatures()
1753 Features["fxsr"] = (EDX >> 24) & 1; in getHostCPUFeatures()
1754 Features["sse"] = (EDX >> 25) & 1; in getHostCPUFeatures()
1755 Features["sse2"] = (EDX >> 26) & 1; in getHostCPUFeatures()
1757 Features["sse3"] = (ECX >> 0) & 1; in getHostCPUFeatures()
1758 Features["pclmul"] = (ECX >> 1) & 1; in getHostCPUFeatures()
1759 Features["ssse3"] = (ECX >> 9) & 1; in getHostCPUFeatures()
1760 Features["cx16"] = (ECX >> 13) & 1; in getHostCPUFeatures()
1761 Features["sse4.1"] = (ECX >> 19) & 1; in getHostCPUFeatures()
1762 Features["sse4.2"] = (ECX >> 20) & 1; in getHostCPUFeatures()
1764 Features["movbe"] = (ECX >> 22) & 1; in getHostCPUFeatures()
1765 Features["popcnt"] = (ECX >> 23) & 1; in getHostCPUFeatures()
1766 Features["aes"] = (ECX >> 25) & 1; in getHostCPUFeatures()
1767 Features["rdrnd"] = (ECX >> 30) & 1; in getHostCPUFeatures()
1772 bool HasXSave = ((ECX >> 27) & 1) && !getX86XCR0(&EAX, &EDX); in getHostCPUFeatures()
1773 bool HasAVXSave = HasXSave && ((ECX >> 28) & 1) && ((EAX & 0x6) == 0x6); in getHostCPUFeatures()
1784 const unsigned AMXBits = (1 << 17) | (1 << 18); in getHostCPUFeatures()
1788 Features["fma"] = ((ECX >> 12) & 1) && HasAVXSave; in getHostCPUFeatures()
1790 Features["xsave"] = ((ECX >> 26) & 1) && HasAVXSave; in getHostCPUFeatures()
1791 Features["f16c"] = ((ECX >> 29) & 1) && HasAVXSave; in getHostCPUFeatures()
1798 Features["sahf"] = HasExtLeaf1 && ((ECX >> 0) & 1); in getHostCPUFeatures()
1799 Features["lzcnt"] = HasExtLeaf1 && ((ECX >> 5) & 1); in getHostCPUFeatures()
1800 Features["sse4a"] = HasExtLeaf1 && ((ECX >> 6) & 1); in getHostCPUFeatures()
1801 Features["prfchw"] = HasExtLeaf1 && ((ECX >> 8) & 1); in getHostCPUFeatures()
1802 Features["xop"] = HasExtLeaf1 && ((ECX >> 11) & 1) && HasAVXSave; in getHostCPUFeatures()
1803 Features["lwp"] = HasExtLeaf1 && ((ECX >> 15) & 1); in getHostCPUFeatures()
1804 Features["fma4"] = HasExtLeaf1 && ((ECX >> 16) & 1) && HasAVXSave; in getHostCPUFeatures()
1805 Features["tbm"] = HasExtLeaf1 && ((ECX >> 21) & 1); in getHostCPUFeatures()
1806 Features["mwaitx"] = HasExtLeaf1 && ((ECX >> 29) & 1); in getHostCPUFeatures()
1808 Features["64bit"] = HasExtLeaf1 && ((EDX >> 29) & 1); in getHostCPUFeatures()
1814 Features["clzero"] = HasExtLeaf8 && ((EBX >> 0) & 1); in getHostCPUFeatures()
1815 Features["rdpru"] = HasExtLeaf8 && ((EBX >> 4) & 1); in getHostCPUFeatures()
1816 Features["wbnoinvd"] = HasExtLeaf8 && ((EBX >> 9) & 1); in getHostCPUFeatures()
1821 Features["fsgsbase"] = HasLeaf7 && ((EBX >> 0) & 1); in getHostCPUFeatures()
1822 Features["sgx"] = HasLeaf7 && ((EBX >> 2) & 1); in getHostCPUFeatures()
1823 Features["bmi"] = HasLeaf7 && ((EBX >> 3) & 1); in getHostCPUFeatures()
1825 Features["avx2"] = HasLeaf7 && ((EBX >> 5) & 1) && HasAVXSave; in getHostCPUFeatures()
1826 Features["bmi2"] = HasLeaf7 && ((EBX >> 8) & 1); in getHostCPUFeatures()
1827 Features["invpcid"] = HasLeaf7 && ((EBX >> 10) & 1); in getHostCPUFeatures()
1828 Features["rtm"] = HasLeaf7 && ((EBX >> 11) & 1); in getHostCPUFeatures()
1830 Features["avx512f"] = HasLeaf7 && ((EBX >> 16) & 1) && HasAVX512Save; in getHostCPUFeatures()
1833 Features["avx512dq"] = HasLeaf7 && ((EBX >> 17) & 1) && HasAVX512Save; in getHostCPUFeatures()
1834 Features["rdseed"] = HasLeaf7 && ((EBX >> 18) & 1); in getHostCPUFeatures()
1835 Features["adx"] = HasLeaf7 && ((EBX >> 19) & 1); in getHostCPUFeatures()
1836 Features["avx512ifma"] = HasLeaf7 && ((EBX >> 21) & 1) && HasAVX512Save; in getHostCPUFeatures()
1837 Features["clflushopt"] = HasLeaf7 && ((EBX >> 23) & 1); in getHostCPUFeatures()
1838 Features["clwb"] = HasLeaf7 && ((EBX >> 24) & 1); in getHostCPUFeatures()
1839 Features["avx512cd"] = HasLeaf7 && ((EBX >> 28) & 1) && HasAVX512Save; in getHostCPUFeatures()
1840 Features["sha"] = HasLeaf7 && ((EBX >> 29) & 1); in getHostCPUFeatures()
1841 Features["avx512bw"] = HasLeaf7 && ((EBX >> 30) & 1) && HasAVX512Save; in getHostCPUFeatures()
1842 Features["avx512vl"] = HasLeaf7 && ((EBX >> 31) & 1) && HasAVX512Save; in getHostCPUFeatures()
1844 Features["avx512vbmi"] = HasLeaf7 && ((ECX >> 1) & 1) && HasAVX512Save; in getHostCPUFeatures()
1845 Features["pku"] = HasLeaf7 && ((ECX >> 4) & 1); in getHostCPUFeatures()
1846 Features["waitpkg"] = HasLeaf7 && ((ECX >> 5) & 1); in getHostCPUFeatures()
1847 Features["avx512vbmi2"] = HasLeaf7 && ((ECX >> 6) & 1) && HasAVX512Save; in getHostCPUFeatures()
1848 Features["shstk"] = HasLeaf7 && ((ECX >> 7) & 1); in getHostCPUFeatures()
1849 Features["gfni"] = HasLeaf7 && ((ECX >> 8) & 1); in getHostCPUFeatures()
1850 Features["vaes"] = HasLeaf7 && ((ECX >> 9) & 1) && HasAVXSave; in getHostCPUFeatures()
1851 Features["vpclmulqdq"] = HasLeaf7 && ((ECX >> 10) & 1) && HasAVXSave; in getHostCPUFeatures()
1852 Features["avx512vnni"] = HasLeaf7 && ((ECX >> 11) & 1) && HasAVX512Save; in getHostCPUFeatures()
1853 Features["avx512bitalg"] = HasLeaf7 && ((ECX >> 12) & 1) && HasAVX512Save; in getHostCPUFeatures()
1854 Features["avx512vpopcntdq"] = HasLeaf7 && ((ECX >> 14) & 1) && HasAVX512Save; in getHostCPUFeatures()
1855 Features["rdpid"] = HasLeaf7 && ((ECX >> 22) & 1); in getHostCPUFeatures()
1856 Features["kl"] = HasLeaf7 && ((ECX >> 23) & 1); // key locker in getHostCPUFeatures()
1857 Features["cldemote"] = HasLeaf7 && ((ECX >> 25) & 1); in getHostCPUFeatures()
1858 Features["movdiri"] = HasLeaf7 && ((ECX >> 27) & 1); in getHostCPUFeatures()
1859 Features["movdir64b"] = HasLeaf7 && ((ECX >> 28) & 1); in getHostCPUFeatures()
1860 Features["enqcmd"] = HasLeaf7 && ((ECX >> 29) & 1); in getHostCPUFeatures()
1862 Features["uintr"] = HasLeaf7 && ((EDX >> 5) & 1); in getHostCPUFeatures()
1864 HasLeaf7 && ((EDX >> 8) & 1) && HasAVX512Save; in getHostCPUFeatures()
1865 Features["serialize"] = HasLeaf7 && ((EDX >> 14) & 1); in getHostCPUFeatures()
1866 Features["tsxldtrk"] = HasLeaf7 && ((EDX >> 16) & 1); in getHostCPUFeatures()
1875 // detecting features using the "-march=native" flag. in getHostCPUFeatures()
1877 Features["pconfig"] = HasLeaf7 && ((EDX >> 18) & 1); in getHostCPUFeatures()
1878 Features["amx-bf16"] = HasLeaf7 && ((EDX >> 22) & 1) && HasAMXSave; in getHostCPUFeatures()
1879 Features["avx512fp16"] = HasLeaf7 && ((EDX >> 23) & 1) && HasAVX512Save; in getHostCPUFeatures()
1880 Features["amx-tile"] = HasLeaf7 && ((EDX >> 24) & 1) && HasAMXSave; in getHostCPUFeatures()
1881 Features["amx-int8"] = HasLeaf7 && ((EDX >> 25) & 1) && HasAMXSave; in getHostCPUFeatures()
1885 HasLeaf7 && EAX >= 1 && in getHostCPUFeatures()
1887 Features["sha512"] = HasLeaf7Subleaf1 && ((EAX >> 0) & 1); in getHostCPUFeatures()
1888 Features["sm3"] = HasLeaf7Subleaf1 && ((EAX >> 1) & 1); in getHostCPUFeatures()
1889 Features["sm4"] = HasLeaf7Subleaf1 && ((EAX >> 2) & 1); in getHostCPUFeatures()
1890 Features["raoint"] = HasLeaf7Subleaf1 && ((EAX >> 3) & 1); in getHostCPUFeatures()
1891 Features["avxvnni"] = HasLeaf7Subleaf1 && ((EAX >> 4) & 1) && HasAVXSave; in getHostCPUFeatures()
1892 Features["avx512bf16"] = HasLeaf7Subleaf1 && ((EAX >> 5) & 1) && HasAVX512Save; in getHostCPUFeatures()
1893 Features["amx-fp16"] = HasLeaf7Subleaf1 && ((EAX >> 21) & 1) && HasAMXSave; in getHostCPUFeatures()
1894 Features["cmpccxadd"] = HasLeaf7Subleaf1 && ((EAX >> 7) & 1); in getHostCPUFeatures()
1895 Features["hreset"] = HasLeaf7Subleaf1 && ((EAX >> 22) & 1); in getHostCPUFeatures()
1896 Features["avxifma"] = HasLeaf7Subleaf1 && ((EAX >> 23) & 1) && HasAVXSave; in getHostCPUFeatures()
1897 Features["avxvnniint8"] = HasLeaf7Subleaf1 && ((EDX >> 4) & 1) && HasAVXSave; in getHostCPUFeatures()
1898 Features["avxneconvert"] = HasLeaf7Subleaf1 && ((EDX >> 5) & 1) && HasAVXSave; in getHostCPUFeatures()
1899 Features["amx-complex"] = HasLeaf7Subleaf1 && ((EDX >> 8) & 1) && HasAMXSave; in getHostCPUFeatures()
1900 Features["avxvnniint16"] = HasLeaf7Subleaf1 && ((EDX >> 10) & 1) && HasAVXSave; in getHostCPUFeatures()
1901 Features["prefetchi"] = HasLeaf7Subleaf1 && ((EDX >> 14) & 1); in getHostCPUFeatures()
1902 Features["usermsr"] = HasLeaf7Subleaf1 && ((EDX >> 15) & 1); in getHostCPUFeatures()
1903 Features["avx10.1-256"] = HasLeaf7Subleaf1 && ((EDX >> 19) & 1); in getHostCPUFeatures()
1904 bool HasAPXF = HasLeaf7Subleaf1 && ((EDX >> 21) & 1); in getHostCPUFeatures()
1916 Features["xsaveopt"] = HasLeafD && ((EAX >> 0) & 1) && HasAVXSave; in getHostCPUFeatures()
1917 Features["xsavec"] = HasLeafD && ((EAX >> 1) & 1) && HasAVXSave; in getHostCPUFeatures()
1918 Features["xsaves"] = HasLeafD && ((EAX >> 3) & 1) && HasAVXSave; in getHostCPUFeatures()
1923 Features["ptwrite"] = HasLeaf14 && ((EBX >> 4) & 1); in getHostCPUFeatures()
1927 Features["widekl"] = HasLeaf7 && HasLeaf19 && ((EBX >> 2) & 1); in getHostCPUFeatures()
1931 Features["avx10.1-512"] = in getHostCPUFeatures()
1932 Features["avx10.1-256"] && HasLeaf24 && ((EBX >> 18) & 1); in getHostCPUFeatures()
1944 P->getBuffer().split(Lines, "\n"); in getHostCPUFeatures()
1965 .Case("fp", "fp-armv8") in getHostCPUFeatures()
1976 .Case("idiva", "hwdiv-arm") in getHostCPUFeatures()
2023 bool HasFPU = hwcap & (1UL << 3); // HWCAP_LOONGARCH_FPU in getHostCPUFeatures()
2029 Features["f"] = HasFPU && (cpucfg2 & (1U << 1)); // CPUCFG.2.FP_SP in getHostCPUFeatures()
2030 Features["d"] = HasFPU && (cpucfg2 & (1U << 2)); // CPUCFG.2.FP_DP in getHostCPUFeatures()
2032 Features["lsx"] = hwcap & (1UL << 4); // HWCAP_LOONGARCH_LSX in getHostCPUFeatures()
2033 Features["lasx"] = hwcap & (1UL << 5); // HWCAP_LOONGARCH_LASX in getHostCPUFeatures()
2034 Features["lvz"] = hwcap & (1UL << 9); // HWCAP_LOONGARCH_LVZ in getHostCPUFeatures()
2056 if (BaseMask & 1) { in getHostCPUFeatures()
2062 uint64_t ExtMask = Query[1].Value; in getHostCPUFeatures()
2063 Features["f"] = ExtMask & (1 << 0); // RISCV_HWPROBE_IMA_FD in getHostCPUFeatures()
2064 Features["d"] = ExtMask & (1 << 0); // RISCV_HWPROBE_IMA_FD in getHostCPUFeatures()
2065 Features["c"] = ExtMask & (1 << 1); // RISCV_HWPROBE_IMA_C in getHostCPUFeatures()
2066 Features["v"] = ExtMask & (1 << 2); // RISCV_HWPROBE_IMA_V in getHostCPUFeatures()
2067 Features["zba"] = ExtMask & (1 << 3); // RISCV_HWPROBE_EXT_ZBA in getHostCPUFeatures()
2068 Features["zbb"] = ExtMask & (1 << 4); // RISCV_HWPROBE_EXT_ZBB in getHostCPUFeatures()
2069 Features["zbs"] = ExtMask & (1 << 5); // RISCV_HWPROBE_EXT_ZBS in getHostCPUFeatures()
2070 Features["zicboz"] = ExtMask & (1 << 6); // RISCV_HWPROBE_EXT_ZICBOZ in getHostCPUFeatures()
2071 Features["zbc"] = ExtMask & (1 << 7); // RISCV_HWPROBE_EXT_ZBC in getHostCPUFeatures()
2072 Features["zbkb"] = ExtMask & (1 << 8); // RISCV_HWPROBE_EXT_ZBKB in getHostCPUFeatures()
2073 Features["zbkc"] = ExtMask & (1 << 9); // RISCV_HWPROBE_EXT_ZBKC in getHostCPUFeatures()
2074 Features["zbkx"] = ExtMask & (1 << 10); // RISCV_HWPROBE_EXT_ZBKX in getHostCPUFeatures()
2075 Features["zknd"] = ExtMask & (1 << 11); // RISCV_HWPROBE_EXT_ZKND in getHostCPUFeatures()
2076 Features["zkne"] = ExtMask & (1 << 12); // RISCV_HWPROBE_EXT_ZKNE in getHostCPUFeatures()
2077 Features["zknh"] = ExtMask & (1 << 13); // RISCV_HWPROBE_EXT_ZKNH in getHostCPUFeatures()
2078 Features["zksed"] = ExtMask & (1 << 14); // RISCV_HWPROBE_EXT_ZKSED in getHostCPUFeatures()
2079 Features["zksh"] = ExtMask & (1 << 15); // RISCV_HWPROBE_EXT_ZKSH in getHostCPUFeatures()
2080 Features["zkt"] = ExtMask & (1 << 16); // RISCV_HWPROBE_EXT_ZKT in getHostCPUFeatures()
2081 Features["zvbb"] = ExtMask & (1 << 17); // RISCV_HWPROBE_EXT_ZVBB in getHostCPUFeatures()
2082 Features["zvbc"] = ExtMask & (1 << 18); // RISCV_HWPROBE_EXT_ZVBC in getHostCPUFeatures()
2083 Features["zvkb"] = ExtMask & (1 << 19); // RISCV_HWPROBE_EXT_ZVKB in getHostCPUFeatures()
2084 Features["zvkg"] = ExtMask & (1 << 20); // RISCV_HWPROBE_EXT_ZVKG in getHostCPUFeatures()
2085 Features["zvkned"] = ExtMask & (1 << 21); // RISCV_HWPROBE_EXT_ZVKNED in getHostCPUFeatures()
2086 Features["zvknha"] = ExtMask & (1 << 22); // RISCV_HWPROBE_EXT_ZVKNHA in getHostCPUFeatures()
2087 Features["zvknhb"] = ExtMask & (1 << 23); // RISCV_HWPROBE_EXT_ZVKNHB in getHostCPUFeatures()
2088 Features["zvksed"] = ExtMask & (1 << 24); // RISCV_HWPROBE_EXT_ZVKSED in getHostCPUFeatures()
2089 Features["zvksh"] = ExtMask & (1 << 25); // RISCV_HWPROBE_EXT_ZVKSH in getHostCPUFeatures()
2090 Features["zvkt"] = ExtMask & (1 << 26); // RISCV_HWPROBE_EXT_ZVKT in getHostCPUFeatures()
2091 Features["zfh"] = ExtMask & (1 << 27); // RISCV_HWPROBE_EXT_ZFH in getHostCPUFeatures()
2092 Features["zfhmin"] = ExtMask & (1 << 28); // RISCV_HWPROBE_EXT_ZFHMIN in getHostCPUFeatures()
2093 Features["zihintntl"] = ExtMask & (1 << 29); // RISCV_HWPROBE_EXT_ZIHINTNTL in getHostCPUFeatures()
2094 Features["zvfh"] = ExtMask & (1 << 30); // RISCV_HWPROBE_EXT_ZVFH in getHostCPUFeatures()
2095 Features["zvfhmin"] = ExtMask & (1ULL << 31); // RISCV_HWPROBE_EXT_ZVFHMIN in getHostCPUFeatures()
2096 Features["zfa"] = ExtMask & (1ULL << 32); // RISCV_HWPROBE_EXT_ZFA in getHostCPUFeatures()
2097 Features["ztso"] = ExtMask & (1ULL << 33); // RISCV_HWPROBE_EXT_ZTSO in getHostCPUFeatures()
2098 // TODO: Re-enable zacas when it is marked non-experimental again. in getHostCPUFeatures()
2099 // Features["zacas"] = ExtMask & (1ULL << 34); // RISCV_HWPROBE_EXT_ZACAS in getHostCPUFeatures()
2100 Features["zicond"] = ExtMask & (1ULL << 35); // RISCV_HWPROBE_EXT_ZICOND in getHostCPUFeatures()
2102 ExtMask & (1ULL << 36); // RISCV_HWPROBE_EXT_ZIHINTPAUSE in getHostCPUFeatures()
2104 // TODO: set unaligned-scalar-mem if RISCV_HWPROBE_KEY_MISALIGNED_PERF returns in getHostCPUFeatures()