Commit Graph

387 Commits

Author SHA1 Message Date
kobalicek
2cfa686ebd [API] Fixed most static analysis issues reported by clang
[Bug] Workarounded GCC 11 issue affecting unaligned loads/stores (most likely a compiler bug)
2021-12-14 01:19:28 +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
Kian Meng Ang
4ec760a3d1 Fixed typos in documentation (#348) 2021-11-13 09:24:21 +01:00
tetzank
d0d14ac774 [Bug] Fixed compile-time issue with ASMJIT_NONCOPYABLE/NONCONSTRUCTIBLE for GCC 11 in C++20 mode (#343)
* fixed GCC 11 compilation in C++20 mode (don't use template parameters in constructors/operator assignment)
* refactored ASMJIT_NONCOPYABLE/NONCONSTRUCTIBLE (variadic macros not needed)
2021-09-03 14:52:26 +02:00
kobalicek
d02235b834 Refactored naming of data types in formatted text, which is now part of architecture traits 2021-06-27 00:39:53 +02:00
kobalicek
0a709c7a28 In addition to LEA, allow CL* and PREFETCH* instructions to have memory operand of any size 2021-06-27 00:39:18 +02:00
kobalicek
c329fa7ce0 [Bug] Don't emit useless 'sub esp, 0' after calling a void function (Compiler) 2021-06-24 23:51:48 +02:00
kobalicek
78de7d9c81 [Bug] Fixed a bug introduced by the previous commit (enable /dev/shm on non-android targets) 2021-05-18 15:17:22 +02:00
kobalicek
8ee4c76ee3 [Bug] Fixed android build (Android doesn't provide shm_open() and shm_unlink() functions) 2021-05-16 22:08:06 +02:00
kobalicek
0dd16b0a98 [Bug] Fixed RW metadata of KXNORx and KXORx instructions (Compiler) 2021-04-13 19:01:36 +02: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
e7a728018e [Bug] Fixed X86 instruction info query asserting on MMX variation of pextrw (Fixes #330) 2021-03-19 09:31:12 +01:00
kobalicek
e822fba53e [ABI] Added the possibility to use AVX512 in Compiler and FuncFrame 2021-03-17 18:05:48 +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
8b35b4cffb Added support for PROT_MAX() in VirtMem::alloc() and refactored VirtMem a bit 2021-03-06 09:05:42 +01:00
kobalicek
19f1768dbe [Bug] Don't allocate k0 register (x86::Compiler) 2021-03-04 01:37:22 +01:00
kobalicek
a305905d32 [Bug] Return reported error in BaseCompiler::_newInvokeNode() 2021-02-28 11:42:08 +01:00
kobalicek
5a5fb8af4c [Bug] Fixed VPERMQ incorrectly reporting AVX2 instead of AVX512-F features (X86 features API) 2021-02-09 02:41:57 +01:00
kobalicek
2ab380e0bd [Bug] [Critical] [ABI] Update that fixes all problems discovered by comparison with LLVM-MC
Fixed POP Sreg instruction, which was incorrectly implemented to emit nothing
Fixed CVTSD2SI, CVTSS2SI, CVTTSD2SI, and CVTTSS2SI instructions to not consider the size of the memory operand when calculagint REX.W prefix
Fixed VCMPPD, VCMPPS, VCMPSD, VCMPSS, VPCMPEQ*, VPCMPGT* instructions to always force EVEX prefix when the first operand is K register
Fixed ENDBR32 and ENDBR64 instructions (wrong opcode)
Fixed CLRSSBSY and RSTORSSP instructions (wrong logic in Assembler)
Fixed SLDT, SMSW, and STR instructions to not consider memory size when determining prefixes
Fixed UD0 and UD1 instructions to consider both operands
Fixed VCVTNE2PS2BF16, VCVTNEPS2BF16, and VDPBF16PS instructions (incorrect calculation of LL field) (AVX512)
Fixed VCVTPD2DQ, VCVTPD2PS, VCVTPD2UDQ, VCVTQQ2PS, VCVTTOD2DQ, VCVTTPD2UDQ, VCVTUQQ2PS in AVX512 case (incorrect calculation of LL field)
Fixed VGATHERPF* and VSCATTERPF* instructions (some instructions were encoded incorrectly by not considering the memory index register type in LL field)
Fixed VPBLENDVB (incorrect calculation of LL field)
Fixed VPEXTRW to use use a shorter encoding when possible (vpextrw r32, xmm, imm)
Fixed VPSLLD, VPSLLQ, VPSLLW, VPSRAD, VPSRAQ, VPSRAW, VPSRLD, VPSRLQ, VPSRLW instructions to always force EVEX prefix when the instruction is RMI (AVX512)
Fixed the accepted memory operand size of MMX PUNPCKL??? instructions from m64 to m32 (only affects validation)
Added explicit forms to XSAVE* and XRSTOR* instructions
Added HRESET and UINTR instructions
Changed MOV and all ARITH instructions to output the same binary as LLVM in 'reg, reg' case (it used an alternative encoding initially)
Renamed LRET to RETF
Renamed VBLENDM* instructions to VPBLENDM* (the name was incorrect)
Renamed VPBROADCASTMB2D to VPBROADCASTMW2D (the name was incorrect)
Renamed SYSEXIT64 to SYSEXITQ and SYSRET64 to SYSRETQ
Removed non-standard IRETW (use IRET, IRETD, or IRETQ to select the form)
2021-02-03 09:36:11 +01:00
kobalicek
f36ea0c031 [ABI] Added ljmp, lcall, and lret instructions (fixes #310) 2021-01-27 21:05:04 +01:00
kobalicek
71fb24cb11 BaseEmitter::commentf() shouldn't format string, which will be discarded by the emitter (fixes #306) 2021-01-26 14:28:48 +01:00
kobalicek
6678143772 [ABI] X86/X64 GP registers should use the real type (GpbLo, GpbHi, Gpw, Gpd, Gpq) and not just Gp (fixes #292) 2021-01-26 14:25:24 +01:00
kobalicek
0636dd316a [Bug] Fixed instruction signatures issue introduced by the previous commit 2021-01-26 01:09:35 +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
1422faa011 [Bug] Fixed a possible compilation error when using non-uint64_t value as immediate instead of Imm (ambiguity) 2021-01-23 00:07:15 +01:00
kobalicek
70e80b18a5 [Bug] Jump annotation to entry block fix 2021-01-02 12:25:17 +01:00
kobalicek
13876c4e5e Improved JitAllocator to not reiterate the whole block on every allocation 2021-01-02 01:42:30 +01:00
kobalicek
45fe60f93d [Bug] Fixed instruction RW info related to AVX-512 {k} (merging) and {k} {z} (zeroing) 2021-01-02 01:24:46 +01:00
kobalicek
173f09df35 [Bug] Fixed invalid fill in JitAllocator::shrink() when kOptionFillUnusedMemory is in use by JitAllocator (Critical) 2020-12-26 20:12:14 +01:00
kobalicek
c165c00271 Fixed a possible bug that may trigger assertion failure in JitAllocator::alloc() due to not marking an empty block properly (#316) 2020-12-26 12:18:05 +01:00
kobalicek
3b886c8b7b Fixed the use of __buildin___clear_cache() 2020-12-10 01:21:16 +01:00
kobalicek
4b13f71314 Improved GitHub workflows 2020-11-09 00:47:32 +01:00
kobalicek
2199c7d4e7 Improved CI problem matching by always doing out-of-source build (Ninja issue) 2020-11-07 19:31:03 +01:00
kobalicek
fe89388e52 Added problem matchers to CI workflow 2020-11-07 16:05:48 +01:00
kobalicek
88129d7389 [Bug] Don't unlink immediately when creating anonymous memory file, switch to GH actions (Fixes #312) 2020-11-07 00:02:16 +01:00
kobalicek
cb13f69983 Support for using <windows.h> even without NOMINMAX 2020-10-26 20:22:33 +01:00
kobalicek
973f5c9c5c [Bug] Fixed incorrect mov_abs instruction size checking logic (#311) 2020-10-25 00:36:04 +02: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
Samuel Pordeus
a4341e811d Fix typo on features.h (#303) 2020-09-29 00:17:49 +02:00
Emmanuel Vadot
cfdf5bd4eb FreeBSD: Fix compilation with -Werror (#302)
VirtMem_getTmpDir is not used when SHM_ANON is defined which is the case
on FreeBSD. This breaks compilation if -Werror is defined.

Signed-off-by: Emmanuel Vadot <manu@FreeBSD.org>
2020-09-27 16:48:06 +02:00
kobalicek
b49d685cd9 Added github funding file 2020-09-22 20:16:28 +02:00
kobalicek
d7d3db1c4f Updated README.txt and removed a file that is not used anymore 2020-09-16 01:03:38 +02:00
kobalicek
5bc166efdb Updated README.md (Sponsors) 2020-09-12 19:55:16 +02:00
kobalicek
cd44f41d9b Preparation for AArch64 support 2020-09-12 18:19:04 +02:00
Max Bernstein
9cb2b298e1 Avoid an unused argument warning when compiling AsmJit (#301) 2020-09-12 12:01:35 +02:00
kobalicek
94061cd294 [Bug] Fixed ZoneVector reverse iterators and rbegin()/rend() - bug introduced by a previous commit 2020-09-12 09:32:38 +02:00
kobalicek
358d944bf2 Simplify ZoneVector iterators, use std::lower_bound() instead a custom implementation 2020-09-06 22:08:23 +02:00
kobalicek
bbe6b457a1 Fixed Solaris build (cannot use EAX, EDX, etc as these are macros) 2020-09-04 22:28:00 +02:00