mirror of
https://github.com/asmjit/asmjit.git
synced 2025-12-17 12:34:35 +03:00
Added ability to disable logging at completely at compile-time (reducing asmjit size a bit).
Added ability to disable Compiler completely at compile-time (reducing asmjit size a lot).
This commit is contained in:
@@ -216,8 +216,10 @@ Error BaseAssembler::embed(const void* data, uint32_t size) {
|
|||||||
::memcpy(cursor, data, size);
|
::memcpy(cursor, data, size);
|
||||||
setCursor(cursor + size);
|
setCursor(cursor + size);
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
if (_logger)
|
if (_logger)
|
||||||
_logger->logBinary(kLoggerStyleData, data, size);
|
_logger->logBinary(kLoggerStyleData, data, size);
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
return kErrorOk;
|
return kErrorOk;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,10 +40,12 @@ CodeGen::~CodeGen() {
|
|||||||
// [asmjit::CodeGen - Logging]
|
// [asmjit::CodeGen - Logging]
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
Error CodeGen::setLogger(Logger* logger) {
|
Error CodeGen::setLogger(Logger* logger) {
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
return kErrorOk;
|
return kErrorOk;
|
||||||
}
|
}
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// [asmjit::CodeGen - Error]
|
// [asmjit::CodeGen - Error]
|
||||||
@@ -64,16 +66,19 @@ Error CodeGen::setError(Error error, const char* message) {
|
|||||||
if (handler != NULL && handler->handleError(error, message))
|
if (handler != NULL && handler->handleError(error, message))
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
Logger* logger = _logger;
|
Logger* logger = _logger;
|
||||||
if (logger != NULL) {
|
if (logger != NULL) {
|
||||||
logger->logFormat(kLoggerStyleComment,
|
logger->logFormat(kLoggerStyleComment,
|
||||||
"*** ERROR: %s (%u).\n", message, static_cast<unsigned int>(error));
|
"*** ERROR: %s (%u).\n", message, static_cast<unsigned int>(error));
|
||||||
}
|
}
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
// The handler->handleError() function may throw an exception or longjmp()
|
// The handler->handleError() function may throw an exception or longjmp()
|
||||||
// to terminate the execution of setError(). This is the reason why we have
|
// to terminate the execution of setError(). This is the reason why we have
|
||||||
// delayed changing the _error member until now.
|
// delayed changing the _error member until now.
|
||||||
_error = error;
|
_error = error;
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,46 +104,72 @@ struct CodeGen {
|
|||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
//! Get runtime.
|
//! Get runtime.
|
||||||
ASMJIT_INLINE Runtime* getRuntime() const { return _runtime; }
|
ASMJIT_INLINE Runtime* getRuntime() const {
|
||||||
|
return _runtime;
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// [Logger]
|
// [Logger]
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
//! Get whether the code generator has a logger.
|
//! Get whether the code generator has a logger.
|
||||||
ASMJIT_INLINE bool hasLogger() const { return _logger != NULL; }
|
ASMJIT_INLINE bool hasLogger() const {
|
||||||
|
return _logger != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//! Get logger.
|
//! Get logger.
|
||||||
ASMJIT_INLINE Logger* getLogger() const { return _logger; }
|
ASMJIT_INLINE Logger* getLogger() const {
|
||||||
|
return _logger;
|
||||||
|
}
|
||||||
|
|
||||||
//! Set logger to `logger`.
|
//! Set logger to `logger`.
|
||||||
ASMJIT_API Error setLogger(Logger* logger);
|
ASMJIT_API Error setLogger(Logger* logger);
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// [Arch]
|
// [Arch]
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
//! Get target architecture.
|
//! Get target architecture.
|
||||||
ASMJIT_INLINE uint32_t getArch() const { return _arch; }
|
ASMJIT_INLINE uint32_t getArch() const {
|
||||||
|
return _arch;
|
||||||
|
}
|
||||||
|
|
||||||
//! Get default register size (4 or 8 bytes).
|
//! Get default register size (4 or 8 bytes).
|
||||||
ASMJIT_INLINE uint32_t getRegSize() const { return _regSize; }
|
ASMJIT_INLINE uint32_t getRegSize() const {
|
||||||
|
return _regSize;
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// [Error]
|
// [Error]
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
//! Get last error code.
|
//! Get last error code.
|
||||||
ASMJIT_INLINE Error getError() const { return _error; }
|
ASMJIT_INLINE Error getError() const {
|
||||||
|
return _error;
|
||||||
|
}
|
||||||
|
|
||||||
//! Set last error code and propagate it through the error handler.
|
//! Set last error code and propagate it through the error handler.
|
||||||
ASMJIT_API Error setError(Error error, const char* message = NULL);
|
ASMJIT_API Error setError(Error error, const char* message = NULL);
|
||||||
|
|
||||||
//! Clear the last error code.
|
//! Clear the last error code.
|
||||||
ASMJIT_INLINE void clearError() { _error = kErrorOk; }
|
ASMJIT_INLINE void clearError() {
|
||||||
|
_error = kErrorOk;
|
||||||
|
}
|
||||||
|
|
||||||
//! Get error handler.
|
//! Get error handler.
|
||||||
ASMJIT_INLINE ErrorHandler* getErrorHandler() const { return _errorHandler; }
|
ASMJIT_INLINE ErrorHandler* getErrorHandler() const {
|
||||||
|
return _errorHandler;
|
||||||
|
}
|
||||||
|
|
||||||
//! Set error handler.
|
//! Set error handler.
|
||||||
ASMJIT_API Error setErrorHandler(ErrorHandler* handler);
|
ASMJIT_API Error setErrorHandler(ErrorHandler* handler);
|
||||||
|
|
||||||
//! Clear error handler.
|
//! Clear error handler.
|
||||||
ASMJIT_INLINE Error clearErrorHandler() { return setErrorHandler(NULL); }
|
ASMJIT_INLINE Error clearErrorHandler() {
|
||||||
|
return setErrorHandler(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// [Features]
|
// [Features]
|
||||||
@@ -201,8 +227,15 @@ struct CodeGen {
|
|||||||
|
|
||||||
//! Runtime.
|
//! Runtime.
|
||||||
Runtime* _runtime;
|
Runtime* _runtime;
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
//! Logger.
|
//! Logger.
|
||||||
Logger* _logger;
|
Logger* _logger;
|
||||||
|
#else
|
||||||
|
// Makes the libraries built with/without logging support binary compatible.
|
||||||
|
void* _logger;
|
||||||
|
#endif // ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
//! Error handler, called by \ref setError().
|
//! Error handler, called by \ref setError().
|
||||||
ErrorHandler* _errorHandler;
|
ErrorHandler* _errorHandler;
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
// [Export]
|
// [Export]
|
||||||
#define ASMJIT_EXPORTS
|
#define ASMJIT_EXPORTS
|
||||||
|
|
||||||
|
// [Guard]
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_COMPILER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/assembler.h"
|
#include "../base/assembler.h"
|
||||||
#include "../base/compiler.h"
|
#include "../base/compiler.h"
|
||||||
@@ -583,3 +587,6 @@ void BaseCompiler::rename(BaseVar& var, const char* name) {
|
|||||||
|
|
||||||
// [Api-End]
|
// [Api-End]
|
||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_COMPILER
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#ifndef _ASMJIT_BASE_COMPILER_H
|
#ifndef _ASMJIT_BASE_COMPILER_H
|
||||||
#define _ASMJIT_BASE_COMPILER_H
|
#define _ASMJIT_BASE_COMPILER_H
|
||||||
|
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_COMPILER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/assembler.h"
|
#include "../base/assembler.h"
|
||||||
#include "../base/codegen.h"
|
#include "../base/codegen.h"
|
||||||
@@ -2103,4 +2106,5 @@ ASMJIT_INLINE Node::Node(BaseCompiler* compiler, uint32_t type) {
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_COMPILER
|
||||||
#endif // _ASMJIT_BASE_COMPILER_H
|
#endif // _ASMJIT_BASE_COMPILER_H
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
// [Export]
|
// [Export]
|
||||||
#define ASMJIT_EXPORTS
|
#define ASMJIT_EXPORTS
|
||||||
|
|
||||||
|
// [Guard]
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_COMPILER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/context_p.h"
|
#include "../base/context_p.h"
|
||||||
#include "../base/intutil.h"
|
#include "../base/intutil.h"
|
||||||
@@ -329,8 +333,10 @@ Error BaseContext::compile(FuncNode* func) {
|
|||||||
ASMJIT_PROPAGATE_ERROR(removeUnreachableCode());
|
ASMJIT_PROPAGATE_ERROR(removeUnreachableCode());
|
||||||
ASMJIT_PROPAGATE_ERROR(analyze());
|
ASMJIT_PROPAGATE_ERROR(analyze());
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
if (_compiler->hasLogger())
|
if (_compiler->hasLogger())
|
||||||
ASMJIT_PROPAGATE_ERROR(annotate());
|
ASMJIT_PROPAGATE_ERROR(annotate());
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
ASMJIT_PROPAGATE_ERROR(translate());
|
ASMJIT_PROPAGATE_ERROR(translate());
|
||||||
|
|
||||||
@@ -346,3 +352,6 @@ Error BaseContext::compile(FuncNode* func) {
|
|||||||
|
|
||||||
// [Api-End]
|
// [Api-End]
|
||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_COMPILER
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#ifndef _ASMJIT_BASE_CONTEXT_P_H
|
#ifndef _ASMJIT_BASE_CONTEXT_P_H
|
||||||
#define _ASMJIT_BASE_CONTEXT_P_H
|
#define _ASMJIT_BASE_CONTEXT_P_H
|
||||||
|
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_COMPILER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/compiler.h"
|
#include "../base/compiler.h"
|
||||||
#include "../base/zone.h"
|
#include "../base/zone.h"
|
||||||
@@ -285,4 +288,5 @@ struct BaseContext {
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_COMPILER
|
||||||
#endif // _ASMJIT_BASE_CONTEXT_P_H
|
#endif // _ASMJIT_BASE_CONTEXT_P_H
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#ifndef _ASMJIT_BASE_FUNC_H
|
#ifndef _ASMJIT_BASE_FUNC_H
|
||||||
#define _ASMJIT_BASE_FUNC_H
|
#define _ASMJIT_BASE_FUNC_H
|
||||||
|
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_COMPILER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/operand.h"
|
#include "../base/operand.h"
|
||||||
|
|
||||||
@@ -644,4 +647,5 @@ struct FuncBuilder10 : public FuncPrototype {
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_COMPILER
|
||||||
#endif // _ASMJIT_BASE_FUNC_H
|
#endif // _ASMJIT_BASE_FUNC_H
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
// [Export]
|
// [Export]
|
||||||
#define ASMJIT_EXPORTS
|
#define ASMJIT_EXPORTS
|
||||||
|
|
||||||
|
// [Guard]
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/intutil.h"
|
#include "../base/intutil.h"
|
||||||
#include "../base/logger.h"
|
#include "../base/logger.h"
|
||||||
@@ -158,3 +162,6 @@ void StringLogger::logString(uint32_t style, const char* buf, size_t len) {
|
|||||||
|
|
||||||
// [Api-End]
|
// [Api-End]
|
||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#ifndef _ASMJIT_BASE_LOGGER_H
|
#ifndef _ASMJIT_BASE_LOGGER_H
|
||||||
#define _ASMJIT_BASE_LOGGER_H
|
#define _ASMJIT_BASE_LOGGER_H
|
||||||
|
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/string.h"
|
#include "../base/string.h"
|
||||||
|
|
||||||
@@ -229,4 +232,5 @@ struct StringLogger : public Logger {
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
#endif // _ASMJIT_BASE_LOGGER_H
|
#endif // _ASMJIT_BASE_LOGGER_H
|
||||||
|
|||||||
@@ -19,14 +19,14 @@
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
// #define ASMJIT_DEBUG // Define to enable debug-mode.
|
// #define ASMJIT_DEBUG // Define to enable debug-mode.
|
||||||
// #define ASMJIT_RELEASE // Define to enable release-mode (no debugging).
|
// #define ASMJIT_RELEASE // Define to enable release-mode.
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// [AsmJit - Library]
|
// [AsmJit - Library]
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
// #define ASMJIT_EMBED // Asmjit is embedded (implies ASMJIT_STATIC).
|
||||||
// #define ASMJIT_STATIC // Define to enable static-library build.
|
// #define ASMJIT_STATIC // Define to enable static-library build.
|
||||||
// #define ASMJIT_API // Define to override ASMJIT_API decorator.
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// [AsmJit - Features]
|
// [AsmJit - Features]
|
||||||
@@ -38,5 +38,8 @@
|
|||||||
// #define ASMJIT_BUILD_X64 // Define to enable x64 instruction set (64-bit).
|
// #define ASMJIT_BUILD_X64 // Define to enable x64 instruction set (64-bit).
|
||||||
// #define ASMJIT_BUILD_HOST // Define to enable host instruction set.
|
// #define ASMJIT_BUILD_HOST // Define to enable host instruction set.
|
||||||
|
|
||||||
|
// #define ASMJIT_DISABLE_COMPILER // Disable Compiler.
|
||||||
|
// #define ASMJIT_DISABLE_LOGGER // Disable Logger (completely).
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
#endif // _ASMJIT_CONFIG_H
|
#endif // _ASMJIT_CONFIG_H
|
||||||
|
|||||||
@@ -222,9 +222,10 @@ void X86X64Assembler::_bind(const Label& label) {
|
|||||||
// Label can be bound only once.
|
// Label can be bound only once.
|
||||||
ASMJIT_ASSERT(data->offset == -1);
|
ASMJIT_ASSERT(data->offset == -1);
|
||||||
|
|
||||||
// Log.
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
if (_logger)
|
if (_logger)
|
||||||
_logger->logFormat(kLoggerStyleLabel, "L%u:\n", index);
|
_logger->logFormat(kLoggerStyleLabel, "L%u:\n", index);
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
size_t pos = getOffset();
|
size_t pos = getOffset();
|
||||||
|
|
||||||
@@ -295,9 +296,10 @@ Error X86X64Assembler::embedLabel(const Label& op) {
|
|||||||
LabelData* label = getLabelDataById(op.getId());
|
LabelData* label = getLabelDataById(op.getId());
|
||||||
RelocData reloc;
|
RelocData reloc;
|
||||||
|
|
||||||
if (_logger) {
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
if (_logger)
|
||||||
_logger->logFormat(kLoggerStyleData, regSize == 4 ? ".dd L%u\n" : ".dq L%u\n", op.getId());
|
_logger->logFormat(kLoggerStyleData, regSize == 4 ? ".dd L%u\n" : ".dq L%u\n", op.getId());
|
||||||
}
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
reloc.type = kRelocRelToAbs;
|
reloc.type = kRelocRelToAbs;
|
||||||
reloc.size = regSize;
|
reloc.size = regSize;
|
||||||
@@ -338,10 +340,11 @@ Error X86X64Assembler::embedLabel(const Label& op) {
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
Error X86X64Assembler::_align(uint32_t mode, uint32_t offset) {
|
Error X86X64Assembler::_align(uint32_t mode, uint32_t offset) {
|
||||||
if (_logger) {
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
if (_logger)
|
||||||
_logger->logFormat(kLoggerStyleDirective,
|
_logger->logFormat(kLoggerStyleDirective,
|
||||||
"%s.align %u\n", _logger->getIndentation(), static_cast<unsigned int>(offset));
|
"%s.align %u\n", _logger->getIndentation(), static_cast<unsigned int>(offset));
|
||||||
}
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
if (offset <= 1 || !IntUtil::isPowerOf2(offset) || offset > 64)
|
if (offset <= 1 || !IntUtil::isPowerOf2(offset) || offset > 64)
|
||||||
return setError(kErrorInvalidArgument);
|
return setError(kErrorInvalidArgument);
|
||||||
@@ -542,8 +545,10 @@ static ASMJIT_INLINE size_t X86X64Assembler_relocCode(const X86X64Assembler* sel
|
|||||||
// Advance trampoline pointer.
|
// Advance trampoline pointer.
|
||||||
tramp += 8;
|
tramp += 8;
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
if (self->_logger)
|
if (self->_logger)
|
||||||
self->_logger->logFormat(kLoggerStyleComment, "; Trampoline %llX\n", r.data);
|
self->_logger->logFormat(kLoggerStyleComment, "; Trampoline %llX\n", r.data);
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -557,6 +562,7 @@ static ASMJIT_INLINE size_t X86X64Assembler_relocCode(const X86X64Assembler* sel
|
|||||||
// [asmjit::x86x64::Assembler - Logging]
|
// [asmjit::x86x64::Assembler - Logging]
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
// Logging helpers.
|
// Logging helpers.
|
||||||
static const char* AssemblerX86_operandSize[] = {
|
static const char* AssemblerX86_operandSize[] = {
|
||||||
"",
|
"",
|
||||||
@@ -884,6 +890,7 @@ static bool X86Assembler_dumpComment(StringBuilder& sb, size_t len, const uint8_
|
|||||||
|
|
||||||
return sb.appendChar('\n');
|
return sb.appendChar('\n');
|
||||||
}
|
}
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// [asmjit::x86x64::Assembler - Emit]
|
// [asmjit::x86x64::Assembler - Emit]
|
||||||
@@ -4068,11 +4075,12 @@ _EmitDisplacement:
|
|||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
_EmitDone:
|
_EmitDone:
|
||||||
#if defined(ASMJIT_DEBUG)
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
# if defined(ASMJIT_DEBUG)
|
||||||
if (self->_logger || assertIllegal) {
|
if (self->_logger || assertIllegal) {
|
||||||
#else
|
# else
|
||||||
if (self->_logger) {
|
if (self->_logger) {
|
||||||
#endif // ASMJIT_DEBUG
|
# endif // ASMJIT_DEBUG
|
||||||
StringBuilderT<512> sb;
|
StringBuilderT<512> sb;
|
||||||
uint32_t loggerOptions = 0;
|
uint32_t loggerOptions = 0;
|
||||||
|
|
||||||
@@ -4088,17 +4096,22 @@ _EmitDone:
|
|||||||
else
|
else
|
||||||
X86Assembler_dumpComment(sb, sb.getLength(), NULL, 0, 0, self->_comment);
|
X86Assembler_dumpComment(sb, sb.getLength(), NULL, 0, 0, self->_comment);
|
||||||
|
|
||||||
#if defined(ASMJIT_DEBUG)
|
# if defined(ASMJIT_DEBUG)
|
||||||
if (self->_logger)
|
if (self->_logger)
|
||||||
#endif // ASMJIT_DEBUG
|
# endif // ASMJIT_DEBUG
|
||||||
self->_logger->logString(kLoggerStyleDefault, sb.getData(), sb.getLength());
|
self->_logger->logString(kLoggerStyleDefault, sb.getData(), sb.getLength());
|
||||||
|
|
||||||
#if defined(ASMJIT_DEBUG)
|
# if defined(ASMJIT_DEBUG)
|
||||||
// Raise an assertion failure, because this situation shouldn't happen.
|
// Raise an assertion failure, because this situation shouldn't happen.
|
||||||
if (assertIllegal)
|
if (assertIllegal)
|
||||||
assertionFailed(sb.getData(), __FILE__, __LINE__);
|
assertionFailed(sb.getData(), __FILE__, __LINE__);
|
||||||
#endif // ASMJIT_DEBUG
|
# endif // ASMJIT_DEBUG
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
# if defined(ASMJIT_DEBUG)
|
||||||
|
ASMJIT_ASSERT(!assertIllegal);
|
||||||
|
# endif // ASMJIT_DEBUG
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
self->_comment = NULL;
|
self->_comment = NULL;
|
||||||
self->setCursor(cursor);
|
self->setCursor(cursor);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
#include "../build.h"
|
#include "../build.h"
|
||||||
#if defined(ASMJIT_BUILD_X86) || defined(ASMJIT_BUILD_X64)
|
#if !defined(ASMJIT_DISABLE_COMPILER) && (defined(ASMJIT_BUILD_X86) || defined(ASMJIT_BUILD_X64))
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/intutil.h"
|
#include "../base/intutil.h"
|
||||||
@@ -624,11 +624,12 @@ _OnError:
|
|||||||
template<typename Assembler>
|
template<typename Assembler>
|
||||||
static ASMJIT_INLINE void* X86X64Compiler_make(X86X64Compiler* self) {
|
static ASMJIT_INLINE void* X86X64Compiler_make(X86X64Compiler* self) {
|
||||||
Assembler assembler(self->_runtime);
|
Assembler assembler(self->_runtime);
|
||||||
Logger* logger = self->_logger;
|
|
||||||
|
|
||||||
if (logger) {
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
Logger* logger = self->_logger;
|
||||||
|
if (logger)
|
||||||
assembler.setLogger(logger);
|
assembler.setLogger(logger);
|
||||||
}
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
assembler._features = self->_features;
|
assembler._features = self->_features;
|
||||||
|
|
||||||
@@ -642,13 +643,15 @@ static ASMJIT_INLINE void* X86X64Compiler_make(X86X64Compiler* self) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void* result = assembler.make();
|
void* result = assembler.make();
|
||||||
if (logger) {
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
if (logger)
|
||||||
logger->logFormat(kLoggerStyleComment,
|
logger->logFormat(kLoggerStyleComment,
|
||||||
"*** COMPILER SUCCESS - Wrote %u bytes, code: %u, trampolines: %u.\n\n",
|
"*** COMPILER SUCCESS - Wrote %u bytes, code: %u, trampolines: %u.\n\n",
|
||||||
static_cast<unsigned int>(assembler.getCodeSize()),
|
static_cast<unsigned int>(assembler.getCodeSize()),
|
||||||
static_cast<unsigned int>(assembler.getOffset()),
|
static_cast<unsigned int>(assembler.getOffset()),
|
||||||
static_cast<unsigned int>(assembler.getTrampolineSize()));
|
static_cast<unsigned int>(assembler.getTrampolineSize()));
|
||||||
}
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -762,4 +765,4 @@ Compiler::~Compiler() {}
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
#endif // ASMJIT_BUILD_X86 || ASMJIT_BUILD_X64
|
#endif // !ASMJIT_DISABLE_COMPILER && (ASMJIT_BUILD_X86 || ASMJIT_BUILD_X64)
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#ifndef _ASMJIT_X86_X86COMPILER_H
|
#ifndef _ASMJIT_X86_X86COMPILER_H
|
||||||
#define _ASMJIT_X86_X86COMPILER_H
|
#define _ASMJIT_X86_X86COMPILER_H
|
||||||
|
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_COMPILER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/compiler.h"
|
#include "../base/compiler.h"
|
||||||
#include "../base/vectypes.h"
|
#include "../base/vectypes.h"
|
||||||
@@ -4217,4 +4220,5 @@ struct Compiler : public X86X64Compiler {
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_COMPILER
|
||||||
#endif // _ASMJIT_X86_X86COMPILER_H
|
#endif // _ASMJIT_X86_X86COMPILER_H
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
#include "../build.h"
|
#include "../build.h"
|
||||||
#if defined(ASMJIT_BUILD_X86) || defined(ASMJIT_BUILD_X64)
|
#if !defined(ASMJIT_DISABLE_COMPILER) && (defined(ASMJIT_BUILD_X86) || defined(ASMJIT_BUILD_X64))
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/intutil.h"
|
#include "../base/intutil.h"
|
||||||
@@ -59,9 +59,11 @@ X86X64Context::X86X64Context(X86X64Compiler* compiler) : BaseContext(compiler) {
|
|||||||
}
|
}
|
||||||
#endif // ASMJIT_BUILD_X64
|
#endif // ASMJIT_BUILD_X64
|
||||||
|
|
||||||
_state = &_x86State;
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
_emitComments = compiler->getLogger() != NULL;
|
_emitComments = compiler->hasLogger();
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
|
_state = &_x86State;
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2802,6 +2804,7 @@ _NoMemory:
|
|||||||
// [asmjit::x86x64::X86X64Context - Annotate]
|
// [asmjit::x86x64::X86X64Context - Annotate]
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
static void X86X64Context_annotateVariable(X86X64Context* self,
|
static void X86X64Context_annotateVariable(X86X64Context* self,
|
||||||
StringBuilder& sb, const VarData* vd) {
|
StringBuilder& sb, const VarData* vd) {
|
||||||
|
|
||||||
@@ -2908,8 +2911,10 @@ static bool X86X64Context_annotateInstruction(X86X64Context* self,
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
Error X86X64Context::annotate() {
|
Error X86X64Context::annotate() {
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
FuncNode* func = getFunc();
|
FuncNode* func = getFunc();
|
||||||
|
|
||||||
Node* node_ = func;
|
Node* node_ = func;
|
||||||
@@ -2935,8 +2940,9 @@ Error X86X64Context::annotate() {
|
|||||||
|
|
||||||
node_ = node_->getNext();
|
node_ = node_->getNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
_annotationLength = maxLen + 1;
|
_annotationLength = maxLen + 1;
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
return kErrorOk;
|
return kErrorOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4758,8 +4764,10 @@ static Error X86X64Context_translatePrologEpilog(X86X64Context* self, X86X64Func
|
|||||||
|
|
||||||
compiler->_setCursor(func->getEntryNode());
|
compiler->_setCursor(func->getEntryNode());
|
||||||
|
|
||||||
if (compiler->getLogger())
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
if (compiler->hasLogger())
|
||||||
compiler->comment("Prolog");
|
compiler->comment("Prolog");
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
// Entry.
|
// Entry.
|
||||||
if (func->isNaked()) {
|
if (func->isNaked()) {
|
||||||
@@ -4873,8 +4881,10 @@ static Error X86X64Context_translatePrologEpilog(X86X64Context* self, X86X64Func
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (compiler->getLogger())
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
if (compiler->hasLogger())
|
||||||
compiler->comment("Body");
|
compiler->comment("Body");
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// [Epilog]
|
// [Epilog]
|
||||||
@@ -4882,8 +4892,10 @@ static Error X86X64Context_translatePrologEpilog(X86X64Context* self, X86X64Func
|
|||||||
|
|
||||||
compiler->_setCursor(func->getExitNode());
|
compiler->_setCursor(func->getExitNode());
|
||||||
|
|
||||||
if (compiler->getLogger())
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
if (compiler->hasLogger())
|
||||||
compiler->comment("Epilog");
|
compiler->comment("Epilog");
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
// Restore Xmm/Mm/Gp (Mov).
|
// Restore Xmm/Mm/Gp (Mov).
|
||||||
stackPtr = stackBase;
|
stackPtr = stackBase;
|
||||||
@@ -5305,22 +5317,26 @@ static ASMJIT_INLINE Error X86X64Context_serialize(X86X64Context* self, X86X64As
|
|||||||
Node* node_ = start;
|
Node* node_ = start;
|
||||||
StringBuilder& sb = self->_stringBuilder;
|
StringBuilder& sb = self->_stringBuilder;
|
||||||
|
|
||||||
Logger* logger;
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
uint32_t vdCount;
|
uint32_t vdCount;
|
||||||
uint32_t annotationLength;
|
uint32_t annotationLength;
|
||||||
|
|
||||||
|
Logger* logger;
|
||||||
|
|
||||||
if (LoggingEnabled) {
|
if (LoggingEnabled) {
|
||||||
logger = assembler->getLogger();
|
logger = assembler->getLogger();
|
||||||
|
|
||||||
vdCount = static_cast<uint32_t>(self->_contextVd.getLength());
|
vdCount = static_cast<uint32_t>(self->_contextVd.getLength());
|
||||||
annotationLength = self->_annotationLength;
|
annotationLength = self->_annotationLength;
|
||||||
}
|
}
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
// Create labels on Assembler side.
|
// Create labels on Assembler side.
|
||||||
ASMJIT_PROPAGATE_ERROR(
|
ASMJIT_PROPAGATE_ERROR(
|
||||||
assembler->_registerIndexedLabels(self->getCompiler()->_targets.getLength()));
|
assembler->_registerIndexedLabels(self->getCompiler()->_targets.getLength()));
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
if (LoggingEnabled) {
|
if (LoggingEnabled) {
|
||||||
sb.clear();
|
sb.clear();
|
||||||
|
|
||||||
@@ -5368,6 +5384,7 @@ static ASMJIT_INLINE Error X86X64Context_serialize(X86X64Context* self, X86X64As
|
|||||||
|
|
||||||
assembler->_comment = sb.getData();
|
assembler->_comment = sb.getData();
|
||||||
}
|
}
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
switch (node_->getType()) {
|
switch (node_->getType()) {
|
||||||
case kNodeTypeAlign: {
|
case kNodeTypeAlign: {
|
||||||
@@ -5384,10 +5401,13 @@ static ASMJIT_INLINE Error X86X64Context_serialize(X86X64Context* self, X86X64As
|
|||||||
|
|
||||||
case kNodeTypeComment: {
|
case kNodeTypeComment: {
|
||||||
CommentNode* node = static_cast<CommentNode*>(node_);
|
CommentNode* node = static_cast<CommentNode*>(node_);
|
||||||
if (LoggingEnabled) {
|
|
||||||
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
|
if (LoggingEnabled)
|
||||||
logger->logFormat(kLoggerStyleComment,
|
logger->logFormat(kLoggerStyleComment,
|
||||||
"%s; %s\n", logger->getIndentation(), node->getComment());
|
"%s; %s\n", logger->getIndentation(), node->getComment());
|
||||||
}
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5570,10 +5590,12 @@ static ASMJIT_INLINE Error X86X64Context_serialize(X86X64Context* self, X86X64As
|
|||||||
}
|
}
|
||||||
|
|
||||||
Error X86X64Context::serialize(BaseAssembler* assembler, Node* start, Node* stop) {
|
Error X86X64Context::serialize(BaseAssembler* assembler, Node* start, Node* stop) {
|
||||||
if (!assembler->hasLogger())
|
#if !defined(ASMJIT_DISABLE_LOGGER)
|
||||||
return X86X64Context_serialize<0>(this, static_cast<X86X64Assembler*>(assembler), start, stop);
|
if (assembler->hasLogger())
|
||||||
else
|
|
||||||
return X86X64Context_serialize<1>(this, static_cast<X86X64Assembler*>(assembler), start, stop);
|
return X86X64Context_serialize<1>(this, static_cast<X86X64Assembler*>(assembler), start, stop);
|
||||||
|
#endif // !ASMJIT_DISABLE_LOGGER
|
||||||
|
|
||||||
|
return X86X64Context_serialize<0>(this, static_cast<X86X64Assembler*>(assembler), start, stop);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // x86x64 namespace
|
} // x86x64 namespace
|
||||||
@@ -5583,4 +5605,4 @@ Error X86X64Context::serialize(BaseAssembler* assembler, Node* start, Node* stop
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
#endif // ASMJIT_BUILD_X86 || ASMJIT_BUILD_X64
|
#endif // !ASMJIT_DISABLE_COMPILER && (ASMJIT_BUILD_X86 || ASMJIT_BUILD_X64)
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#ifndef _ASMJIT_X86_X86CONTEXT_P_H
|
#ifndef _ASMJIT_X86_X86CONTEXT_P_H
|
||||||
#define _ASMJIT_X86_X86CONTEXT_P_H
|
#define _ASMJIT_X86_X86CONTEXT_P_H
|
||||||
|
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_COMPILER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/compiler.h"
|
#include "../base/compiler.h"
|
||||||
#include "../base/context_p.h"
|
#include "../base/context_p.h"
|
||||||
@@ -515,4 +518,5 @@ struct X86X64Context : public BaseContext {
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_COMPILER
|
||||||
#endif // _ASMJIT_X86_X86CONTEXT_P_H
|
#endif // _ASMJIT_X86_X86CONTEXT_P_H
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
#include "../build.h"
|
#include "../build.h"
|
||||||
#if defined(ASMJIT_BUILD_X86) || defined(ASMJIT_BUILD_X64)
|
#if !defined(ASMJIT_DISABLE_COMPILER) && (defined(ASMJIT_BUILD_X86) || defined(ASMJIT_BUILD_X64))
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/globals.h"
|
#include "../base/globals.h"
|
||||||
@@ -544,4 +544,4 @@ void X86X64FuncDecl::reset() {
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
#endif // ASMJIT_BUILD_X86 || ASMJIT_BUILD_X64
|
#endif // !ASMJIT_DISABLE_COMPILER && (ASMJIT_BUILD_X86 || ASMJIT_BUILD_X64)
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
#ifndef _ASMJIT_X86_X86FUNC_H
|
#ifndef _ASMJIT_X86_X86FUNC_H
|
||||||
#define _ASMJIT_X86_X86FUNC_H
|
#define _ASMJIT_X86_X86FUNC_H
|
||||||
|
|
||||||
|
#include "../build.h"
|
||||||
|
#if !defined(ASMJIT_DISABLE_COMPILER)
|
||||||
|
|
||||||
// [Dependencies - AsmJit]
|
// [Dependencies - AsmJit]
|
||||||
#include "../base/func.h"
|
#include "../base/func.h"
|
||||||
#include "../x86/x86util.h"
|
#include "../x86/x86util.h"
|
||||||
@@ -485,4 +488,5 @@ struct X86X64FuncDecl : public FuncDecl {
|
|||||||
#include "../apiend.h"
|
#include "../apiend.h"
|
||||||
|
|
||||||
// [Guard]
|
// [Guard]
|
||||||
|
#endif // !ASMJIT_DISABLE_COMPILER
|
||||||
#endif // _ASMJIT_X86_X86FUNC_H
|
#endif // _ASMJIT_X86_X86FUNC_H
|
||||||
|
|||||||
Reference in New Issue
Block a user