mirror of
https://github.com/asmjit/asmjit
synced 2026-06-08 13:13:30 +00:00
3fcd65cf80
- Compiler no longer works on its own, it requires Assembler. - Labels created by Assembler and Compiler now share their IDs, so they can be used nearly interchangeably without weird side-effects and hacks. - Renamed getError() and setError() to getLastError() and setLastError(). - Renamed compiler nodes to "HL" nodes (preparation for HLStream). - Renamed FuncConv to CallConv. - Function calling convention is now part of FuncPrototype. - Added a possibility to align by inserting zeros (kAlignZero) - Fixed assertion in X86Compiler that didn't like unhandled function argument(s). - Added Compiler::embedConstPool() helper, which can be handy if you use your own ConstPool. - Code refactorization and other minor changes. - CpuTicks::now() renamed to Utils::getTickCount(). - error.h merged with globals.h - Documentation updates related to recent API changes.
80 lines
1.8 KiB
C++
80 lines
1.8 KiB
C++
// [AsmJit]
|
|
// Complete x86/x64 JIT and Remote Assembler for C++.
|
|
//
|
|
// [License]
|
|
// Zlib - See LICENSE.md file in the package.
|
|
|
|
// [Export]
|
|
#define ASMJIT_EXPORTS
|
|
|
|
// [Dependencies - AsmJit]
|
|
#include "../base/cpuinfo.h"
|
|
|
|
#if ASMJIT_ARCH_X86 || ASMJIT_ARCH_X64
|
|
#include "../x86/x86cpuinfo.h"
|
|
#else
|
|
// ?
|
|
#endif
|
|
|
|
// [Dependencies - Posix]
|
|
#if ASMJIT_OS_POSIX
|
|
# include <errno.h>
|
|
# include <sys/statvfs.h>
|
|
# include <sys/utsname.h>
|
|
# include <unistd.h>
|
|
#endif // ASMJIT_OS_POSIX
|
|
|
|
// [Api-Begin]
|
|
#include "../apibegin.h"
|
|
|
|
namespace asmjit {
|
|
|
|
// ============================================================================
|
|
// [asmjit::CpuInfo - DetectHwThreadsCount]
|
|
// ============================================================================
|
|
|
|
uint32_t CpuInfo::detectHwThreadsCount() {
|
|
#if ASMJIT_OS_WINDOWS
|
|
SYSTEM_INFO info;
|
|
::GetSystemInfo(&info);
|
|
return info.dwNumberOfProcessors;
|
|
#elif ASMJIT_OS_POSIX && defined(_SC_NPROCESSORS_ONLN)
|
|
// It seems that sysconf returns the number of "logical" processors on both
|
|
// mac and linux. So we get the number of "online logical" processors.
|
|
long res = ::sysconf(_SC_NPROCESSORS_ONLN);
|
|
if (res == -1) return 1;
|
|
|
|
return static_cast<uint32_t>(res);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
// ============================================================================
|
|
// [asmjit::CpuInfo - GetHost]
|
|
// ============================================================================
|
|
|
|
#if ASMJIT_ARCH_X86 || ASMJIT_ARCH_X64
|
|
struct AutoX86CpuInfo : public X86CpuInfo {
|
|
ASMJIT_INLINE AutoX86CpuInfo() : X86CpuInfo() {
|
|
X86CpuUtil::detect(this);
|
|
}
|
|
};
|
|
#else
|
|
#error "[asmjit] Unsupported CPU."
|
|
#endif
|
|
|
|
const CpuInfo* CpuInfo::getHost() {
|
|
#if ASMJIT_ARCH_X86 || ASMJIT_ARCH_X64
|
|
static AutoX86CpuInfo cpuInfo;
|
|
#else
|
|
#error "[asmjit] Unsupported CPU."
|
|
#endif
|
|
return &cpuInfo;
|
|
}
|
|
|
|
} // asmjit namespace
|
|
|
|
// [Api-End]
|
|
#include "../apiend.h"
|