From d06dd7686f19df6ffe8bac131616cd14d091b9df Mon Sep 17 00:00:00 2001 From: Tyson Andre Date: Sun, 17 May 2020 13:04:11 -0400 Subject: [PATCH] [skip ci] Add a README for Opcache's JIT. Mention information that would be useful for working on new features or bug fixes for the JIT. --- ext/opcache/jit/README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 ext/opcache/jit/README.md diff --git a/ext/opcache/jit/README.md b/ext/opcache/jit/README.md new file mode 100644 index 0000000000000..834ecc390de42 --- /dev/null +++ b/ext/opcache/jit/README.md @@ -0,0 +1,28 @@ +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 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](https://wiki.php.net/rfc/jit) for more details. + +DynAsm +------ + +This uses [DynAsm](https://luajit.org/dynasm.html) (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](https://corsix.github.io/dynasm-doc/tutorial.html) +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`.