Folus Wen dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
..
dynasm dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
libudis86 dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
vtune dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
Makefile.frag dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
Makefile.frag.w32 dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
README.md dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_elf.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_elf.h dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit.h dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_arm64.dasc dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_arm64.h dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_disasm.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_gdb.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_gdb.h dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_helpers.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_internal.h dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_oprofile.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_perf_dump.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_trace.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_vm_helpers.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_vtune.c dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_x86.dasc dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ
zend_jit_x86.h dd8509b6b1 [Add][GPL][php] 2 gadi atpakaļ

README.md

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.