321 Commits

Author SHA1 Message Date
kobalicek f25874d2d9 Added initial AArch64 support 2022-01-18 09:57:02 +01:00
kobalicek 9a92d2f972 [Bug] Removed invalid assumption in zonetree (fixes #352) 2022-01-18 09:53:31 +01:00
kobalicek 2a706fd2ba Reworked unaligned memory access to work better with GCC 11 2021-12-14 20:01:37 +01:00
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 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 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
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 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
Markus Schmidl 8f25116f2b [Bug] Extended Family Id calculation incorrect (fixes #298) 2020-08-19 15:57:19 +02:00
kobalicek 0646d0a48f [Bug] Added a possibility to order sections so the address table section can stay last even when user creates sections after it has been created (#293) 2020-08-09 13:14:38 +02:00
kobalicek 10be0c8f1d Added parameter pack to function arguments and return values 2020-08-09 13:14:12 +02:00
kobalicek 8474400e82 [Bug] Fixed RW info of string instructions, fixed lodsx() helper intructions in emitter 2020-07-10 23:21:36 +02:00
kobalicek 509866ef12 [Bug] Fixed invalid code generation related to lookup tables (Compiler) 2020-07-10 18:27:29 +02:00
kobalicek c130455898 Added ASMJIT_NO_FOREIGN compile-time option to disable non-host architectures in the future 2020-07-07 10:27:46 +02:00
kobalicek 2de7e74244 Instruction validator now doesn't pass 'push/pop [mem]' having unknown size 2020-07-06 00:09:17 +02:00