]> granicus.if.org Git - php/commitdiff
[skip ci] Add a README for Opcache's JIT.
authorTyson Andre <tysonandre775@hotmail.com>
Sun, 17 May 2020 17:04:11 +0000 (13:04 -0400)
committerTyson Andre <tysonandre775@hotmail.com>
Wed, 20 May 2020 13:58:24 +0000 (09:58 -0400)
Mention information that would be useful for working on new features or bug
fixes for the JIT.

Closes GH-5585

ext/opcache/jit/README.md [new file with mode: 0644]

diff --git a/ext/opcache/jit/README.md b/ext/opcache/jit/README.md
new file mode 100644 (file)
index 0000000..834ecc3
--- /dev/null
@@ -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`.