// ReSharper restore InconsistentNaming public CpuId(int thread) { uint threadMaskWith; uint coreMaskWith; Thread = thread; uint maxCpuidExt; if (thread >= 64) { throw new ArgumentOutOfRangeException(nameof(thread)); } ulong mask = 1UL << thread; uint maxCpuid; if (OpCode.CpuidTx(CPUID_0, 0, out uint eax, out uint ebx, out uint ecx, out uint edx, mask)) { if (eax > 0) { maxCpuid = eax; } else { return; } StringBuilder vendorBuilder = new StringBuilder(); AppendRegister(vendorBuilder, ebx); AppendRegister(vendorBuilder, edx); AppendRegister(vendorBuilder, ecx); string cpuVendor = vendorBuilder.ToString(); switch (cpuVendor) { case "GenuineIntel": Vendor = Vendor.Intel; break; case "AuthenticAMD": Vendor = Vendor.AMD; break; default: Vendor = Vendor.Unknown; break; } if (OpCode.CpuidTx(CPUID_EXT, 0, out eax, out _, out _, out _, mask)) { if (eax > CPUID_EXT) { maxCpuidExt = eax - CPUID_EXT; } else { return; } } else { throw new ArgumentOutOfRangeException(nameof(thread)); } }