php-src/ext/opcache/jit
2023-11-22 21:11:49 -06:00
..
dynasm DynASM/x86: Add missing escape in pattern. 2021-07-28 17:13:08 +03:00
libudis86 opcache jit fix message format for OpenBSD. 2022-08-19 16:40:29 +01:00
vtune
Makefile.frag Initial support of JIT/arm64 2021-05-18 15:32:23 +03:00
Makefile.frag.w32 Use capstone disassembler, if available. 2021-03-23 12:39:42 +03:00
README.md
zend_elf.c Merge branch 'PHP-8.0' 2021-05-06 14:34:28 +02:00
zend_elf.h Update http->https in license (#6945) 2021-05-06 12:16:35 +02:00
zend_jit_arm64.dasc Fixed regression intoduced by 76c41d27f9 2023-10-25 15:15:13 +03:00
zend_jit_arm64.h "http://" -> "https://" 2021-06-03 14:27:41 +03:00
zend_jit_disasm.c Fix GH-10728: opcache capstone header's inclusion. 2023-03-03 12:43:12 +00:00
zend_jit_gdb.c Fix typedef redefinition warnings. 2021-06-28 10:11:43 +02:00
zend_jit_gdb.h Don't directly include zend_jit_gdb.c 2021-06-28 10:08:45 +02:00
zend_jit_helpers.c Fixed GH-12748: Function JIT emits "could not convert to int" warning at the same time as invalid offset Error 2023-11-22 21:11:49 -06:00
zend_jit_internal.h Fixed incorrect VM stack overflow checks elimination 2023-06-20 11:59:36 +03:00
zend_jit_oprofile.c Update http->https in license (#6945) 2021-05-06 12:16:35 +02:00
zend_jit_perf_dump.c Initial support of JIT/arm64 2021-05-18 15:32:23 +03:00
zend_jit_trace.c Backport fix for GH-12512: JIT Assertion `info & (1 << type)' failed (#12660) 2023-11-13 13:26:17 +03:00
zend_jit_vm_helpers.c Merge branch 'PHP-8.0' into PHP-8.1 2022-08-01 17:03:56 +03:00
zend_jit_vtune.c Fixed some compilation warnings 2021-05-18 15:32:31 +03:00
zend_jit_x86.dasc Fixed regression intoduced by 76c41d27f9 2023-10-25 15:15:13 +03:00
zend_jit_x86.h Enable register allocator (it was disabled because ZREG_NUM wasn't 2021-05-18 15:32:31 +03:00
zend_jit.c Don't JIT after fatal errors 2023-11-02 14:14:12 +03:00
zend_jit.h Introduce and use ZEND_JIT_TARGET_X86 and ZEND_JIT_TARGET_ARM64 macros. 2021-05-18 21:59:32 +03:00

Opcache JIT

This is the implementation of Opcache's JIT (Just-In-Time compiler), This converts the PHP Virtual Machine's opcodes into x64/x86 assembly, on POSIX platforms and Windows.

It generates native code directly from PHP byte-code and information collected by the SSA static analysis framework (a part of the opcache optimizer). Code is usually generated separately for each PHP byte-code instruction. Only a few combinations are considered together (e.g. compare + conditional jump).

See the JIT RFC for more details.

DynAsm

This uses DynAsm (developed for LuaJIT project) for the generation of native code. It's a very lightweight and advanced tool, but does assume good, and very low-level development knowledge of target assembler languages. In the past we tried LLVM, but its code generation speed was almost 100 times slower, making it prohibitively expensive to use.

The unofficial DynASM Documentation has a tutorial, reference, and instruction listing.

zend_jit_x86.dasc gets automatically converted to zend_jit_x86.c by the bundled dynasm during make.