55 Commits

Author SHA1 Message Date
kobalicek
a4e1e88374 [Bug] Do not link to pthread library on Android (there is no such library) 2022-02-20 17:38:27 +01:00
kobalicek
23ddf56b00 [ABI] Initial AArch64 support 2022-02-09 17:08:40 +01:00
kobalicek
996deae327 [ABI] Refactored AsmJit to use strong-typed enums, this breaks both API and ABI
[ABI] Added ABI version as an inline namespace, which forms asmjit::_abi_MAJOR_MINOR
[ABI] Added support for AVX512_FP16, 16-bit broadcast, and AVX512_FP16 tests
[ABI] Added initial support for consecutive registers into instruction database and register allocator
[ABI] Added a possibility to use temporary memory in CodeHolder's zone
[ABI] Compiler::setArg() is now deprecated, use FuncNode::setArg()
[Bug] Fixed correct RW information of instructions that only support implicit zeroing with {k}
[Bug] Fixed broadcast to be able to broadcast bcst16 operands
2021-12-13 19:34:56 +01:00
kobalicek
a4dd0b2d8b [ABI] Build improvements - replaced ASMJIT_BUIlD_X86 with ASMJIT_NO_X86 and other changes... 2021-03-21 14:42:47 +01:00
kobalicek
7836449c30 Added asmjit_test_perf, which replaces asmjit_bench and provides much better performance overview
Removed asmjit_test_opcode (not needed anymore as we have asmjit_test_assembler and asmjit_test_perf)
2021-03-13 23:05:48 +01:00
kobalicek
c9cebc67bc Split assembler tests so they can compile much faster with GCC 2021-03-13 14:28:05 +01:00
kobalicek
58b6c025f2 [ABI] Added more AVX_VNNI instructions, added MOVABS for explicit Imm64 encodings, added more assembler tests 2021-01-26 01:00:29 +01:00
kobalicek
cb13f69983 Support for using <windows.h> even without NOMINMAX 2020-10-26 20:22:33 +01:00
kobalicek
a281426ca6 [CMake] Include GNUInstallDirs after project() 2020-10-07 16:50:42 +02:00
David CARLIER
3c4415d729 [Bug] NetBSD build needs librt (#305) 2020-09-29 00:57:40 +02:00
kobalicek
cd44f41d9b Preparation for AArch64 support 2020-09-12 18:19:04 +02:00
kobalicek
d1b7543488 Added an initial cmake export support so users can find installed asmjit (Fixes #290) 2020-08-31 20:33:29 +02:00
kobalicek
f986f7fc44 AsmJit cleanup and refactoring 2020-05-31 23:39:13 +02:00
kobalicek
e78bba83da Added a support for indirect jumps within a function (Compiler) (#286) 2020-05-09 01:00:18 +02:00
kobalicek
80645e66a8 Improved natvis support 2020-05-03 22:38:56 +02:00
kobalicek
fc7eed5304 Build improvements (improved CMakeLists.txt, added proper support for testing) 2020-05-01 12:50:08 +02:00
kobalicek
9057aa30b6 Improved AsmJit public API to not depend on <windows.h> header 2020-04-29 20:19:17 +02:00
kobalicek
967dde0fc4 Use relative displacement in mov [abs], ax if base-address is known and the displacement encodable (#275) 2020-02-23 00:05:36 +01:00
kobalicek
5437d20dbb Added support for MAP_JIT (OSX, IOS), build system and CI improvements 2020-01-26 01:58:00 +01:00
Jianyu Huang
3d510b3540 Downgraded CMake version requirement to 3.5 for better compatibility (#252) 2019-08-08 23:37:57 +02:00
Petr Kobalicek
5d40561d14 Refactored register allocator asm Compiler. (#249)
Refactored build system macros (ASMJIT_BUILD_STATIC -> ASMJIT_STATIC)
Refactored AVX512 broadcast {1toN} - moved to operand from instruction.
Refactored naming - renamed getters to not use get prefix.
Refactored code structure - move arch-specific stuff into x86 namespace.
Refactored some compiler/arch-specific macros, respect rel/abs option in mov REG, [ADDR].
Refactored StringBuilder (Renamed to String, added small string optimization).
Refactored LabelId<->LabelEntry mapping, force label offset to 64-bits on all archs.
Renamed Runtime to Target (JitRuntime kept for now).
Renamed VirtMemManager to JitAllocator.
Renamed VirtMem to JitUtils.
Renamed FuncSignatureX to FuncSignatureBuilder.
Fixed xchg [mem], rex-lo, refactored RelocEntry.
Fixed Logger to always show abs|rel when formatting a memory operand
Fixed Logger to prefix HEX numbers with 0x prefix
Fixed Support::ctzGeneric to always return uint32_t, T doesn't matter.
Fixed LightCall to not save MMX and K registers
Fixed CpuInfo constructor to propagate NoInit (#243)
Added VAES, AVX512_VBMI2, AVX512_VNNI, and AVX512_BITALG cpu-features and instructions.
Added emscripten support (asmjit can be now compiled by emscripten).
Added asmjit.natvis for better MSVC experience
Added x86::ptr_abs|ptr_rel
Added support for multibyte nop r/m (#135)
Added support for 32-bit to 64-bit zero-extended addresses, improved validation of memory addresses, and removed wrt address type as this will be reworked
Added support for multiple sections, reworked address table support (previously known as trampolines)
Added the following x86 modifiers to the x86::Emitter - xacquire(), xrelease(), and k(kreg)
Added a possibility to use REP prefix with RET instruction
Added a possibility to relocate [rel addr] during relocate()
Added a variadic function-call support (Compiler), argument duplication (Compiler), better /dev/shm vs /tmp shared memory handling (VirtMem).
Removed imm_u imm_ptr helpers, imm() can now accept any integer and pointer.
Changed the default behavior of optimizing instructions to disabled with a possibility to enable that feature through kOptionOptimizedForSize
Use default copy construction / assignment to prevent new kind of warnings introduced by GCC 9
2019-07-16 01:24:22 +02:00
Nils Gladitz
02d24af4c0 Replace incorrect CMake CACHE variable type BOOLEAN with BOOL (#238) 2019-03-20 09:38:43 +01:00
kobalicek
c2f50e6fc5 Incorporated changes from pull requests 187, 202, and 212 2018-11-17 05:43:49 +01:00
kobalicek
e8a80ea958 Moved logic from x86inst.cpp to x86instimpl.cpp, moved some instruction methods to Inst from X86Inst, added Inst::checkFeatures() for retrieving which CPU features are required to run a given instruction, minor reorganization and asmdb update 2017-03-09 16:57:54 +01:00
kobalicek
35ba2ad83a Minor changes to cmake files 2017-03-04 20:37:42 +01:00
kobalicek
f589e7165a Fixed encoding of 'CRC32 r64, r8/m8' instruction
Fixed encoding of 'POPCNT|TZCNT|LZCNT r16, r16/m16' instruction
Fixed encoding of EVEX instructions that don't provide VEX prefix equivalent
Added 'LOCK MOV CR8' extension used by AMD processors in 32-bit mode and 'ALTMOVCR8' CPU feature
Renamed some CPU features to respect their names used in X86/X64 architecture manuals
Added validation of immediate operands (correct size, correct sign/zero extension)
Added validation of explicit/implicit size of memory operands
Added validation of LOCK/REP/REPNZ prefixes to x86 validator
Reorganized some X86 instruction tables, removed family specific tables, introduced OperationData
Improved instruction tables generator to automatically generate instruction flags
Regenerated all instruction tables to respect the current state of 'asmdb.x86data'
2017-02-25 19:36:28 +01:00
kobalicek
1e47f7999c Fixed some warnings 2017-02-19 19:36:36 +01:00
Petr Kobalicek
b7f6d1e369 Merged asmjit:next branch (#149) 2017-01-26 15:55:03 +01:00
kobalicek
286bc22f49 Better compiler flags detection in CMakeLists.txt\nFixed missing noexcept in StaticRuntime.cpp 2016-05-05 04:08:23 +02:00
kobalicek
7b0e362ac6 Added ASMJIT_TRACE support to CMakeLists.txt 2016-03-28 22:33:32 +02:00
kobalicek
185a96a46a Reworked CpuInfo (removed X86CpuInfo, added ARM CpuInfo support).
Renamed CodeGen to ExternalTool.
Moved logger constants from asmjit namespace to asmjit::Logger.
Moved AssemblerFeature constants from asmjit namespace to asmjit::Assembler.
Added noexcept to most APIs that are not intended to throw.
Added memory utilities that can read/write to unaligned memory location (ongoing ARM support).
Removed unimplemented instruction scheduler, will be added back when it's working.
2016-03-21 21:41:55 +01:00
kobalicek
3fcd65cf80 - Moved to cxxtool to generate build.h compiler and platform based definitions.
- 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.
2015-12-07 07:34:25 +01:00
kobalicek
3c477177d2 Fixed AVX/XOP bugs when encoding instruction that uses register(s) with index greater than 7.
Refactored a bit testing code and added ability to asmjit_test_opcode to use registers having indexes greater than 7.
2015-06-17 21:19:29 +02:00
kobalicek
de444b874a - AsmJit executables should have consistent prefix 'asmjit'.
- Added 'char' to type-id for function argument to typeId conversion.
- Added asmjit_test_x86 to be called by continuous integration.
2015-02-09 00:03:27 +01:00
Ryan Gonzalez
ee1cf60114 Fix Clang warning about -f-inline-functions 2014-11-30 14:28:57 -06:00
kobalicek
0cff228354 Fixed CMakeLists.txt (again). 2014-09-22 20:06:43 +02:00
kobalicek
d9f5a525e5 Fixed cmake crashing after secondary run. 2014-09-21 21:12:45 +02:00
kobalicek
eef8f78953 Removed contribs
Added some misc methods to Compiler.
Moved reset() from X86Var to Var.
2014-09-17 20:31:53 +02:00
xantares
2475e3f80a Install dll in <prefix>/bin 2014-07-17 07:13:29 +00:00
xantares
f82fd80305 Install if not ASMJIT_EMBED 2014-07-17 07:11:51 +00:00
kobalicek
fa955663e3 Changed asmjit namespaces, each architecture has now only one namespace for registers / memory operands.
Changed instruction table schema to minimize its size and added use of EFLAGS register (for scheduler).
Changed the rest of intrinsics accepting `void*` to accept `Ptr` instead.
Changed clear()/reset() concept - only `reset()` now exists and accepts a `releaseMemory` argument.
Changed unit tests to use bundled `Broken` framework.
Moved podvector and podlist to base/containers.
Added CMPS, LODS, MOVS, SCAS, STOS instructions.
Added Label::isInitialized() and Var::isInitialized().
Added X86Scheduler stub - preparing for instruction reordering.
Added support for tracing (see ASMJIT_TRACE) to allow consumers to find bugs in AsmJit quicker.
Fixed possible Zone memory leak.
Fixed and improved alloc/spill (added support for home register which asmjit honors from now).
Fixed Assembler `LEA REG, [LABEL]` bug.
Fixed [Mem, Imm] instructions with zero-sized operand to return error instead of emitting garbage.
Fixed minor bug in VMemMgr - always point to a correct hProcess so it can be used properly (#41).
2014-07-12 17:50:35 +02:00
kobalicek
c87814b225 Added librt dependency on Linux by default. 2014-06-06 22:18:51 +02:00
kobalicek
db322d5dc1 Added minimalist unit testing (and removed some apps that did some tests). 2014-06-04 22:12:52 +02:00
kobalicek
1fdcf250d2 Split registers from x86operand so they don't have to use static initialization. 2014-05-27 23:08:27 +02:00
kobalicek
1a73e65534 - Minor reorganization of source code (split defs to operand and instruction info).
- Added JECXZ instruction.
- Doxyfile is now in project root.
- Documentation updates.
2014-05-10 21:19:50 +02:00
kobalicekp
f1ce2383ba - Major documentation reorganization of AsmJit (still far from perfection)
- Documentation - removed verbose @brief and switched to markdown syntax which Doxygen supports.
- Added inline documentation to AVX/AVX2 instructions.
- Added more documentation notes to utility classes.
- Modified documentation groups to be compatible with the new code layout (base/x86).

- Renamed VirtualMemoryManager to VMemMgr.
- Removed MemoryManager interface (not needed).
- Changed JitRuntime to always create a new isolated VMemMgr instance.
- Fixed WinRemoteRuntime to work with the new changes.

- Added missing insertps instruction to database, assembler and compiler.
- Moved global functions in x86cpuinfo to CpuUtil class.

- Should notify Issue #10
2014-05-04 23:11:12 +02:00
kobalicekp
0af60d6eb4 Added proof-of-concept constant pool implementation.
Fixed bug when c.alloc() is called with a specific register.
2014-04-21 03:30:05 +02:00
kobalicekp
f9b94d55a2 Build - Added multithreaded build by default when building under MSVC
Build - Added possibility to embed asmjit instead of making shared library (solves some Linux issues)
2014-04-08 01:47:50 +02:00
Kristoffer Grönlund
4a684c7fee Fix warning on mismatching If/EndIf 2014-04-02 10:39:02 +02:00
kobalicekp
fa528f4741 Added gcc visibility push/pop to ApiBegin/ApiEnd.
ApiBegin/ApiEnd moved from asmjit/base to asmjit.
2014-04-01 21:16:31 +02:00