[*] Prevent WriteLater from entering a deadlock condition. OnFlushs are no longer atomic
[*] Fix up gen1 copypasta [+] ConsoleMessage::ToPersistentString [*] Adjust ConsoleMessage formatting
This commit is contained in:
parent
b1c4e26f91
commit
d8e000b5c3
@ -48,8 +48,10 @@ namespace Aurora::Console
|
|||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM AuString StringifyTime(bool simple = false) const;
|
AUKN_SYM AuString StringifyTime(bool simple = false) const;
|
||||||
|
AUKN_SYM AuString StringifyTimeUTC() const;
|
||||||
AUKN_SYM AuString GetWrappedTag() const;
|
AUKN_SYM AuString GetWrappedTag() const;
|
||||||
AUKN_SYM AuString ToConsole() const;
|
AUKN_SYM AuString ToConsole() const;
|
||||||
|
AUKN_SYM AuString ToPersistentString() const;
|
||||||
AUKN_SYM AuString ToSimplified() const;
|
AUKN_SYM AuString ToSimplified() const;
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -29,6 +29,7 @@ namespace Aurora::HWInfo
|
|||||||
inline CpuBitId Not() const;
|
inline CpuBitId Not() const;
|
||||||
inline CpuBitId And(const CpuBitId &id) const;
|
inline CpuBitId And(const CpuBitId &id) const;
|
||||||
inline CpuBitId Xor(const CpuBitId &id) const;
|
inline CpuBitId Xor(const CpuBitId &id) const;
|
||||||
|
inline CpuBitId Or(const CpuBitId &id) const;
|
||||||
|
|
||||||
inline bool CpuBitScanForward(AuUInt8 &index, AuUInt8 offset) const;
|
inline bool CpuBitScanForward(AuUInt8 &index, AuUInt8 offset) const;
|
||||||
|
|
||||||
|
@ -117,6 +117,18 @@ namespace Aurora::HWInfo
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CpuBitId CpuBitId::Or(const CpuBitId &id) const
|
||||||
|
{
|
||||||
|
CpuBitId ret = *this;
|
||||||
|
ret.lower |= id.lower;
|
||||||
|
ret.upper |= id.upper;
|
||||||
|
#if defined(_AU_MASSIVE_CPUID)
|
||||||
|
ret.upper2 |= id.upper2;
|
||||||
|
ret.upper3 |= id.upper3;
|
||||||
|
#endif
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
CpuBitId &CpuBitId::operator=(const CpuBitId &id)
|
CpuBitId &CpuBitId::operator=(const CpuBitId &id)
|
||||||
{
|
{
|
||||||
lower = id.lower;
|
lower = id.lower;
|
||||||
|
@ -437,12 +437,12 @@ namespace Aurora::IO::Net
|
|||||||
|
|
||||||
AUE_DEFINE(ENetworkPoolModel, (
|
AUE_DEFINE(ENetworkPoolModel, (
|
||||||
|
|
||||||
|
// Do not attach to a thread subsystem
|
||||||
|
eNoHooks,
|
||||||
|
|
||||||
/// given a group id, uses prespawned async application event queues
|
/// given a group id, uses prespawned async application event queues
|
||||||
eAsyncApp,
|
eAsyncApp,
|
||||||
|
|
||||||
///
|
|
||||||
eAsyncThreadPool,
|
|
||||||
|
|
||||||
/// it just werks
|
/// it just werks
|
||||||
eInternalThreadPool,
|
eInternalThreadPool,
|
||||||
|
|
||||||
@ -456,7 +456,7 @@ namespace Aurora::IO::Net
|
|||||||
|
|
||||||
ENetworkPoolModel mode;
|
ENetworkPoolModel mode;
|
||||||
|
|
||||||
AuUInt8 asyncWorkGroup;
|
AuUInt8 asyncWorkGroup {};
|
||||||
AuUInt8 asyncWorkerIdOffset {};
|
AuUInt8 asyncWorkerIdOffset {};
|
||||||
|
|
||||||
AuSPtr<Async::IThreadPool> threadPool;
|
AuSPtr<Async::IThreadPool> threadPool;
|
||||||
|
@ -16,7 +16,7 @@ namespace Aurora::Console::ConsoleFIO
|
|||||||
|
|
||||||
static const auto &gLogConfig = gRuntimeConfig.console.fio;
|
static const auto &gLogConfig = gRuntimeConfig.console.fio;
|
||||||
|
|
||||||
AuString GetLogDirectory()
|
static AuString GetLogDirectory(const AuString &type)
|
||||||
{
|
{
|
||||||
AuString path;
|
AuString path;
|
||||||
AuString procName;
|
AuString procName;
|
||||||
@ -26,17 +26,31 @@ namespace Aurora::Console::ConsoleFIO
|
|||||||
path = ".";
|
path = ".";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Process::GetProcName(procName))
|
path += "/" + type + "/";
|
||||||
|
|
||||||
|
if (Process::GetProcName(procName))
|
||||||
{
|
{
|
||||||
procName = "Unknown";
|
path += procName;
|
||||||
|
path.push_back('/');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
path += "Unknown/";
|
||||||
}
|
}
|
||||||
|
|
||||||
path += "/Logs/";
|
|
||||||
path += procName;
|
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AuString GetLogDirectory()
|
||||||
|
{
|
||||||
|
return GetLogDirectory("Logs");
|
||||||
|
}
|
||||||
|
|
||||||
|
AuString GetTelemetryDirectory()
|
||||||
|
{
|
||||||
|
return GetLogDirectory("Telemetry");
|
||||||
|
}
|
||||||
|
|
||||||
static void EraseFilesByTimestamp(const AuString &path, /*const its not worth reallocation*/ AuList<AuString> &files)
|
static void EraseFilesByTimestamp(const AuString &path, /*const its not worth reallocation*/ AuList<AuString> &files)
|
||||||
{
|
{
|
||||||
if (files.size() <= gLogConfig.maxLogs)
|
if (files.size() <= gLogConfig.maxLogs)
|
||||||
|
@ -14,5 +14,6 @@ namespace Aurora::Console::ConsoleFIO
|
|||||||
void Exit();
|
void Exit();
|
||||||
void Flush();
|
void Flush();
|
||||||
AuString GetLogDirectory();
|
AuString GetLogDirectory();
|
||||||
|
AuString GetTelemetryDirectory();
|
||||||
void FIOCleanup();
|
void FIOCleanup();
|
||||||
}
|
}
|
@ -25,7 +25,7 @@ namespace Aurora::Console::ConsoleFIO
|
|||||||
void FIOSink::OnMessageBlocking(AuUInt8 level, const ConsoleMessage &msg)
|
void FIOSink::OnMessageBlocking(AuUInt8 level, const ConsoleMessage &msg)
|
||||||
{
|
{
|
||||||
AU_LOCK_GUARD(logMutex_->AsWritable());
|
AU_LOCK_GUARD(logMutex_->AsWritable());
|
||||||
auto str = msg.ToSimplified();
|
auto str = msg.ToPersistentString();
|
||||||
|
|
||||||
logBuffer_.reserve(logBuffer_.size() + str.size() + 2);
|
logBuffer_.reserve(logBuffer_.size() + str.size() + 2);
|
||||||
|
|
||||||
|
@ -28,13 +28,13 @@ namespace Aurora::Console
|
|||||||
"\033[0m"
|
"\033[0m"
|
||||||
};
|
};
|
||||||
|
|
||||||
AuString ConsoleMessage::StringifyTime(bool simple) const
|
static AuString StringifyTimeEx(const ConsoleMessage &msg, bool simple, bool utc)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
std::tm localized;
|
std::tm localized;
|
||||||
|
|
||||||
Aurora::Time::ToCivilTime(time, false).CopyTo(localized);
|
Aurora::Time::ToCivilTime(msg.time, utc).CopyTo(localized);
|
||||||
|
|
||||||
if (simple)
|
if (simple)
|
||||||
{
|
{
|
||||||
@ -51,6 +51,30 @@ namespace Aurora::Console
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AuString ConsoleMessage::StringifyTime(bool simple) const
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return StringifyTimeEx(*this, simple, false);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
AuString ConsoleMessage::StringifyTimeUTC() const
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return StringifyTimeEx(*this, false, true);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AuString ConsoleMessage::GetWrappedTag() const
|
AuString ConsoleMessage::GetWrappedTag() const
|
||||||
{
|
{
|
||||||
return "[" + prefix + "]";
|
return "[" + prefix + "]";
|
||||||
@ -60,11 +84,11 @@ namespace Aurora::Console
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return fmt::format("{}[{}] {:<7} | {}{}",
|
return fmt::format("{}[{}] {:<8} | {}{}",
|
||||||
static_cast<EAnsiColor>(color) <= EAnsiColor::eCount ?
|
static_cast<EAnsiColor>(color) <= EAnsiColor::eCount ?
|
||||||
kAnsiCheats[static_cast<size_t>(color)] :
|
kAnsiCheats[static_cast<size_t>(color)] :
|
||||||
"",
|
"",
|
||||||
StringifyTime(),
|
StringifyTime(true),
|
||||||
GetWrappedTag(),
|
GetWrappedTag(),
|
||||||
line,
|
line,
|
||||||
kAnsiCheats[static_cast<size_t>(EAnsiColor::eReset)]);
|
kAnsiCheats[static_cast<size_t>(EAnsiColor::eReset)]);
|
||||||
@ -75,12 +99,30 @@ namespace Aurora::Console
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AuString ConsoleMessage::ToPersistentString() const
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
return fmt::format("[{}] {:<7} | {}",
|
||||||
|
StringifyTimeUTC(),
|
||||||
|
GetWrappedTag(),
|
||||||
|
line);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
AuString ConsoleMessage::ToSimplified() const
|
AuString ConsoleMessage::ToSimplified() const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return fmt::format("{:<9} {:<7} | {}", StringifyTime(true), GetWrappedTag(), line);
|
return fmt::format("{:<9} {:<8} | {}", StringifyTime(true), GetWrappedTag(), line);
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
|
@ -121,22 +121,26 @@ namespace Aurora::Console::Logging
|
|||||||
|
|
||||||
void ForceFlushLoggers()
|
void ForceFlushLoggers()
|
||||||
{
|
{
|
||||||
AU_LOCK_GUARD(gGlobalSpin);
|
|
||||||
decltype(gLogTasks) logTasks;
|
decltype(gLogTasks) logTasks;
|
||||||
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
|
AU_LOCK_GUARD(gGlobalSpin);
|
||||||
|
|
||||||
logTasks = AuExchange(gLogTasks, {});
|
try
|
||||||
}
|
{
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
logTasks = AuExchange(gLogTasks, {});
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
|
||||||
if (logTasks.empty())
|
}
|
||||||
{
|
|
||||||
return;
|
if (logTasks.empty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -156,17 +160,21 @@ namespace Aurora::Console::Logging
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (const auto &logger : gFlushableLoggers)
|
|
||||||
{
|
{
|
||||||
for (const auto &sink : logger->sinks)
|
AU_LOCK_GUARD(gGlobalSpin);
|
||||||
|
|
||||||
|
for (const auto &logger : gFlushableLoggers)
|
||||||
{
|
{
|
||||||
try
|
for (const auto &sink : logger->sinks)
|
||||||
{
|
{
|
||||||
sink->OnFlush();
|
try
|
||||||
}
|
{
|
||||||
catch (...)
|
sink->OnFlush();
|
||||||
{
|
}
|
||||||
SysPushErrorGeneric("...");
|
catch (...)
|
||||||
|
{
|
||||||
|
SysPushErrorGeneric("...");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,6 @@ namespace Aurora::Debug
|
|||||||
return lastError = ret;
|
return lastError = ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AuOptional<OSError_t> TryGetOrFetchOSError()
|
AuOptional<OSError_t> TryGetOrFetchOSError()
|
||||||
{
|
{
|
||||||
static AuOptional<OSError_t> lastErrorError;
|
static AuOptional<OSError_t> lastErrorError;
|
||||||
|
@ -16,20 +16,17 @@ namespace Aurora::Debug
|
|||||||
AuString dbg;
|
AuString dbg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
AuUInt32 GetOSErrorFence();
|
AuUInt32 GetOSErrorFence();
|
||||||
AuOptional<OSError_t> TryGetOrFetchOSError();
|
AuOptional<OSError_t> TryGetOrFetchOSError();
|
||||||
|
|
||||||
AuUInt32 GetCErrorFence();
|
AuUInt32 GetCErrorFence();
|
||||||
AuOptional<AuUInt32> TryGetOrFetchCError();
|
AuOptional<AuUInt32> TryGetOrFetchCError();
|
||||||
|
|
||||||
|
|
||||||
AuUInt32 ReportStackTrace(const StackTrace &trace, const AuString &message);
|
|
||||||
|
|
||||||
|
|
||||||
AuOptional<OSError_t> TryFetchOSError();
|
AuOptional<OSError_t> TryFetchOSError();
|
||||||
AuOptional<AuUInt32> TryFetchCError();
|
AuOptional<AuUInt32> TryFetchCError();
|
||||||
|
|
||||||
|
AuUInt32 ReportStackTrace(const StackTrace &trace, const AuString &message);
|
||||||
|
|
||||||
void CheckErrors();
|
void CheckErrors();
|
||||||
void PlatformHandleFatal(bool fatal);
|
void PlatformHandleFatal(bool fatal);
|
||||||
void InitDebug();
|
void InitDebug();
|
||||||
|
@ -143,11 +143,6 @@ namespace Aurora::Debug
|
|||||||
{
|
{
|
||||||
static bool handlingFatal = false;
|
static bool handlingFatal = false;
|
||||||
|
|
||||||
if (std::exchange(handlingFatal, true))
|
|
||||||
{
|
|
||||||
std::terminate();
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(DEBUG) || defined(INTERNAL)
|
#if defined(DEBUG) || defined(INTERNAL)
|
||||||
if (!fatal)
|
if (!fatal)
|
||||||
{
|
{
|
||||||
@ -156,7 +151,7 @@ namespace Aurora::Debug
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SaveMinidump(pExceptionInfo);
|
SaveMinidump(pExceptionInfo, true);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
BlackboxReport(pExceptionInfo, true);
|
BlackboxReport(pExceptionInfo, true);
|
||||||
@ -194,8 +189,15 @@ static thread_local AuUInt tlsThrowCounter;
|
|||||||
|
|
||||||
extern "C" AUKN_SYM void __stdcall _ReportMSVCSEH(void *exception, const void *throwInfo, void *caller)
|
extern "C" AUKN_SYM void __stdcall _ReportMSVCSEH(void *exception, const void *throwInfo, void *caller)
|
||||||
{
|
{
|
||||||
if (!throwInfo) return;
|
if (!throwInfo)
|
||||||
if (!exception) return;
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!exception)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
HMODULE handle = 0;
|
HMODULE handle = 0;
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
#include <Source/Process/ProcessMap.hpp>
|
#include <Source/Process/ProcessMap.hpp>
|
||||||
#include <Source/IO/FS/FS.hpp>
|
#include <Source/IO/FS/FS.hpp>
|
||||||
|
|
||||||
|
#include <Source/Console/Flusher.hpp>
|
||||||
|
|
||||||
static thread_local int gDebugLocked = 0;
|
static thread_local int gDebugLocked = 0;
|
||||||
|
|
||||||
namespace Aurora::Debug
|
namespace Aurora::Debug
|
||||||
@ -112,7 +114,6 @@ namespace Aurora::Debug
|
|||||||
return EXCEPTION_CONTINUE_SEARCH;
|
return EXCEPTION_CONTINUE_SEARCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
auto minimal = gDebugLocked++;
|
auto minimal = gDebugLocked++;
|
||||||
|
|
||||||
if (minimal >= 5)
|
if (minimal >= 5)
|
||||||
@ -194,6 +195,8 @@ namespace Aurora::Debug
|
|||||||
{
|
{
|
||||||
PlatformHandleFatal(true);
|
PlatformHandleFatal(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Console::ForceFlush();
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
@ -219,9 +222,9 @@ namespace Aurora::Debug
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
auto tm = Time::ToCivilTime(Time::CurrentClockMS());
|
auto tm = Time::ToCivilTime(Time::CurrentClockMS());
|
||||||
return fmt::format("{}-{}-{}T{}-{}-{}Z_{}.dmp", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
|
return fmt::format("{}-{}-{}T{}-{}-{}Z_{}.dmp", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
|
||||||
tm.tm_hour, tm.tm_min, tm.tm_sec,
|
tm.tm_hour, tm.tm_min, tm.tm_sec,
|
||||||
exeName);
|
exeName);
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
@ -230,7 +233,7 @@ namespace Aurora::Debug
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DEBUG) || defined(INTERNAL)
|
#if defined(DEBUG) || defined(INTERNAL)
|
||||||
void SaveMinidump(_EXCEPTION_POINTERS *ExceptionInfo)
|
void SaveMinidump(_EXCEPTION_POINTERS *ExceptionInfo, bool isFatal)
|
||||||
{
|
{
|
||||||
bool ok {};
|
bool ok {};
|
||||||
MINIDUMP_EXCEPTION_INFORMATION info;
|
MINIDUMP_EXCEPTION_INFORMATION info;
|
||||||
@ -288,9 +291,10 @@ namespace Aurora::Debug
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
__debugbreak();
|
if (isFatal)
|
||||||
|
{
|
||||||
__fastfail('fokd');
|
__fastfail('fokd');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ namespace Aurora::Debug
|
|||||||
void InitWin32();
|
void InitWin32();
|
||||||
|
|
||||||
#if defined(DEBUG) || defined(INTERNAL)
|
#if defined(DEBUG) || defined(INTERNAL)
|
||||||
void SaveMinidump(_EXCEPTION_POINTERS *ExceptionInfo);
|
void SaveMinidump(_EXCEPTION_POINTERS *ExceptionInfo, bool isFatal);
|
||||||
#endif
|
#endif
|
||||||
void BlackboxReport(_EXCEPTION_POINTERS *ExceptionInfo, bool isFatal);
|
void BlackboxReport(_EXCEPTION_POINTERS *ExceptionInfo, bool isFatal);
|
||||||
}
|
}
|
@ -320,32 +320,32 @@ namespace Aurora::HWInfo
|
|||||||
AuString CpuId::ToString() const
|
AuString CpuId::ToString() const
|
||||||
{
|
{
|
||||||
return fmt::format(
|
return fmt::format(
|
||||||
"FMA {}\t\tFSGSBASE {}\t\tCLFSH {}\t\tERMS {}{}"
|
"FMA {}\t\tFSGSBASE {}\t\tCLFSH {}\t\t\tERMS {}{}"
|
||||||
"CMPXCHG16B {}\t\tAVX512PF {}\t\tMOVBE {}\t\tRTM {}{}"
|
"CMPXCHG16B {}\t\tAVX512PF {}\t\tMOVBE {}\t\t\tRTM {}{}"
|
||||||
"POPCNT {}\t\tAVX512ER {}\t\tMONITOR {}\t\tLAHF {}{}"
|
"POPCNT {}\t\tAVX512ER {}\t\tMONITOR {}\t\t\tLAHF {}{}"
|
||||||
"SSE {}\t\tAVX512CD {}\t\tF16C {}\t\tABM {}{}"
|
"SSE {}\t\tAVX512CD {}\t\tF16C {}\t\t\tABM {}{}"
|
||||||
"SSE2 {}\t\tSYSCALL {}\t\tRDRAND {}\t\tXOP {}{}"
|
"SSE2 {}\t\tSYSCALL {}\t\tRDRAND {}\t\t\tXOP {}{}"
|
||||||
"SSE3 {}\t\tAES {}\t\tMSR {}\t\tTBM {}{}"
|
"SSE3 {}\t\tAES {}\t\tMSR {}\t\t\tTBM {}{}"
|
||||||
"SSSE3 {}\t\tRDTSCP {}\t\tCX8 {}\t\tMMXEXT {}{}"
|
"SSSE3 {}\t\tRDTSCP {}\t\tCX8 {}\t\t\tMMXEXT {}{}"
|
||||||
"SSE41 {}\t\tXSAVE {}\t\tSEP {}\t\tRDSEED {}{}"
|
"SSE41 {}\t\tXSAVE {}\t\tSEP {}\t\t\tRDSEED {}{}"
|
||||||
"SSE42 {}\t\tOSXSAVE {}\t\tCMOV {}\t\tPREFETCHWT1 {}{}"
|
"SSE42 {}\t\tOSXSAVE {}\t\tCMOV {}\t\t\tPREFETCHWT1 {}{}"
|
||||||
"SSE4a {}\t\tSHA {}\t\tFXSR {}\t\tPCLMULQDQ {}{}"
|
"SSE4a {}\t\tSHA {}\t\tFXSR {}\t\t\tPCLMULQDQ {}{}"
|
||||||
"AVX {}\t\tAVX512F {}\t\tBMI1 {}\t\tINVPCID {}{}"
|
"AVX {}\t\tAVX512F {}\t\tBMI1 {}\t\t\tINVPCID {}{}"
|
||||||
"AVX2 {}\t\tLZCNT {}\t\tHLE {}\t\t_3DNOWEXT {}{}"
|
"AVX2 {}\t\tLZCNT {}\t\tHLE {}\t\t\t_3DNOWEXT {}{}"
|
||||||
"MMX {}\t\tADX {}\t\tBMI2 {}\t\t_3DNOW {}",
|
"MMX {}\t\tADX {}\t\tBMI2 {}\t\t\t_3DNOW {}",
|
||||||
FMA(), FSGSBASE(), CLFSH(), ERMS(), Aurora::Locale::NewLine(),
|
FMA(), FSGSBASE(), CLFSH(), ERMS(), Aurora::Locale::NewLine(),
|
||||||
CMPXCHG16B(), AVX512PF(), MOVBE(), RTM(), Aurora::Locale::NewLine(),
|
CMPXCHG16B(), AVX512PF(), MOVBE(), RTM(), Aurora::Locale::NewLine(),
|
||||||
POPCNT(), AVX512ER(), MONITOR(), LAHF(), Aurora::Locale::NewLine(),
|
POPCNT(), AVX512ER(), MONITOR(), LAHF(), Aurora::Locale::NewLine(),
|
||||||
SSE(), AVX512CD(), F16C(), ABM(), Aurora::Locale::NewLine(),
|
SSE(), AVX512CD(), F16C(), ABM(), Aurora::Locale::NewLine(),
|
||||||
SSE2(), SYSCALL(), RDRAND(), XOP(), Aurora::Locale::NewLine(),
|
SSE2(), SYSCALL(), RDRAND(), XOP(), Aurora::Locale::NewLine(),
|
||||||
SSE3(), AES(), MSR(), TBM(), Aurora::Locale::NewLine(),
|
SSE3(), AES(), MSR(), TBM(), Aurora::Locale::NewLine(),
|
||||||
SSSE3(), RDTSCP(), CX8(), MMXEXT(), Aurora::Locale::NewLine(),
|
SSSE3(), RDTSCP(), CX8(), MMXEXT(), Aurora::Locale::NewLine(),
|
||||||
SSE41(), XSAVE(), SEP(), RDSEED(), Aurora::Locale::NewLine(),
|
SSE41(), XSAVE(), SEP(), RDSEED(), Aurora::Locale::NewLine(),
|
||||||
SSE42(), OSXSAVE(), CMOV(), PREFETCHWT1(), Aurora::Locale::NewLine(),
|
SSE42(), OSXSAVE(), CMOV(), PREFETCHWT1(), Aurora::Locale::NewLine(),
|
||||||
SSE4a(), SHA(), FXSR(), PCLMULQDQ(), Aurora::Locale::NewLine(),
|
SSE4a(), SHA(), FXSR(), PCLMULQDQ(), Aurora::Locale::NewLine(),
|
||||||
AVX(), AVX512F(), BMI1(), INVPCID(), Aurora::Locale::NewLine(),
|
AVX(), AVX512F(), BMI1(), INVPCID(), Aurora::Locale::NewLine(),
|
||||||
AVX2(), LZCNT(), HLE(), _3DNOWEXT(), Aurora::Locale::NewLine(),
|
AVX2(), LZCNT(), HLE(), _3DNOWEXT(), Aurora::Locale::NewLine(),
|
||||||
MMX(), ADX(), BMI2(), _3DNOW()
|
MMX(), ADX(), BMI2(), _3DNOW()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +129,6 @@ namespace Aurora::HWInfo
|
|||||||
gCpuInfo.cores = 0;
|
gCpuInfo.cores = 0;
|
||||||
gCpuInfo.threads = 0;
|
gCpuInfo.threads = 0;
|
||||||
|
|
||||||
|
|
||||||
bool sparse = false;
|
bool sparse = false;
|
||||||
for (auto i = 0; i < length; i++)
|
for (auto i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user