diff --git a/configure.ac b/configure.ac index 198fc30b5..202562a01 100644 --- a/configure.ac +++ b/configure.ac @@ -750,6 +750,7 @@ RB_CHK_SYSHEADER(iphlpapi.h, [IPHLPAPI_H]) dnl x86 platform RB_CHK_SYSHEADER(x86intrin.h, [X86INTRIN_H]) +RB_CHK_SYSHEADER(cpuid.h, [CPUID_H]) dnl experimental RB_CHK_SYSHEADER(experimental/string_view, [EXPERIMENTAL_STRING_VIEW]) diff --git a/include/ircd/info.h b/include/ircd/info.h index 9ba27d065..168620a1e 100644 --- a/include/ircd/info.h +++ b/include/ircd/info.h @@ -32,11 +32,15 @@ namespace ircd::info extern const string_view compiled; extern const string_view startup; - // System information + // Platform information extern const size_t max_align; extern const size_t hardware_concurrency; extern const size_t destructive_interference; extern const size_t constructive_interference; + extern const uint128_t cpuid[8]; + extern const string_view cpuvendor; + + // System information extern const size_t page_size; extern const size_t iov_max; extern const size_t aio_max; diff --git a/ircd/info.cc b/ircd/info.cc index 3d2a91b68..c9efa6348 100644 --- a/ircd/info.cc +++ b/ircd/info.cc @@ -10,6 +10,7 @@ #include (cpuid + 0) + }; + + _cpuvendor_[0] = b[4]; + _cpuvendor_[1] = b[5]; + _cpuvendor_[2] = b[6]; + _cpuvendor_[3] = b[7]; + _cpuvendor_[4] = b[12]; + _cpuvendor_[5] = b[13]; + _cpuvendor_[6] = b[14]; + _cpuvendor_[7] = b[15]; + _cpuvendor_[8] = b[8]; + _cpuvendor_[9] = b[9]; + _cpuvendor_[10] = b[10]; + _cpuvendor_[11] = b[11]; + + return string_view + { + _cpuvendor_, sizeof(_cpuvendor_) + }; +}()}; + decltype(ircd::info::constructive_interference) ircd::info::constructive_interference {