Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
01da1b51
Commit
01da1b51
authored
Feb 12, 2015
by
peastman
Browse files
Updated to latest asmjit, which supports 32 bit mode
parent
26790496
Changes
45
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
413 additions
and
298 deletions
+413
-298
CMakeLists.txt
CMakeLists.txt
+6
-8
libraries/asmjit/apibegin.h
libraries/asmjit/apibegin.h
+40
-5
libraries/asmjit/apiend.h
libraries/asmjit/apiend.h
+45
-11
libraries/asmjit/asmjit.h
libraries/asmjit/asmjit.h
+11
-11
libraries/asmjit/base/assembler.cpp
libraries/asmjit/base/assembler.cpp
+15
-23
libraries/asmjit/base/assembler.h
libraries/asmjit/base/assembler.h
+20
-17
libraries/asmjit/base/codegen.h
libraries/asmjit/base/codegen.h
+6
-6
libraries/asmjit/base/compiler.cpp
libraries/asmjit/base/compiler.cpp
+2
-2
libraries/asmjit/base/compiler.h
libraries/asmjit/base/compiler.h
+167
-126
libraries/asmjit/base/constpool.cpp
libraries/asmjit/base/constpool.cpp
+1
-15
libraries/asmjit/base/constpool.h
libraries/asmjit/base/constpool.h
+4
-0
libraries/asmjit/base/context.cpp
libraries/asmjit/base/context.cpp
+5
-5
libraries/asmjit/base/cpuinfo.cpp
libraries/asmjit/base/cpuinfo.cpp
+6
-6
libraries/asmjit/base/cpuinfo.h
libraries/asmjit/base/cpuinfo.h
+4
-4
libraries/asmjit/base/cputicks.cpp
libraries/asmjit/base/cputicks.cpp
+1
-1
libraries/asmjit/base/error.cpp
libraries/asmjit/base/error.cpp
+2
-0
libraries/asmjit/base/error.h
libraries/asmjit/base/error.h
+6
-6
libraries/asmjit/base/globals.h
libraries/asmjit/base/globals.h
+11
-11
libraries/asmjit/base/intutil.h
libraries/asmjit/base/intutil.h
+57
-31
libraries/asmjit/base/logger.cpp
libraries/asmjit/base/logger.cpp
+4
-10
No files found.
CMakeLists.txt
View file @
01da1b51
...
@@ -274,14 +274,12 @@ ELSE (ANDROID OR PNACL)
...
@@ -274,14 +274,12 @@ ELSE (ANDROID OR PNACL)
SET_SOURCE_FILES_PROPERTIES
(
${
CMAKE_SOURCE_DIR
}
/libraries/sfmt/src/SFMT.cpp PROPERTIES COMPILE_FLAGS
"-DHAVE_SSE2=1"
)
SET_SOURCE_FILES_PROPERTIES
(
${
CMAKE_SOURCE_DIR
}
/libraries/sfmt/src/SFMT.cpp PROPERTIES COMPILE_FLAGS
"-DHAVE_SSE2=1"
)
ENDIF
(
ANDROID OR PNACL
)
ENDIF
(
ANDROID OR PNACL
)
IF
(
NOT
(
ANDROID OR PNACL
))
IF
(
NOT
(
ANDROID OR PNACL
))
IF
(
CMAKE_SIZEOF_VOID_P EQUAL 8
)
FILE
(
GLOB src_files
${
CMAKE_CURRENT_SOURCE_DIR
}
/libraries/asmjit/*/*.cpp
)
FILE
(
GLOB src_files
${
CMAKE_CURRENT_SOURCE_DIR
}
/libraries/asmjit/*/*.cpp
)
FILE
(
GLOB incl_files
${
CMAKE_CURRENT_SOURCE_DIR
}
/libraries/asmjit/*.h
)
FILE
(
GLOB incl_files
${
CMAKE_CURRENT_SOURCE_DIR
}
/libraries/asmjit/*.h
)
SET
(
SOURCE_FILES
${
SOURCE_FILES
}
${
src_files
}
)
SET
(
SOURCE_FILES
${
SOURCE_FILES
}
${
src_files
}
)
SET
(
SOURCE_INCLUDE_FILES
${
SOURCE_INCLUDE_FILES
}
${
incl_files
}
)
SET
(
SOURCE_INCLUDE_FILES
${
SOURCE_INCLUDE_FILES
}
${
incl_files
}
)
INCLUDE_DIRECTORIES
(
BEFORE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/libraries/asmjit"
)
INCLUDE_DIRECTORIES
(
BEFORE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/libraries/asmjit"
)
SET
(
EXTRA_COMPILE_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
-DLEPTON_USE_JIT"
)
SET
(
EXTRA_COMPILE_FLAGS
"
${
EXTRA_COMPILE_FLAGS
}
-DLEPTON_USE_JIT"
)
ENDIF
(
CMAKE_SIZEOF_VOID_P EQUAL 8
)
ENDIF
(
NOT
(
ANDROID OR PNACL
))
ENDIF
(
NOT
(
ANDROID OR PNACL
))
# If API wrappers are being generated, and add them to the build.
# If API wrappers are being generated, and add them to the build.
...
...
libraries/asmjit/apibegin.h
View file @
01da1b51
...
@@ -4,12 +4,38 @@
...
@@ -4,12 +4,38 @@
// [License]
// [License]
// Zlib - See LICENSE.md file in the package.
// Zlib - See LICENSE.md file in the package.
// [Dependencies - AsmJit]
#if !defined(_ASMJIT_BUILD_H)
#if !defined(_ASMJIT_BUILD_H)
#include "build.h"
#include "build.h"
#endif // !_ASMJIT_BUILD_H
#endif // !_ASMJIT_BUILD_H
// [Guard]
#if !defined(ASMJIT_API_SCOPE)
# define ASMJIT_API_SCOPE
#else
# error "AsmJit - Api-Scope is already active, previous scope not closed by apiend.h?"
#endif // ASMJIT_API_SCOPE
// ============================================================================
// ============================================================================
// [MSVC]
// [Override]
// ============================================================================
#if !defined(ASMJIT_CC_HAS_OVERRIDE) && !defined(override)
# define override
# define ASMJIT_UNDEF_OVERRIDE
#endif // !ASMJIT_CC_HAS_OVERRIDE && !override
// ============================================================================
// [NoExcept]
// ============================================================================
#if !defined(ASMJIT_CC_HAS_NOEXCEPT) && !defined(noexcept)
# define noexcept ASMJIT_NOEXCEPT
# define ASMJIT_UNDEF_NOEXCEPT
#endif // !ASMJIT_CC_HAS_NOEXCEPT && !noexcept
// ============================================================================
// [MSC]
// ============================================================================
// ============================================================================
#if defined(_MSC_VER)
#if defined(_MSC_VER)
...
@@ -29,21 +55,30 @@
...
@@ -29,21 +55,30 @@
// Rename symbols.
// Rename symbols.
# if !defined(vsnprintf)
# if !defined(vsnprintf)
# define ASMJIT_DEF
INED
_VSNPRINTF
# define ASMJIT_
UN
DEF_VSNPRINTF
# define vsnprintf _vsnprintf
# define vsnprintf _vsnprintf
# endif // !vsnprintf
# endif // !vsnprintf
# if !defined(snprintf)
# if !defined(snprintf)
# define ASMJIT_DEF
INED
_SNPRINTF
# define ASMJIT_
UN
DEF_SNPRINTF
# define snprintf _snprintf
# define snprintf _snprintf
# endif // !snprintf
# endif // !snprintf
#endif // _MSC_VER
#endif // _MSC_VER
// ============================================================================
// ============================================================================
// [GNUC]
// [CLang]
// ============================================================================
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wunnamed-type-template-args"
#endif // __clang__
// ============================================================================
// [GCC]
// ============================================================================
// ============================================================================
#if defined(__GNUC__) && !defined(__clang__)
#if defined(__GNUC__) && !defined(__clang__)
# if __GNUC__ >= 4 && !defined(__MINGW32__)
# if __GNUC__ >= 4 && !defined(__MINGW32__)
# pragma GCC visibility push(hidden)
# pragma GCC visibility push(hidden)
# endif //
__GNUC__ >=
4
# endif //
GCC
4
+
#endif // __GNUC__
#endif // __GNUC__
libraries/asmjit/apiend.h
View file @
01da1b51
...
@@ -4,30 +4,64 @@
...
@@ -4,30 +4,64 @@
// [License]
// [License]
// Zlib - See LICENSE.md file in the package.
// Zlib - See LICENSE.md file in the package.
// [Guard]
#if defined(ASMJIT_API_SCOPE)
# undef ASMJIT_API_SCOPE
#else
# error "AsmJit - Api-Scope not active, forgot to include apibegin.h?"
#endif // ASMJIT_API_SCOPE
// ============================================================================
// [Override]
// ============================================================================
#if defined(ASMJIT_UNDEF_OVERRIDE)
# undef override
# undef ASMJIT_UNDEF_OVERRIDE
#endif // ASMJIT_UNDEF_OVERRIDE
// ============================================================================
// [NoExcept]
// ============================================================================
#if defined(ASMJIT_UNDEF_NOEXCEPT)
# undef noexcept
# undef ASMJIT_UNDEF_NOEXCEPT
#endif // ASMJIT_UNDEF_NOEXCEPT
// ============================================================================
// ============================================================================
// [MS
V
C]
// [MSC]
// ============================================================================
// ============================================================================
#if defined(_MSC_VER)
#if defined(_MSC_VER)
// Pop disabled warnings by ApiBegin.h
# pragma warning(pop)
# pragma warning(pop)
// Rename symbols back.
# if defined(ASMJIT_DEFINED_VSNPRINTF)
# if defined(ASMJIT_UNDEF_VSNPRINTF)
# undef ASMJIT_DEFINED_VSNPRINTF
# undef vsnprintf
# undef vsnprintf
# endif // ASMJIT_DEFINED_VSNPRINTF
# undef ASMJIT_UNDEF_VSNPRINTF
# if defined(ASMJIT_DEFINED_SNPRINTF)
# endif // ASMJIT_UNDEF_VSNPRINTF
# undef ASMJIT_DEFINED_SNPRINTF
# if defined(ASMJIT_UNDEF_SNPRINTF)
# undef snprintf
# undef snprintf
# endif // ASMJIT_DEFINED_SNPRINTF
# undef ASMJIT_UNDEF_SNPRINTF
# endif // ASMJIT_UNDEF_SNPRINTF
#endif // _MSC_VER
#endif // _MSC_VER
// ============================================================================
// ============================================================================
// [GNUC]
// [CLang]
// ============================================================================
#if defined(__clang__)
# pragma clang diagnostic pop
#endif // __clang__
// ============================================================================
// [GCC]
// ============================================================================
// ============================================================================
#if defined(__GNUC__) && !defined(__clang__)
#if defined(__GNUC__) && !defined(__clang__)
# if __GNUC__ >= 4 && !defined(__MINGW32__)
# if __GNUC__ >= 4 && !defined(__MINGW32__)
# pragma GCC visibility pop
# pragma GCC visibility pop
# endif //
__GNUC__ >=
4
# endif //
GCC
4
+
#endif // __GNUC__
#endif // __GNUC__
libraries/asmjit/asmjit.h
View file @
01da1b51
...
@@ -235,15 +235,15 @@
...
@@ -235,15 +235,15 @@
//! `BaseMem` class. These functions are used to make operands that represents
//! `BaseMem` class. These functions are used to make operands that represents
//! memory addresses:
//! memory addresses:
//!
//!
//! - `asmjit::ptr()`
//! - `asmjit::ptr()`
- Address size not specified.
//! - `asmjit::byte_ptr()`
//! - `asmjit::byte_ptr()`
- 1 byte.
//! - `asmjit::word_ptr()`
//! - `asmjit::word_ptr()`
- 2 bytes (Gpw size).
//! - `asmjit::dword_ptr()`
//! - `asmjit::dword_ptr()`
- 4 bytes (Gpd size).
//! - `asmjit::qword_ptr()`
//! - `asmjit::qword_ptr()`
- 8 bytes (Gpq/Mm size).
//! - `asmjit::tword_ptr()`
//! - `asmjit::tword_ptr()`
- 10 bytes (FPU).
//! - `asmjit::oword_ptr()`
//! - `asmjit::oword_ptr()`
- 16 bytes (Xmm size).
//! - `asmjit::yword_ptr()`
//! - `asmjit::yword_ptr()`
- 32 bytes (Ymm size).
//! - `asmjit::zword_ptr()`
//! - `asmjit::zword_ptr()`
- 64 bytes (Zmm size).
//!
//!
//! Most useful function to make pointer should be `asmjit::ptr()`. It creates
//! Most useful function to make pointer should be `asmjit::ptr()`. It creates
//! pointer to the target with unspecified size. Unspecified size works in all
//! pointer to the target with unspecified size. Unspecified size works in all
...
@@ -298,10 +298,10 @@
...
@@ -298,10 +298,10 @@
//! // Get `X86CpuInfo` global instance.
//! // Get `X86CpuInfo` global instance.
//! const X86CpuInfo* cpuInfo = X86CpuInfo::getHost();
//! const X86CpuInfo* cpuInfo = X86CpuInfo::getHost();
//!
//!
//! if (cpuInfo->hasFeature(kX86CpuFeatureS
se
2)) {
//! if (cpuInfo->hasFeature(kX86CpuFeatureS
SE
2)) {
//! // Processor has SSE2.
//! // Processor has SSE2.
//! }
//! }
//! else if (cpuInfo->hasFeature(kX86CpuFeatureM
mx
)) {
//! else if (cpuInfo->hasFeature(kX86CpuFeatureM
MX
)) {
//! // Processor doesn't have SSE2, but has MMX.
//! // Processor doesn't have SSE2, but has MMX.
//! }
//! }
//! else {
//! else {
...
...
libraries/asmjit/base/assembler.cpp
View file @
01da1b51
...
@@ -340,43 +340,35 @@ Error Assembler::emit(uint32_t code, const Operand& o0, const Operand& o1, const
...
@@ -340,43 +340,35 @@ Error Assembler::emit(uint32_t code, const Operand& o0, const Operand& o1, const
}
}
Error
Assembler
::
emit
(
uint32_t
code
,
int
o0
)
{
Error
Assembler
::
emit
(
uint32_t
code
,
int
o0
)
{
Imm
imm
(
o0
);
return
_emit
(
code
,
Imm
(
o0
),
NA
,
NA
,
NA
);
return
_emit
(
code
,
imm
,
NA
,
NA
,
NA
);
}
}
Error
Assembler
::
emit
(
uint32_t
code
,
uint64_t
o0
)
{
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
int
o1
)
{
Imm
imm
(
o0
);
return
_emit
(
code
,
o0
,
Imm
(
o1
),
NA
,
NA
);
return
_emit
(
code
,
imm
,
NA
,
NA
,
NA
);
}
}
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
int
o1
)
{
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
int
o2
)
{
Imm
imm
(
o1
);
return
_emit
(
code
,
o0
,
o1
,
Imm
(
o2
),
NA
);
return
_emit
(
code
,
o0
,
imm
,
NA
,
NA
);
}
}
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
uint64_t
o1
)
{
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
int
o3
)
{
Imm
imm
(
o1
);
return
_emit
(
code
,
o0
,
o1
,
o2
,
Imm
(
o3
));
return
_emit
(
code
,
o0
,
imm
,
NA
,
NA
);
}
}
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
int
o2
)
{
Error
Assembler
::
emit
(
uint32_t
code
,
int64_t
o0
)
{
Imm
imm
(
o2
);
return
_emit
(
code
,
Imm
(
o0
),
NA
,
NA
,
NA
);
return
_emit
(
code
,
o0
,
o1
,
imm
,
NA
);
}
}
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
uint64_t
o2
)
{
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
int64_t
o1
)
{
Imm
imm
(
o2
);
return
_emit
(
code
,
o0
,
Imm
(
o1
),
NA
,
NA
);
return
_emit
(
code
,
o0
,
o1
,
imm
,
NA
);
}
}
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
int
o3
)
{
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
int64_t
o2
)
{
Imm
imm
(
o3
);
return
_emit
(
code
,
o0
,
o1
,
Imm
(
o2
),
NA
);
return
_emit
(
code
,
o0
,
o1
,
o2
,
imm
);
}
}
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
uint64_t
o3
)
{
Error
Assembler
::
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
int64_t
o3
)
{
Imm
imm
(
o3
);
return
_emit
(
code
,
o0
,
o1
,
o2
,
Imm
(
o3
));
return
_emit
(
code
,
o0
,
o1
,
o2
,
imm
);
}
}
#undef NA
#undef NA
...
...
libraries/asmjit/base/assembler.h
View file @
01da1b51
...
@@ -26,23 +26,23 @@ namespace asmjit {
...
@@ -26,23 +26,23 @@ namespace asmjit {
//! \{
//! \{
// ============================================================================
// ============================================================================
// [asmjit::
k
InstId]
// [asmjit::InstId]
// ============================================================================
// ============================================================================
//! Instruction codes (stub).
//! Instruction codes (stub).
ASMJIT_ENUM
(
k
InstId
)
{
ASMJIT_ENUM
(
InstId
)
{
//! No instruction.
//! No instruction.
kInstIdNone
=
0
kInstIdNone
=
0
};
};
// ============================================================================
// ============================================================================
// [asmjit::
k
InstOptions]
// [asmjit::InstOptions]
// ============================================================================
// ============================================================================
//! Instruction options
(stub)
.
//! Instruction options.
ASMJIT_ENUM
(
k
InstOptions
)
{
ASMJIT_ENUM
(
InstOptions
)
{
//! No instruction options.
//! No instruction options.
kInstOptionNone
=
0x00
,
kInstOptionNone
=
0x00
000000
,
//! Emit short form of the instruction.
//! Emit short form of the instruction.
//!
//!
...
@@ -53,7 +53,8 @@ ASMJIT_ENUM(kInstOptions) {
...
@@ -53,7 +53,8 @@ ASMJIT_ENUM(kInstOptions) {
//! can be dangerous if the short jmp/jcc is required, but not encodable due
//! can be dangerous if the short jmp/jcc is required, but not encodable due
//! to large displacement, in such case an error happens and the whole
//! to large displacement, in such case an error happens and the whole
//! assembler/compiler stream is unusable.
//! assembler/compiler stream is unusable.
kInstOptionShortForm
=
0x01
,
kInstOptionShortForm
=
0x00000001
,
//! Emit long form of the instruction.
//! Emit long form of the instruction.
//!
//!
//! X86/X64:
//! X86/X64:
...
@@ -61,12 +62,13 @@ ASMJIT_ENUM(kInstOptions) {
...
@@ -61,12 +62,13 @@ ASMJIT_ENUM(kInstOptions) {
//! Long form is mosrlt related to jmp and jcc instructions, but like the
//! Long form is mosrlt related to jmp and jcc instructions, but like the
//! `kInstOptionShortForm` option it can be used by other instructions
//! `kInstOptionShortForm` option it can be used by other instructions
//! supporting both 8-bit and 32-bit immediates.
//! supporting both 8-bit and 32-bit immediates.
kInstOptionLongForm
=
0x02
,
kInstOptionLongForm
=
0x0
000000
2
,
//! Condition is likely to be taken.
//! Condition is likely to be taken.
kInstOptionTaken
=
0x04
,
kInstOptionTaken
=
0x00000004
,
//! Condition is unlikely to be taken.
//! Condition is unlikely to be taken.
kInstOptionNotTaken
=
0x08
kInstOptionNotTaken
=
0x0
000000
8
};
};
// ============================================================================
// ============================================================================
...
@@ -474,19 +476,20 @@ struct ASMJIT_VCLASS Assembler : public CodeGen {
...
@@ -474,19 +476,20 @@ struct ASMJIT_VCLASS Assembler : public CodeGen {
//! Emit an instruction with integer immediate operand.
//! Emit an instruction with integer immediate operand.
ASMJIT_API
Error
emit
(
uint32_t
code
,
int
o0
);
ASMJIT_API
Error
emit
(
uint32_t
code
,
int
o0
);
//! \overload
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
uint64_t
o0
);
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
int
o1
);
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
int
o1
);
//! \overload
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
uint64_t
o1
);
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
int
o2
);
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
int
o2
);
//! \overload
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
uint64_t
o2
);
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
int
o3
);
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
int
o3
);
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
int64_t
o0
);
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
int64_t
o1
);
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
int64_t
o2
);
//! \overload
//! \overload
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
u
int64_t
o3
);
ASMJIT_API
Error
emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
int64_t
o3
);
//! Emit an instruction (virtual).
//! Emit an instruction (virtual).
virtual
Error
_emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
const
Operand
&
o3
)
=
0
;
virtual
Error
_emit
(
uint32_t
code
,
const
Operand
&
o0
,
const
Operand
&
o1
,
const
Operand
&
o2
,
const
Operand
&
o3
)
=
0
;
...
...
libraries/asmjit/base/codegen.h
View file @
01da1b51
...
@@ -23,11 +23,11 @@ namespace asmjit {
...
@@ -23,11 +23,11 @@ namespace asmjit {
//! \{
//! \{
// ============================================================================
// ============================================================================
// [asmjit::
k
CodeGen]
// [asmjit::CodeGen
Features
]
// ============================================================================
// ============================================================================
//! Features of \ref CodeGen.
//! Features of \ref CodeGen.
ASMJIT_ENUM
(
k
CodeGen
)
{
ASMJIT_ENUM
(
CodeGen
Features
)
{
//! Emit optimized code-alignment sequences (`Assembler` and `Compiler`).
//! Emit optimized code-alignment sequences (`Assembler` and `Compiler`).
//!
//!
//! Default `true`.
//! Default `true`.
...
@@ -80,11 +80,11 @@ ASMJIT_ENUM(kCodeGen) {
...
@@ -80,11 +80,11 @@ ASMJIT_ENUM(kCodeGen) {
};
};
// ============================================================================
// ============================================================================
// [asmjit::
k
AlignMode]
// [asmjit::AlignMode]
// ============================================================================
// ============================================================================
//! Code aligning mode.
//! Code aligning mode.
ASMJIT_ENUM
(
k
AlignMode
)
{
ASMJIT_ENUM
(
AlignMode
)
{
//! Align by emitting a sequence that can be executed (code).
//! Align by emitting a sequence that can be executed (code).
kAlignCode
=
0
,
kAlignCode
=
0
,
//! Align by emitting sequence that shouldn't be executed (data).
//! Align by emitting sequence that shouldn't be executed (data).
...
@@ -92,11 +92,11 @@ ASMJIT_ENUM(kAlignMode) {
...
@@ -92,11 +92,11 @@ ASMJIT_ENUM(kAlignMode) {
};
};
// ============================================================================
// ============================================================================
// [asmjit::
k
RelocMode]
// [asmjit::RelocMode]
// ============================================================================
// ============================================================================
//! Relocation mode.
//! Relocation mode.
ASMJIT_ENUM
(
k
RelocMode
)
{
ASMJIT_ENUM
(
RelocMode
)
{
//! Relocate an absolute address to an absolute address.
//! Relocate an absolute address to an absolute address.
kRelocAbsToAbs
=
0
,
kRelocAbsToAbs
=
0
,
//! Relocate a relative address to an absolute address.
//! Relocate a relative address to an absolute address.
...
...
libraries/asmjit/base/compiler.cpp
View file @
01da1b51
...
@@ -40,11 +40,11 @@ enum { kBaseCompilerDefaultLookAhead = 64 };
...
@@ -40,11 +40,11 @@ enum { kBaseCompilerDefaultLookAhead = 64 };
Compiler
::
Compiler
(
Runtime
*
runtime
)
:
Compiler
::
Compiler
(
Runtime
*
runtime
)
:
CodeGen
(
runtime
),
CodeGen
(
runtime
),
_assembler
(
NULL
),
_nodeFlowId
(
0
),
_nodeFlowId
(
0
),
_nodeFlags
(
0
),
_nodeFlags
(
0
),
_maxLookAhead
(
kBaseCompilerDefaultLookAhead
),
_maxLookAhead
(
kBaseCompilerDefaultLookAhead
),
_targetVarMapping
(
NULL
),
_targetVarMapping
(
NULL
),
_assembler
(
NULL
),
_firstNode
(
NULL
),
_firstNode
(
NULL
),
_lastNode
(
NULL
),
_lastNode
(
NULL
),
_cursor
(
NULL
),
_cursor
(
NULL
),
...
@@ -482,7 +482,7 @@ VarData* Compiler::_newVd(uint32_t type, uint32_t size, uint32_t c, const char*
...
@@ -482,7 +482,7 @@ VarData* Compiler::_newVd(uint32_t type, uint32_t size, uint32_t c, const char*
vd
->
_flags
=
0
;
vd
->
_flags
=
0
;
vd
->
_priority
=
10
;
vd
->
_priority
=
10
;
vd
->
_state
=
kVarState
Unused
;
vd
->
_state
=
kVarState
None
;
vd
->
_regIndex
=
kInvalidReg
;
vd
->
_regIndex
=
kInvalidReg
;
vd
->
_isStack
=
false
;
vd
->
_isStack
=
false
;
vd
->
_isMemArg
=
false
;
vd
->
_isMemArg
=
false
;
...
...
libraries/asmjit/base/compiler.h
View file @
01da1b51
This diff is collapsed.
Click to expand it.
libraries/asmjit/base/constpool.cpp
View file @
01da1b51
...
@@ -162,19 +162,6 @@ void ConstPool::reset() {
...
@@ -162,19 +162,6 @@ void ConstPool::reset() {
// [asmjit::ConstPool - Ops]
// [asmjit::ConstPool - Ops]
// ============================================================================
// ============================================================================
static
ASMJIT_INLINE
size_t
ConstPool_getGapIndex
(
size_t
size
)
{
if
(
size
<=
1
)
return
ConstPool
::
kIndex1
;
else
if
(
size
<=
3
)
return
ConstPool
::
kIndex2
;
else
if
(
size
<=
7
)
return
ConstPool
::
kIndex4
;
else
if
(
size
<=
15
)
return
ConstPool
::
kIndex8
;
else
return
ConstPool
::
kIndex16
;
}
static
ASMJIT_INLINE
ConstPoolGap
*
ConstPool_allocGap
(
ConstPool
*
self
)
{
static
ASMJIT_INLINE
ConstPoolGap
*
ConstPool_allocGap
(
ConstPool
*
self
)
{
ConstPoolGap
*
gap
=
self
->
_gapPool
;
ConstPoolGap
*
gap
=
self
->
_gapPool
;
if
(
gap
==
NULL
)
if
(
gap
==
NULL
)
...
@@ -396,7 +383,7 @@ UNIT(base_constpool) {
...
@@ -396,7 +383,7 @@ UNIT(base_constpool) {
EXPECT
(
prevOffset
+
8
==
curOffset
,
EXPECT
(
prevOffset
+
8
==
curOffset
,
"pool.add() - Returned incorrect curOffset."
);
"pool.add() - Returned incorrect curOffset."
);
EXPECT
(
pool
.
getSize
()
==
(
i
+
1
)
*
8
,
EXPECT
(
pool
.
getSize
()
==
(
i
+
1
)
*
8
,
"pool.getSize() - Report
s
incorrect size."
);
"pool.getSize() - Report
ed
incorrect size."
);
prevOffset
=
curOffset
;
prevOffset
=
curOffset
;
}
}
...
@@ -481,7 +468,6 @@ UNIT(base_constpool) {
...
@@ -481,7 +468,6 @@ UNIT(base_constpool) {
INFO
(
"Checking pool alignment when combined constants are added."
);
INFO
(
"Checking pool alignment when combined constants are added."
);
{
{
uint8_t
bytes
[
32
]
=
{
0
};
uint8_t
bytes
[
32
]
=
{
0
};
uint64_t
c
=
0
;
size_t
offset
;
size_t
offset
;
pool
.
add
(
bytes
,
1
,
offset
);
pool
.
add
(
bytes
,
1
,
offset
);
...
...
libraries/asmjit/base/constpool.h
View file @
01da1b51
...
@@ -128,9 +128,12 @@ struct ConstPoolTree {
...
@@ -128,9 +128,12 @@ struct ConstPoolTree {
if
(
link
!=
NULL
)
{
if
(
link
!=
NULL
)
{
ASMJIT_ASSERT
(
top
!=
kHeightLimit
);
ASMJIT_ASSERT
(
top
!=
kHeightLimit
);
stack
[
top
++
]
=
node
;
stack
[
top
++
]
=
node
;
node
=
link
;
continue
;
continue
;
}
}
_Visit:
visitor
.
visit
(
node
);
visitor
.
visit
(
node
);
link
=
node
->
_link
[
1
];
link
=
node
->
_link
[
1
];
...
@@ -143,6 +146,7 @@ struct ConstPoolTree {
...
@@ -143,6 +146,7 @@ struct ConstPoolTree {
break
;
break
;
node
=
stack
[
--
top
];
node
=
stack
[
--
top
];
goto
_Visit
;
}
}
}
}
...
...
libraries/asmjit/base/context.cpp
View file @
01da1b51
...
@@ -26,8 +26,8 @@ namespace asmjit {
...
@@ -26,8 +26,8 @@ namespace asmjit {
Context
::
Context
(
Compiler
*
compiler
)
:
Context
::
Context
(
Compiler
*
compiler
)
:
_compiler
(
compiler
),
_compiler
(
compiler
),
_
varMapToVaListOffset
(
0
),
_
baseZone
(
8192
-
kZoneOverhead
),
_
baseZone
(
8192
-
kZoneOverhead
)
{
_
varMapToVaListOffset
(
0
)
{
Context
::
reset
();
Context
::
reset
();
}
}
...
@@ -217,7 +217,7 @@ Error Context::resolveCellOffsets() {
...
@@ -217,7 +217,7 @@ Error Context::resolveCellOffsets() {
// Vars - Allocated according to alignment/width.
// Vars - Allocated according to alignment/width.
while
(
varCell
!=
NULL
)
{
while
(
varCell
!=
NULL
)
{
uint32_t
size
=
varCell
->
getSize
();
uint32_t
size
=
varCell
->
getSize
();
uint32_t
offset
;
uint32_t
offset
=
0
;
switch
(
size
)
{
switch
(
size
)
{
case
1
:
offset
=
pos1
;
pos1
+=
1
;
break
;
case
1
:
offset
=
pos1
;
pos1
+=
1
;
break
;
...
@@ -234,13 +234,13 @@ Error Context::resolveCellOffsets() {
...
@@ -234,13 +234,13 @@ Error Context::resolveCellOffsets() {
varCell
=
varCell
->
_next
;
varCell
=
varCell
->
_next
;
}
}
// Stack - Allocated according to alignment
and
width.
// Stack - Allocated according to alignment
/
width.
while
(
stackCell
!=
NULL
)
{
while
(
stackCell
!=
NULL
)
{
uint32_t
size
=
stackCell
->
getSize
();
uint32_t
size
=
stackCell
->
getSize
();
uint32_t
alignment
=
stackCell
->
getAlignment
();
uint32_t
alignment
=
stackCell
->
getAlignment
();
uint32_t
offset
;
uint32_t
offset
;
// Try to fill the gap between variables
/
stack first.
// Try to fill the gap between variables
/
stack first.
if
(
size
<=
gapSize
&&
alignment
<=
gapAlignment
)
{
if
(
size
<=
gapSize
&&
alignment
<=
gapAlignment
)
{
offset
=
gapPos
;
offset
=
gapPos
;
...
...
libraries/asmjit/base/cpuinfo.cpp
View file @
01da1b51
...
@@ -10,11 +10,11 @@
...
@@ -10,11 +10,11 @@
// [Dependencies - AsmJit]
// [Dependencies - AsmJit]
#include "../base/cpuinfo.h"
#include "../base/cpuinfo.h"
#if defined(ASMJIT_
HOST
_X86) || defined(ASMJIT_
HOST
_X64)
#if defined(ASMJIT_
ARCH
_X86) || defined(ASMJIT_
ARCH
_X64)
#include "../x86/x86cpuinfo.h"
#include "../x86/x86cpuinfo.h"
#else
#else
// ?
// ?
#endif
// ASMJIT_HOST || ASMJIT_HOST_X64
#endif
// [Dependencies - Posix]
// [Dependencies - Posix]
#if defined(ASMJIT_OS_POSIX)
#if defined(ASMJIT_OS_POSIX)
...
@@ -54,7 +54,7 @@ uint32_t CpuInfo::detectHwThreadsCount() {
...
@@ -54,7 +54,7 @@ uint32_t CpuInfo::detectHwThreadsCount() {
// [asmjit::CpuInfo - GetHost]
// [asmjit::CpuInfo - GetHost]
// ============================================================================
// ============================================================================
#if defined(ASMJIT_
HOST
_X86) || defined(ASMJIT_
HOST
_X64)
#if defined(ASMJIT_
ARCH
_X86) || defined(ASMJIT_
ARCH
_X64)
struct
AutoX86CpuInfo
:
public
X86CpuInfo
{
struct
AutoX86CpuInfo
:
public
X86CpuInfo
{
ASMJIT_INLINE
AutoX86CpuInfo
()
:
X86CpuInfo
()
{
ASMJIT_INLINE
AutoX86CpuInfo
()
:
X86CpuInfo
()
{
X86CpuUtil
::
detect
(
this
);
X86CpuUtil
::
detect
(
this
);
...
@@ -62,14 +62,14 @@ struct AutoX86CpuInfo : public X86CpuInfo {
...
@@ -62,14 +62,14 @@ struct AutoX86CpuInfo : public X86CpuInfo {
};
};
#else
#else
#error "AsmJit - Unsupported CPU."
#error "AsmJit - Unsupported CPU."
#endif
// ASMJIT_HOST || ASMJIT_HOST_X64
#endif
const
CpuInfo
*
CpuInfo
::
getHost
()
{
const
CpuInfo
*
CpuInfo
::
getHost
()
{
#if defined(ASMJIT_
HOST
_X86) || defined(ASMJIT_
HOST
_X64)
#if defined(ASMJIT_
ARCH
_X86) || defined(ASMJIT_
ARCH
_X64)
static
AutoX86CpuInfo
cpuInfo
;
static
AutoX86CpuInfo
cpuInfo
;
#else
#else
#error "AsmJit - Unsupported CPU."
#error "AsmJit - Unsupported CPU."
#endif
// ASMJIT_HOST || ASMJIT_HOST_X64
#endif
return
&
cpuInfo
;
return
&
cpuInfo
;
}
}
...
...
libraries/asmjit/base/cpuinfo.h
View file @
01da1b51
...
@@ -20,7 +20,7 @@ namespace asmjit {
...
@@ -20,7 +20,7 @@ namespace asmjit {
//! \{
//! \{
// ============================================================================
// ============================================================================
// [asmjit::
k
CpuVendor]
// [asmjit::CpuVendor]
// ============================================================================
// ============================================================================
//! Cpu vendor ID.
//! Cpu vendor ID.
...
@@ -30,7 +30,7 @@ namespace asmjit {
...
@@ -30,7 +30,7 @@ namespace asmjit {
//! calls. Some manufacturers changed their vendor strings and AsmJit is aware
//! calls. Some manufacturers changed their vendor strings and AsmJit is aware
//! of that - it checks multiple combinations and decides which vendor ID should
//! of that - it checks multiple combinations and decides which vendor ID should
//! be used.
//! be used.
ASMJIT_ENUM
(
k
CpuVendor
)
{
ASMJIT_ENUM
(
CpuVendor
)
{
//! No/Unknown vendor.
//! No/Unknown vendor.
kCpuVendorNone
=
0
,
kCpuVendorNone
=
0
,
...
@@ -59,7 +59,7 @@ struct CpuInfo {
...
@@ -59,7 +59,7 @@ struct CpuInfo {
// [Construction / Destruction]
// [Construction / Destruction]
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
ASMJIT_INLINE
CpuInfo
(
uint32_t
size
=
sizeof
(
CpuInfo
)
)
:
_size
(
size
)
{}
ASMJIT_INLINE
CpuInfo
(
uint32_t
size
)
:
_size
(
size
)
{}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
// [Accessors]
// [Accessors]
...
@@ -120,7 +120,7 @@ struct CpuInfo {
...
@@ -120,7 +120,7 @@ struct CpuInfo {
//! Cpu long vendor string (brand).
//! Cpu long vendor string (brand).
char
_brandString
[
64
];
char
_brandString
[
64
];
//! Cpu vendor id, see
`asmjit::k
CpuVendor
`
.
//! Cpu vendor id, see
\ref
CpuVendor.
uint32_t
_vendorId
;
uint32_t
_vendorId
;
//! Cpu family ID.
//! Cpu family ID.
uint32_t
_family
;
uint32_t
_family
;
...
...
libraries/asmjit/base/cputicks.cpp
View file @
01da1b51
...
@@ -24,7 +24,7 @@
...
@@ -24,7 +24,7 @@
// [Dependencies - Windows]
// [Dependencies - Windows]
#if defined(ASMJIT_OS_WINDOWS)
#if defined(ASMJIT_OS_WINDOWS)
// `_InterlockedCompareExchange` is only available as intrinsic (MS Compiler).
// `_InterlockedCompareExchange` is only available as intrinsic (MS Compiler).
# if defined(_MSC_VER)
# if defined(_MSC_VER)
&& _MSC_VER >= 1400
# include <intrin.h>
# include <intrin.h>
# pragma intrinsic(_InterlockedCompareExchange)
# pragma intrinsic(_InterlockedCompareExchange)
# else
# else
...
...
libraries/asmjit/base/error.cpp
View file @
01da1b51
...
@@ -64,7 +64,9 @@ static const char* findPackedString(const char* p, uint32_t id, uint32_t maxId)
...
@@ -64,7 +64,9 @@ static const char* findPackedString(const char* p, uint32_t id, uint32_t maxId)
while
(
i
<
id
)
{
while
(
i
<
id
)
{
while
(
p
[
0
])
while
(
p
[
0
])
p
++
;
p
++
;
p
++
;
p
++
;
i
++
;
}
}
return
p
;
return
p
;
...
...
libraries/asmjit/base/error.h
View file @
01da1b51
...
@@ -8,23 +8,23 @@
...
@@ -8,23 +8,23 @@
#ifndef _ASMJIT_BASE_ERROR_H
#ifndef _ASMJIT_BASE_ERROR_H
#define _ASMJIT_BASE_ERROR_H
#define _ASMJIT_BASE_ERROR_H
// [Api-Begin]
#include "../apibegin.h"
// [Dependencies - AsmJit]
// [Dependencies - AsmJit]
#include "../base/globals.h"
#include "../base/globals.h"
// [Api-Begin]
#include "../apibegin.h"
namespace
asmjit
{
namespace
asmjit
{
//! \addtogroup asmjit_base_general
//! \addtogroup asmjit_base_general
//! \{
//! \{
// ============================================================================
// ============================================================================
// [asmjit::
k
Error]
// [asmjit::Error
Code
]
// ============================================================================
// ============================================================================
//! AsmJit error codes.
//! AsmJit error codes.
ASMJIT_ENUM
(
k
Error
)
{
ASMJIT_ENUM
(
Error
Code
)
{
//! No error (success).
//! No error (success).
//!
//!
//! This is default state and state you want.
//! This is default state and state you want.
...
@@ -188,7 +188,7 @@ struct ASMJIT_VCLASS ErrorHandler {
...
@@ -188,7 +188,7 @@ struct ASMJIT_VCLASS ErrorHandler {
//! Error utilities.
//! Error utilities.
struct
ErrorUtil
{
struct
ErrorUtil
{
#if !defined(ASMJIT_DISABLE_NAMES)
#if !defined(ASMJIT_DISABLE_NAMES)
//! Get printable version of AsmJit `
k
Error` code.
//! Get
a
printable version of AsmJit `Error` code.
static
ASMJIT_API
const
char
*
asString
(
Error
code
);
static
ASMJIT_API
const
char
*
asString
(
Error
code
);
#endif // ASMJIT_DISABLE_NAMES
#endif // ASMJIT_DISABLE_NAMES
};
};
...
...
libraries/asmjit/base/globals.h
View file @
01da1b51
...
@@ -34,7 +34,7 @@ typedef uint64_t Ptr;
...
@@ -34,7 +34,7 @@ typedef uint64_t Ptr;
typedef
int64_t
SignedPtr
;
typedef
int64_t
SignedPtr
;
// ============================================================================
// ============================================================================
// [asmjit::
k
Globals]
// [asmjit::Global
Def
s]
// ============================================================================
// ============================================================================
//! Invalid index
//! Invalid index
...
@@ -48,7 +48,7 @@ static const size_t kInvalidIndex = ~static_cast<size_t>(0);
...
@@ -48,7 +48,7 @@ static const size_t kInvalidIndex = ~static_cast<size_t>(0);
static
const
Ptr
kNoBaseAddress
=
static_cast
<
Ptr
>
(
static_cast
<
SignedPtr
>
(
-
1
));
static
const
Ptr
kNoBaseAddress
=
static_cast
<
Ptr
>
(
static_cast
<
SignedPtr
>
(
-
1
));
//! Global constants.
//! Global constants.
ASMJIT_ENUM
(
k
Globals
)
{
ASMJIT_ENUM
(
Global
Def
s
)
{
//! Invalid value or operand id.
//! Invalid value or operand id.
kInvalidValue
=
0xFFFFFFFF
,
kInvalidValue
=
0xFFFFFFFF
,
...
@@ -74,11 +74,11 @@ ASMJIT_ENUM(kGlobals) {
...
@@ -74,11 +74,11 @@ ASMJIT_ENUM(kGlobals) {
};
};
// ============================================================================
// ============================================================================
// [asmjit::
k
Arch]
// [asmjit::Arch
Id
]
// ============================================================================
// ============================================================================
//!
A
rchitecture.
//!
CPU a
rchitecture
identifier
.
ASMJIT_ENUM
(
k
Arch
)
{
ASMJIT_ENUM
(
Arch
Id
)
{
//! No/Unknown architecture.
//! No/Unknown architecture.
kArchNone
=
0
,
kArchNone
=
0
,
...
@@ -90,17 +90,17 @@ ASMJIT_ENUM(kArch) {
...
@@ -90,17 +90,17 @@ ASMJIT_ENUM(kArch) {
//! Arm architecture.
//! Arm architecture.
kArchArm
=
4
,
kArchArm
=
4
,
#if defined(ASMJIT_
HOST
_X86)
#if defined(ASMJIT_
ARCH
_X86)
kArchHost
=
kArchX86
,
kArchHost
=
kArchX86
,
#endif // ASMJIT_
HOST
_X86
#endif // ASMJIT_
ARCH
_X86
#if defined(ASMJIT_
HOST
_X64)
#if defined(ASMJIT_
ARCH
_X64)
kArchHost
=
kArchX64
,
kArchHost
=
kArchX64
,
#endif // ASMJIT_
HOST
_X64
#endif // ASMJIT_
ARCH
_X64
#if defined(ASMJIT_
HOST
_ARM)
#if defined(ASMJIT_
ARCH
_ARM)
kArchHost
=
kArchArm
,
kArchHost
=
kArchArm
,
#endif // ASMJIT_
HOST
_ARM
#endif // ASMJIT_
ARCH
_ARM
//! Whether the host is 64-bit.
//! Whether the host is 64-bit.
kArchHost64Bit
=
sizeof
(
intptr_t
)
>=
8
kArchHost64Bit
=
sizeof
(
intptr_t
)
>=
8
...
...
libraries/asmjit/base/intutil.h
View file @
01da1b51
...
@@ -11,8 +11,9 @@
...
@@ -11,8 +11,9 @@
// [Dependencies - AsmJit]
// [Dependencies - AsmJit]
#include "../base/globals.h"
#include "../base/globals.h"
#if defined(_MSC_VER)
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma intrinsic(_BitScanForward)
# include <intrin.h>
# pragma intrinsic(_BitScanForward)
#endif // ASMJIT_OS_WINDOWS
#endif // ASMJIT_OS_WINDOWS
// [Api-Begin]
// [Api-Begin]
...
@@ -43,6 +44,31 @@ struct IntTraits {
...
@@ -43,6 +44,31 @@ struct IntTraits {
};
};
};
};
// \internal
template
<
size_t
Size
,
int
IsSigned
>
struct
AsInt_
{
typedef
int64_t
Int
;
};
template
<
>
struct
AsInt_
<
1
,
0
>
{
typedef
int
Int
;
};
template
<
>
struct
AsInt_
<
1
,
1
>
{
typedef
int
Int
;
};
template
<
>
struct
AsInt_
<
2
,
0
>
{
typedef
int
Int
;
};
template
<
>
struct
AsInt_
<
2
,
1
>
{
typedef
int
Int
;
};
template
<
>
struct
AsInt_
<
4
,
1
>
{
typedef
int
Int
;
};
// \internal
//
// Map an integer `T` to an `int` or `int64_t`, depending on the type. Used
// internally by AsmJit to dispatch an argument of arbitrary integer type into
// a function that accepts either `int` or `int64_t`.
template
<
typename
T
>
struct
AsInt
{
typedef
typename
AsInt_
<
sizeof
(
T
),
IntTraits
<
T
>::
kIsSigned
>::
Int
Int
;
};
template
<
typename
T
>
ASMJIT_INLINE
typename
AsInt
<
T
>::
Int
asInt
(
T
value
)
{
return
static_cast
<
typename
AsInt
<
T
>::
Int
>
(
value
);
}
// ============================================================================
// ============================================================================
// [asmjit::IntUtil]
// [asmjit::IntUtil]
// ============================================================================
// ============================================================================
...
@@ -82,29 +108,29 @@ struct IntUtil {
...
@@ -82,29 +108,29 @@ struct IntUtil {
//! Pack two 8-bit integer and one 16-bit integer into a 32-bit integer as it
//! Pack two 8-bit integer and one 16-bit integer into a 32-bit integer as it
//! is an array of `{u0,u1,w2}`.
//! is an array of `{u0,u1,w2}`.
static
ASMJIT_INLINE
uint32_t
pack32_2x8_1x16
(
uint32_t
u0
,
uint32_t
u1
,
uint32_t
w2
)
{
static
ASMJIT_INLINE
uint32_t
pack32_2x8_1x16
(
uint32_t
u0
,
uint32_t
u1
,
uint32_t
w2
)
{
#if defined(ASMJIT_
HOST
_LE)
#if defined(ASMJIT_
ARCH
_LE)
return
u0
+
(
u1
<<
8
)
+
(
w2
<<
16
);
return
u0
+
(
u1
<<
8
)
+
(
w2
<<
16
);
#else
#else
return
(
u0
<<
24
)
+
(
u1
<<
16
)
+
(
w2
);
return
(
u0
<<
24
)
+
(
u1
<<
16
)
+
(
w2
);
#endif
// ASMJIT_HOST
#endif
}
}
//! Pack four 8-bit integer into a 32-bit integer as it is an array of `{u0,u1,u2,u3}`.
//! Pack four 8-bit integer into a 32-bit integer as it is an array of `{u0,u1,u2,u3}`.
static
ASMJIT_INLINE
uint32_t
pack32_4x8
(
uint32_t
u0
,
uint32_t
u1
,
uint32_t
u2
,
uint32_t
u3
)
{
static
ASMJIT_INLINE
uint32_t
pack32_4x8
(
uint32_t
u0
,
uint32_t
u1
,
uint32_t
u2
,
uint32_t
u3
)
{
#if defined(ASMJIT_
HOST
_LE)
#if defined(ASMJIT_
ARCH
_LE)
return
u0
+
(
u1
<<
8
)
+
(
u2
<<
16
)
+
(
u3
<<
24
);
return
u0
+
(
u1
<<
8
)
+
(
u2
<<
16
)
+
(
u3
<<
24
);
#else
#else
return
(
u0
<<
24
)
+
(
u1
<<
16
)
+
(
u2
<<
8
)
+
u3
;
return
(
u0
<<
24
)
+
(
u1
<<
16
)
+
(
u2
<<
8
)
+
u3
;
#endif
// ASMJIT_HOST
#endif
}
}
//! Pack two 32-bit integer into a 64-bit integer as it is an array of `{u0,u1}`.
//! Pack two 32-bit integer into a 64-bit integer as it is an array of `{u0,u1}`.
static
ASMJIT_INLINE
uint64_t
pack64_2x32
(
uint32_t
u0
,
uint32_t
u1
)
{
static
ASMJIT_INLINE
uint64_t
pack64_2x32
(
uint32_t
u0
,
uint32_t
u1
)
{
#if defined(ASMJIT_
HOST
_LE)
#if defined(ASMJIT_
ARCH
_LE)
return
(
static_cast
<
uint64_t
>
(
u1
)
<<
32
)
+
u0
;
return
(
static_cast
<
uint64_t
>
(
u1
)
<<
32
)
+
u0
;
#else
#else
return
(
static_cast
<
uint64_t
>
(
u0
)
<<
32
)
+
u1
;
return
(
static_cast
<
uint64_t
>
(
u0
)
<<
32
)
+
u1
;
#endif
// ASMJIT_HOST
#endif
}
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
...
@@ -336,7 +362,7 @@ struct IntUtil {
...
@@ -336,7 +362,7 @@ struct IntUtil {
//! Find a first bit in `mask`.
//! Find a first bit in `mask`.
static
ASMJIT_INLINE
uint32_t
findFirstBit
(
uint32_t
mask
)
{
static
ASMJIT_INLINE
uint32_t
findFirstBit
(
uint32_t
mask
)
{
#if defined(_MSC_VER)
#if defined(_MSC_VER)
&& _MSC_VER >= 1400
DWORD
i
;
DWORD
i
;
if
(
_BitScanForward
(
&
i
,
mask
))
{
if
(
_BitScanForward
(
&
i
,
mask
))
{
ASMJIT_ASSERT
(
findFirstBitSlow
(
mask
)
==
i
);
ASMJIT_ASSERT
(
findFirstBitSlow
(
mask
)
==
i
);
...
@@ -566,6 +592,26 @@ union UInt64 {
...
@@ -566,6 +592,26 @@ union UInt64 {
return
*
this
;
return
*
this
;
}
}
// --------------------------------------------------------------------------
// [AndNot]
// --------------------------------------------------------------------------
ASMJIT_INLINE
UInt64
&
andNot
(
uint64_t
val
)
{
u64
&=
~
val
;
return
*
this
;
}
ASMJIT_INLINE
UInt64
&
andNot
(
const
UInt64
&
val
)
{
if
(
kArchHost64Bit
)
{
u64
&=
~
val
.
u64
;
}
else
{
u32
[
0
]
&=
~
val
.
u32
[
0
];
u32
[
1
]
&=
~
val
.
u32
[
1
];
}
return
*
this
;
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
// [Or]
// [Or]
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
...
@@ -606,26 +652,6 @@ union UInt64 {
...
@@ -606,26 +652,6 @@ union UInt64 {
return
*
this
;
return
*
this
;
}
}
// --------------------------------------------------------------------------
// [Del]
// --------------------------------------------------------------------------
ASMJIT_INLINE
UInt64
&
del
(
uint64_t
val
)
{
u64
&=
~
val
;
return
*
this
;
}
ASMJIT_INLINE
UInt64
&
del
(
const
UInt64
&
val
)
{
if
(
kArchHost64Bit
)
{
u64
&=
~
val
.
u64
;
}
else
{
u32
[
0
]
&=
~
val
.
u32
[
0
];
u32
[
1
]
&=
~
val
.
u32
[
1
];
}
return
*
this
;
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
// [Eq]
// [Eq]
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
...
@@ -694,11 +720,11 @@ union UInt64 {
...
@@ -694,11 +720,11 @@ union UInt64 {
uint8_t
u8
[
8
];
uint8_t
u8
[
8
];
struct
{
struct
{
#if defined(ASMJIT_
HOST
_LE)
#if defined(ASMJIT_
ARCH
_LE)
uint32_t
lo
,
hi
;
uint32_t
lo
,
hi
;
#else
#else
uint32_t
hi
,
lo
;
uint32_t
hi
,
lo
;
#endif // ASMJIT_
HOST
_LE
#endif // ASMJIT_
ARCH
_LE
};
};
};
};
...
...
libraries/asmjit/base/logger.cpp
View file @
01da1b51
...
@@ -45,9 +45,12 @@ void Logger::logFormat(uint32_t style, const char* fmt, ...) {
...
@@ -45,9 +45,12 @@ void Logger::logFormat(uint32_t style, const char* fmt, ...) {
va_list
ap
;
va_list
ap
;
va_start
(
ap
,
fmt
);
va_start
(
ap
,
fmt
);
len
=
vsnprintf
(
buf
,
1023
,
fmt
,
ap
);
len
=
vsnprintf
(
buf
,
sizeof
(
buf
)
,
fmt
,
ap
);
va_end
(
ap
);
va_end
(
ap
);
if
(
len
>=
sizeof
(
buf
))
len
=
sizeof
(
buf
)
-
1
;
logString
(
style
,
buf
,
len
);
logString
(
style
,
buf
,
len
);
}
}
...
@@ -120,15 +123,6 @@ FileLogger::FileLogger(FILE* stream) : _stream(NULL) {
...
@@ -120,15 +123,6 @@ FileLogger::FileLogger(FILE* stream) : _stream(NULL) {
FileLogger
::~
FileLogger
()
{}
FileLogger
::~
FileLogger
()
{}
// ============================================================================
// [asmjit::FileLogger - Accessors]
// ============================================================================
//! Set file stream.
void
FileLogger
::
setStream
(
FILE
*
stream
)
{
_stream
=
stream
;
}
// ============================================================================
// ============================================================================
// [asmjit::FileLogger - Logging]
// [asmjit::FileLogger - Logging]
// ============================================================================
// ============================================================================
...
...
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment