[+] Added ToString to CpuId

[*] Added const modifier to cpuid functions
[*] Added OnExit to planned API interface
[*] BlobReader now holds onto a handle of a ByteBuffer, allowing for shared usage -> aiding in the mitigation of allocations/second and needless heavy copy of objects
This commit is contained in:
Reece Wilson 2022-01-27 07:45:42 +00:00
parent d7c6d66fad
commit 5bc1985eca
5 changed files with 179 additions and 116 deletions

View File

@ -19,19 +19,42 @@ namespace Aurora::Console
/// Writes a log message to the console subscribers and telemetry outputs /// Writes a log message to the console subscribers and telemetry outputs
AUKN_SYM void WriteLine(AuUInt8 level, const ConsoleMessage &msg); AUKN_SYM void WriteLine(AuUInt8 level, const ConsoleMessage &msg);
/**
* @brief Overloads the ILogger backend of the AuLogXX functions
* @param defaultGlobalLogger
* @return
*/
AUKN_SYM void SetGlobalLogger(const AuSPtr<Logging::ILogger> &defaultGlobalLogger); AUKN_SYM void SetGlobalLogger(const AuSPtr<Logging::ILogger> &defaultGlobalLogger);
/**
* @brief Returns the untouched ILogger interface of the AuLogXX functions as configured by the Aurora::RuntimeStartInfo structure
* @return
*/
AUKN_SYM AuSPtr<Logging::ILogger> GetDefaultLogInterface(); AUKN_SYM AuSPtr<Logging::ILogger> GetDefaultLogInterface();
/// Consider using the following function for asynchronous utf-8 processed line based input - /**
/// Hooks::SetCallbackAndDisableCmdProcessing(...) * @brief Async read of the underlying binary stream, unlocalized and potentially being consumed by other users.
* Consider using `Hooks::SetCallbackAndDisableCmdProcessing` for asynchronous utf-8 processed line based input
* @param buffer
* @param length
* @return
*/
AUKN_SYM AuUInt32 ReadStdIn(void *buffer, AuUInt32 length); AUKN_SYM AuUInt32 ReadStdIn(void *buffer, AuUInt32 length);
/// Consider using AuLog for general purpose use /**
* @brief Synchronous binary write to the applications stdout stream. Consider using `AuLogInfo` for general purpose messaging
* @param buffer
* @param length
* @return
*/
AUKN_SYM AuUInt32 WriteStdOut(const void *buffer, AuUInt32 length); AUKN_SYM AuUInt32 WriteStdOut(const void *buffer, AuUInt32 length);
/** /**
* Simulates a processed stdin line given a UTF8 string * @brief Simulates an input line from an internal logger/console interface given a UTF-8 string
*/ * @param string
* @return
*/
AUKN_SYM bool DispatchRawLine(const AuString &string); AUKN_SYM bool DispatchRawLine(const AuString &string);
AUKN_SYM void OpenLateStd(); AUKN_SYM void OpenLateStd();

View File

@ -11,63 +11,65 @@ namespace Aurora::HWInfo
{ {
struct AUKN_SYM CpuId struct AUKN_SYM CpuId
{ {
bool SSE3(); bool SSE3() const;
bool PCLMULQDQ(); bool PCLMULQDQ() const;
bool MONITOR(); bool MONITOR() const;
bool SSSE3(); bool SSSE3() const;
bool FMA(); bool FMA() const;
bool CMPXCHG16B(); bool CMPXCHG16B() const;
bool SSE41(); bool SSE41() const;
bool SSE42(); bool SSE42() const;
bool MOVBE(); bool MOVBE() const;
bool POPCNT(); bool POPCNT() const;
bool AES(); bool AES() const;
bool XSAVE(); bool XSAVE() const;
bool OSXSAVE(); bool OSXSAVE() const;
bool AVX(); bool AVX() const;
bool F16C(); bool F16C() const;
bool RDRAND(); bool RDRAND() const;
bool MSR(); bool MSR() const;
bool CX8(); bool CX8() const;
bool SEP(); bool SEP() const;
bool CMOV(); bool CMOV() const;
bool CLFSH(); bool CLFSH() const;
bool MMX(); bool MMX() const;
bool FXSR(); bool FXSR() const;
bool SSE(); bool SSE() const;
bool SSE2(); bool SSE2() const;
bool FSGSBASE(); bool FSGSBASE() const;
bool BMI1(); bool BMI1() const;
bool HLE(); bool HLE() const;
bool AVX2(); bool AVX2() const;
bool BMI2(); bool BMI2() const;
bool ERMS(); bool ERMS() const;
bool INVPCID(); bool INVPCID() const;
bool RTM(); bool RTM() const;
bool AVX512F(); bool AVX512F() const;
bool RDSEED(); bool RDSEED() const;
bool ADX(); bool ADX() const;
bool AVX512PF(); bool AVX512PF() const;
bool AVX512ER(); bool AVX512ER() const;
bool AVX512CD(); bool AVX512CD() const;
bool SHA(); bool SHA() const;
bool PREFETCHWT1(); bool PREFETCHWT1() const;
bool LAHF(); bool LAHF() const;
bool LZCNT(); bool LZCNT() const;
bool ABM(); bool ABM() const;
bool SSE4a(); bool SSE4a() const;
bool XOP(); bool XOP() const;
bool TBM(); bool TBM() const;
bool SYSCALL(); bool SYSCALL() const;
bool MMXEXT(); bool MMXEXT() const;
bool RDTSCP(); bool RDTSCP() const;
bool _3DNOWEXT(); bool _3DNOWEXT() const;
bool _3DNOW(); bool _3DNOW() const;
AuString ToString() const;
AuString vendor; AuString vendor;
AuString brand; AuString brand;

View File

@ -12,24 +12,29 @@ namespace Aurora::IO::Buffered
class BlobReader : public IStreamReader class BlobReader : public IStreamReader
{ {
public: public:
AU_NO_COPY_NO_MOVE(BlobReader) AU_NO_COPY(BlobReader)
BlobReader(const Memory::ByteBuffer &buffer) : buffer_(buffer) {} BlobReader(const AuSPtr<Memory::ByteBuffer> &buffer) : buffer_(buffer) {}
BlobReader(Memory::ByteBuffer &&buffer) : buffer_(AuMakeShared<Memory::ByteBuffer>(buffer)) {}
BlobReader(const Memory::ByteBuffer &buffer) : buffer_(AuMakeShared<Memory::ByteBuffer>(buffer)) {}
BlobReader() {} BlobReader() {}
~BlobReader() {} ~BlobReader() {}
virtual EStreamError Open() override virtual EStreamError Open() override
{ {
if (!buffer_) return EStreamError::eErrorStreamNotOpen;
if (!buffer_->operator bool()) return EStreamError::eErrorStreamNotOpen;
return EStreamError::eErrorNone; return EStreamError::eErrorNone;
} }
virtual EStreamError Read(const Memory::MemoryViewStreamWrite &paramters) override virtual EStreamError Read(const Memory::MemoryViewStreamWrite &paramters) override
{ {
auto realEndOffset = AuMin(buffer_.size() - offset_, paramters.length); auto realEndOffset = AuMin(buffer_->size() - offset_, paramters.length);
if (realEndOffset == 0) return EStreamError::eErrorEndOfStream; if (realEndOffset == 0) return EStreamError::eErrorEndOfStream;
paramters.outVariable = realEndOffset; paramters.outVariable = realEndOffset;
AuMemcpy(paramters.ptr, buffer_.data() + offset_, realEndOffset); AuMemcpy(paramters.ptr, buffer_->data() + offset_, realEndOffset);
offset_ += realEndOffset; offset_ += realEndOffset;
return EStreamError::eErrorNone; return EStreamError::eErrorNone;
@ -37,11 +42,11 @@ namespace Aurora::IO::Buffered
virtual void Close() override virtual void Close() override
{ {
buffer_.clear(); buffer_->clear();
} }
private: private:
Memory::ByteBuffer buffer_; AuSPtr<Memory::ByteBuffer> buffer_;
AuUInt32 offset_ {}; AuUInt32 offset_ {};
}; };
} }

View File

@ -11,7 +11,8 @@ namespace Aurora::Processes
{ {
AUKN_INTERFACE(ICommandFinished, AUKN_INTERFACE(ICommandFinished,
AUI_METHOD(void, OnLines, (const AuList<AuString> &, buffer)), AUI_METHOD(void, OnLines, (const AuList<AuString> &, buffer)),
AUI_METHOD(void, OnBuffered, (const Memory::ByteBuffer &, buffer)) AUI_METHOD(void, OnBuffered, (const Memory::ByteBuffer &, buffer)),
AUI_METHOD(void, OnExit, (AuUInt32, exitCode))
); );
struct CommandRun_s struct CommandRun_s

View File

@ -57,266 +57,298 @@ namespace Aurora::HWInfo
} }
#endif #endif
bool CpuId::SSE3() bool CpuId::SSE3() const
{ {
return AuTestBit(f_1_ECX, 0); return AuTestBit(f_1_ECX, 0);
} }
bool CpuId::PCLMULQDQ() bool CpuId::PCLMULQDQ() const
{ {
return AuTestBit(f_1_ECX, 1); return AuTestBit(f_1_ECX, 1);
} }
bool CpuId::MONITOR() bool CpuId::MONITOR() const
{ {
return AuTestBit(f_1_ECX, 3); return AuTestBit(f_1_ECX, 3);
} }
bool CpuId::SSSE3() bool CpuId::SSSE3() const
{ {
return AuTestBit(f_1_ECX, 9); return AuTestBit(f_1_ECX, 9);
} }
bool CpuId::FMA() bool CpuId::FMA() const
{ {
return AuTestBit(f_1_ECX, 12); return AuTestBit(f_1_ECX, 12);
} }
bool CpuId::CMPXCHG16B() bool CpuId::CMPXCHG16B() const
{ {
return AuTestBit(f_1_ECX, 13); return AuTestBit(f_1_ECX, 13);
} }
bool CpuId::SSE41() bool CpuId::SSE41() const
{ {
return AuTestBit(f_1_ECX, 19); return AuTestBit(f_1_ECX, 19);
} }
bool CpuId::SSE42() bool CpuId::SSE42() const
{ {
return AuTestBit(f_1_ECX, 20); return AuTestBit(f_1_ECX, 20);
} }
bool CpuId::MOVBE() bool CpuId::MOVBE() const
{ {
return AuTestBit(f_1_ECX, 22); return AuTestBit(f_1_ECX, 22);
} }
bool CpuId::POPCNT() bool CpuId::POPCNT() const
{ {
return AuTestBit(f_1_ECX, 23); return AuTestBit(f_1_ECX, 23);
} }
bool CpuId::AES() bool CpuId::AES() const
{ {
return AuTestBit(f_1_ECX, 25); return AuTestBit(f_1_ECX, 25);
} }
bool CpuId::XSAVE() bool CpuId::XSAVE() const
{ {
return AuTestBit(f_1_ECX, 26); return AuTestBit(f_1_ECX, 26);
} }
bool CpuId::OSXSAVE() bool CpuId::OSXSAVE() const
{ {
return AuTestBit(f_1_ECX, 27); return AuTestBit(f_1_ECX, 27);
} }
bool CpuId::AVX() bool CpuId::AVX() const
{ {
return AuTestBit(f_1_ECX, 28); return AuTestBit(f_1_ECX, 28);
} }
bool CpuId::F16C() bool CpuId::F16C() const
{ {
return AuTestBit(f_1_ECX, 29); return AuTestBit(f_1_ECX, 29);
} }
bool CpuId::RDRAND() bool CpuId::RDRAND() const
{ {
return AuTestBit(f_1_ECX, 30); return AuTestBit(f_1_ECX, 30);
} }
bool CpuId::MSR() bool CpuId::MSR() const
{ {
return AuTestBit(f_1_EDX, 5); return AuTestBit(f_1_EDX, 5);
} }
bool CpuId::CX8() bool CpuId::CX8() const
{ {
return AuTestBit(f_1_EDX, 8); return AuTestBit(f_1_EDX, 8);
} }
bool CpuId::SEP() bool CpuId::SEP() const
{ {
return AuTestBit(f_1_EDX, 11); return AuTestBit(f_1_EDX, 11);
} }
bool CpuId::CMOV() bool CpuId::CMOV() const
{ {
return AuTestBit(f_1_EDX, 15); return AuTestBit(f_1_EDX, 15);
} }
bool CpuId::CLFSH() bool CpuId::CLFSH() const
{ {
return AuTestBit(f_1_EDX, 19); return AuTestBit(f_1_EDX, 19);
} }
bool CpuId::MMX() bool CpuId::MMX() const
{ {
return AuTestBit(f_1_EDX, 23); return AuTestBit(f_1_EDX, 23);
} }
bool CpuId::FXSR() bool CpuId::FXSR() const
{ {
return AuTestBit(f_1_EDX, 24); return AuTestBit(f_1_EDX, 24);
} }
bool CpuId::SSE() bool CpuId::SSE() const
{ {
return AuTestBit(f_1_EDX, 25); return AuTestBit(f_1_EDX, 25);
} }
bool CpuId::SSE2() bool CpuId::SSE2() const
{ {
return AuTestBit(f_1_EDX, 26); return AuTestBit(f_1_EDX, 26);
} }
bool CpuId::FSGSBASE() bool CpuId::FSGSBASE() const
{ {
return AuTestBit(f_7_EBX, 0); return AuTestBit(f_7_EBX, 0);
} }
bool CpuId::BMI1() bool CpuId::BMI1() const
{ {
return AuTestBit(f_7_EBX, 3); return AuTestBit(f_7_EBX, 3);
} }
bool CpuId::HLE() bool CpuId::HLE() const
{ {
return isIntel && AuTestBit(f_7_EBX, 4); return isIntel && AuTestBit(f_7_EBX, 4);
} }
bool CpuId::AVX2() bool CpuId::AVX2() const
{ {
return AuTestBit(f_7_EBX, 5); return AuTestBit(f_7_EBX, 5);
} }
bool CpuId::BMI2() bool CpuId::BMI2() const
{ {
return AuTestBit(f_7_EBX, 8); return AuTestBit(f_7_EBX, 8);
} }
bool CpuId::ERMS() bool CpuId::ERMS() const
{ {
return AuTestBit(f_7_EBX, 9); return AuTestBit(f_7_EBX, 9);
} }
bool CpuId::INVPCID() bool CpuId::INVPCID() const
{ {
return AuTestBit(f_7_EBX, 10); return AuTestBit(f_7_EBX, 10);
} }
bool CpuId::RTM() bool CpuId::RTM() const
{ {
return isIntel && AuTestBit(f_7_EBX, 11); return isIntel && AuTestBit(f_7_EBX, 11);
} }
bool CpuId::AVX512F() bool CpuId::AVX512F() const
{ {
return AuTestBit(f_7_EBX, 16); return AuTestBit(f_7_EBX, 16);
} }
bool CpuId::RDSEED() bool CpuId::RDSEED() const
{ {
return AuTestBit(f_7_EBX, 18); return AuTestBit(f_7_EBX, 18);
} }
bool CpuId::ADX() bool CpuId::ADX() const
{ {
return AuTestBit(f_7_EBX, 19); return AuTestBit(f_7_EBX, 19);
} }
bool CpuId::AVX512PF() bool CpuId::AVX512PF() const
{ {
return AuTestBit(f_7_EBX, 26); return AuTestBit(f_7_EBX, 26);
} }
bool CpuId::AVX512ER() bool CpuId::AVX512ER() const
{ {
return AuTestBit(f_7_EBX, 27); return AuTestBit(f_7_EBX, 27);
} }
bool CpuId::AVX512CD() bool CpuId::AVX512CD() const
{ {
return AuTestBit(f_7_EBX, 28); return AuTestBit(f_7_EBX, 28);
} }
bool CpuId::SHA() bool CpuId::SHA() const
{ {
return AuTestBit(f_7_EBX, 29); return AuTestBit(f_7_EBX, 29);
} }
bool CpuId::PREFETCHWT1() bool CpuId::PREFETCHWT1() const
{ {
return AuTestBit(f_7_ECX, 0); return AuTestBit(f_7_ECX, 0);
} }
bool CpuId::LAHF() bool CpuId::LAHF() const
{ {
return AuTestBit(f_81_ECX, 0); return AuTestBit(f_81_ECX, 0);
} }
bool CpuId::LZCNT() bool CpuId::LZCNT() const
{ {
return isIntel && AuTestBit(f_81_ECX, 5); return isIntel && AuTestBit(f_81_ECX, 5);
} }
bool CpuId::ABM() bool CpuId::ABM() const
{ {
return isAMD && AuTestBit(f_81_ECX, 5); return isAMD && AuTestBit(f_81_ECX, 5);
} }
bool CpuId::SSE4a() bool CpuId::SSE4a() const
{ {
return isAMD && AuTestBit(f_81_ECX, 6); return isAMD && AuTestBit(f_81_ECX, 6);
} }
bool CpuId::XOP() bool CpuId::XOP() const
{ {
return isAMD && AuTestBit(f_81_ECX, 11); return isAMD && AuTestBit(f_81_ECX, 11);
} }
bool CpuId::TBM() bool CpuId::TBM() const
{ {
return isAMD && AuTestBit(f_81_ECX, 21); return isAMD && AuTestBit(f_81_ECX, 21);
} }
bool CpuId::SYSCALL() bool CpuId::SYSCALL() const
{ {
return isIntel && AuTestBit(f_81_EDX, 11); return isIntel && AuTestBit(f_81_EDX, 11);
} }
bool CpuId::MMXEXT() bool CpuId::MMXEXT() const
{ {
return isAMD && AuTestBit(f_81_EDX, 22); return isAMD && AuTestBit(f_81_EDX, 22);
} }
bool CpuId::RDTSCP() bool CpuId::RDTSCP() const
{ {
return isIntel && AuTestBit(f_81_EDX, 27); return isIntel && AuTestBit(f_81_EDX, 27);
} }
bool CpuId::_3DNOWEXT() bool CpuId::_3DNOWEXT() const
{ {
return isAMD && AuTestBit(f_81_EDX, 30); return isAMD && AuTestBit(f_81_EDX, 30);
} }
bool CpuId::_3DNOW() bool CpuId::_3DNOW() const
{ {
return isAMD && AuTestBit(f_81_EDX, 31); return isAMD && AuTestBit(f_81_EDX, 31);
} }
AuString CpuId::ToString() const
{
return fmt::format(
"FMA {}\t\tFSGSBASE {}\t\tCLFSH {}\t\tERMS {}{}"
"CMPXCHG16B {}\t\tAVX512PF {}\t\tMOVBE {}\t\tRTM {}{}"
"POPCNT {}\t\tAVX512ER {}\t\tMONITOR {}\t\tLAHF {}{}"
"SSE {}\t\tAVX512CD {}\t\tF16C {}\t\tABM {}{}"
"SSE2 {}\t\tSYSCALL {}\t\tRDRAND {}\t\tXOP {}{}"
"SSE3 {}\t\tAES {}\t\tMSR {}\t\tTBM {}{}"
"SSSE3 {}\t\tRDTSCP {}\t\tCX8 {}\t\tMMXEXT {}{}"
"SSE41 {}\t\tXSAVE {}\t\tSEP {}\t\tRDSEED {}{}"
"SSE42 {}\t\tOSXSAVE {}\t\tCMOV {}\t\tPREFETCHWT1 {}{}"
"SSE4a {}\t\tSHA {}\t\tFXSR {}\t\tPCLMULQDQ {}{}"
"AVX {}\t\tAVX512F {}\t\tBMI1 {}\t\tINVPCID {}{}"
"AVX2 {}\t\tLZCNT {}\t\tHLE {}\t\t_3DNOWEXT {}{}"
"MMX {}\t\tADX {}\t\tBMI2 {}\t\t_3DNOW {}",
FMA(), FSGSBASE(), CLFSH(), ERMS(), Aurora::Locale::NewLine(),
CMPXCHG16B(), AVX512PF(), MOVBE(), RTM(), Aurora::Locale::NewLine(),
POPCNT(), AVX512ER(), MONITOR(), LAHF(), Aurora::Locale::NewLine(),
SSE(), AVX512CD(), F16C(), ABM(), Aurora::Locale::NewLine(),
SSE2(), SYSCALL(), RDRAND(), XOP(), Aurora::Locale::NewLine(),
SSE3(), AES(), MSR(), TBM(), Aurora::Locale::NewLine(),
SSSE3(), RDTSCP(), CX8(), MMXEXT(), Aurora::Locale::NewLine(),
SSE41(), XSAVE(), SEP(), RDSEED(), Aurora::Locale::NewLine(),
SSE42(), OSXSAVE(), CMOV(), PREFETCHWT1(), Aurora::Locale::NewLine(),
SSE4a(), SHA(), FXSR(), PCLMULQDQ(), Aurora::Locale::NewLine(),
AVX(), AVX512F(), BMI1(), INVPCID(), Aurora::Locale::NewLine(),
AVX2(), LZCNT(), HLE(), _3DNOWEXT(), Aurora::Locale::NewLine(),
MMX(), ADX(), BMI2(), _3DNOW()
);
}
AUKN_SYM const CpuInfo &GetCPUInfo() AUKN_SYM const CpuInfo &GetCPUInfo()
{ {
return gCpuInfo; return gCpuInfo;