#
67d6c2db |
| 29-Aug-2021 |
Dmitry Stogov |
JIT: Optimize zend_vm_stack_free_args() Avoid code genearation for destructors of immutable parameters of internal functions that cannot be changed in place. Keep destructors for immutab
JIT: Optimize zend_vm_stack_free_args() Avoid code genearation for destructors of immutable parameters of internal functions that cannot be changed in place. Keep destructors for immutable array parameters, because few function may modufy them in-pace.
show more ...
|
#
0424ce0c |
| 26-Aug-2021 |
Dmitry Stogov |
Avoid redundand repeatable VM stack overflow checks
|
#
c5ded136 |
| 24-Aug-2021 |
Dmitry Stogov |
JIT: Code generation for ROPE_INIT, ROPE_ADD and ROPE_END with STRING operands
|
#
053c56f5 |
| 21-Jul-2021 |
Dmitry Stogov |
Fixed bug #81226 (Integer overflow behavior is different with JIT enabled)
|
#
ef77d3c8 |
| 17-Jul-2021 |
Christoph M. Becker |
Fix #81206: Multiple PHP processes crash with JIT enabled We need to avoid resetting the JIT for all SAPIs, but we need to initialize the JIT handlers even when only reattaching on Windo
Fix #81206: Multiple PHP processes crash with JIT enabled We need to avoid resetting the JIT for all SAPIs, but we need to initialize the JIT handlers even when only reattaching on Windows. Closes GH-7208.
show more ...
|
#
d0b09a7b |
| 20-May-2021 |
Joe Watkins |
Add first-class callables Support acquiring a Closure to a callable using the syntax func(...), $obj->method(...), etc. This is essentially a shortcut for Closure::fromCallable().
Add first-class callables Support acquiring a Closure to a callable using the syntax func(...), $obj->method(...), etc. This is essentially a shortcut for Closure::fromCallable(). RFC: https://wiki.php.net/rfc/first_class_callable_syntax Closes GH-7019. Co-Authored-By: Nikita Popov <nikita.ppv@gmail.com>
show more ...
|
#
d550c848 |
| 13-Jul-2021 |
Nikita Popov |
Fix unbalanced NEW call_level in JIT For NEW followed by DO_FCALL, we handle both together and skip over the DO_FCALL, which means that the call_level for it will not be decremented.
Fix unbalanced NEW call_level in JIT For NEW followed by DO_FCALL, we handle both together and skip over the DO_FCALL, which means that the call_level for it will not be decremented. Do so explicitly instead.
show more ...
|
#
aff36587 |
| 29-Jun-2021 |
Patrick Allaert |
Fixed some spaces used instead of tabs
|
#
0e932f7c |
| 28-Jun-2021 |
Nikita Popov |
Don't directly include zend_jit_gdb.c Compile the file separately and only include a header. There doesn't seem to be a good reason to directly include the C file here, and this ensu
Don't directly include zend_jit_gdb.c Compile the file separately and only include a header. There doesn't seem to be a good reason to directly include the C file here, and this ensures that there are no symbol clashes (see GH-7197).
show more ...
|
#
3a782595 |
| 16-Jun-2021 |
Dmitry Stogov |
JIT: Avoid too aggressive loop unrolling This fixes tests/func/010.phpt failure with tracing JIT on ARM64.
|
#
c6582164 |
| 03-Jun-2021 |
Dmitry Stogov |
JIT Refactoring: - Move duplicate system independent functions from zend_jit_x86.dasc and zend_jit_arm64.dasc into zend_jit.c * zend_jit_is_constant_cmp_long_long() * zend_
JIT Refactoring: - Move duplicate system independent functions from zend_jit_x86.dasc and zend_jit_arm64.dasc into zend_jit.c * zend_jit_is_constant_cmp_long_long() * zend_jit_needs_call_chain() * skip_valid_arguments() * zend_ssa_cv_info() * zend_jit_may_avoid_refcounting() * zend_get_known_property_info() * zend_may_be_dynamic_property() - Move common definitions from zend_jit_x86.dasc and zend_jit_arm64.dasc into zend_jit.c * GCC_GLOBAL_REGS * PROFITABILITY_CHECKS * BP_JIT_IS * sp_adj_kind * sp_adj[] - Remove unused DynAsm macros * ADDR_CMP (arm64) - Inline and remove DynAsm macros used once * LOAD_BASE_ADDR (arm64 and x86) * PUSH_BASE_ADDR (x86) * MEM_OP3_3 (x86) * SET_Z_PTR (x86) - Rename DynAsm macros * MEM_LOAD_OP_STORE -> MEM_UPDATE (arm64) * MEM_LOAD_OP_STORE_ZTS - > MEM_UPDATE_ZTS (arm64) * ADDR_OP1 -> PUSH_ADDR (x86) * ADDR_OP2_2 -> ADDR_STORE and ADDR_CMP (x86) * MEM_OP2_1_ZTS -> MEM_STORE_ZTS, MEM_CMP_ZTS, MEM_UPDATE_ZTRS (x86) * MEM_OP2_2 -> MEM_LOAD and MEM_LOAD_OP (x86) * MEM_OP2_2_ZTS -> MEM_LOAD_ZTS and MEM_LOAD_OP_ZTS (x86) * SSE_AVX_OP -> DOUBLE_CMP (x86) * SSE_GET_LONG -> DOUBLE_GET_LONG (x86) * SSE_GET_ZVAL_LVAL -> DOUBLE_GET_ZVAL_LVAL (x86) * SSE_GET_ZVAL_LVAL -> DOUBLE_GET_ZVAL_LVAL (x86) * SSE_GET_ZVAL_DVAL -> DOUBLE_GET_ZVAL_DVAL (x86) * SSE_SET_ZVAL_DVAL -> DOUBLE_SET_ZVAL_DVAL (x86)
show more ...
|
#
5de50e28 |
| 02-Jun-2021 |
Dmitry Stogov |
Separate common code
|
#
7c2a3a94 |
| 31-May-2021 |
Hao Sun |
JIT/AArch64: [macos][ZTS] Support fast path for tlv_get_addr (#7042) * JIT/AArch64: [macos][ZTS] Support fast path for tlv_get_addr Access to TLV(thread local variable) in macOS is
JIT/AArch64: [macos][ZTS] Support fast path for tlv_get_addr (#7042) * JIT/AArch64: [macos][ZTS] Support fast path for tlv_get_addr Access to TLV(thread local variable) in macOS is in "dynamic" form and function tlv_get_addr() is invoked to resolve the address. See the example in [1]. Note there is one struct TLVDescriptor [2] for each TLV. The first member holds the address of function tlv_get_addr(), and the other two members, "key" and "offset", would be used inside tlv_get_addr(). The disassembly code for function tlv_get_addr() is shown in [3]. With the value from system register, i.e. tpidrro_el0, together with "key" and "offset", the TLV address can be obtained. Note that the value from tpidrro_el0 varies for different threads, and unique address for TLV is resolved. It's worth noting that slow path would be executed, i.e. function tlv_allocate_and_initialize_for_key(), for the first time of TLV access. In this patch: 1. "_tsrm_ls_cache" is guaranteed to be accessed before any VM/JIT code during the request startup, e.g. in init_executor(), therefore, slow path can be avoided. 2. As TLVDecriptor is immutable and zend_jit_setup() executes once, we get this structure in tsrm_get_ls_cache_tcb_offset(). Note the 'ldr' instruction would be patched to 'add' by the linker. 3. Only fast path for tlv_get_addr() is implemented in macro LOAD_TSRM_CACHE. With this patch, all ~4k test cases can pass for ZTS+CALL in macOS on Apple silicon. [1] https://gist.github.com/shqking/4aab67e0105f7c1f2c549d57d5799f94 [2] https://opensource.apple.com/source/dyld/dyld-195.6/src/threadLocalVariables.c.auto.html [3] https://gist.github.com/shqking/329d7712c26bad49786ab0a544a4af43 Change-Id: I613e9c37e3ff2ecc3fab0f53f1e48a0246e12ee3
show more ...
|
#
11a7310b |
| 21-May-2021 |
Dmitry Stogov |
Disable ASSIGN + SEND_VAL fusion for cases when destroying of old value may throw an exception.
|
#
e5d26810 |
| 19-May-2021 |
Dmitry Stogov |
JIT/AArch64: Link traces through exit tables. 1. Generate exit table at the end of each trace (list of unconditional branches for all side exit) 2. Jump to this table if conditional bran
JIT/AArch64: Link traces through exit tables. 1. Generate exit table at the end of each trace (list of unconditional branches for all side exit) 2. Jump to this table if conditional branch to side exit can't be performed because of limited jump distance (+/-1MB) (avoid extra veneers for side exits). 3. During trace linking, update targets of conditional branches to this exit table, if target trace can't be reachd because of limited jump distance (+/-1MB)
show more ...
|
#
7358457a |
| 19-May-2021 |
Dmitry Stogov |
JIT: Don't include zend_jit_trace_info.jmp_table_size into zend_jit_trace_info.code_size
|
#
45325bd4 |
| 19-May-2021 |
Dmitry Stogov |
JIT/AArch64: Fixed code alignment
|
#
767a4af2 |
| 18-May-2021 |
Dmitry Stogov |
Introduce and use ZEND_JIT_TARGET_X86 and ZEND_JIT_TARGET_ARM64 macros. Remove x86 specific code from ext/opcache/jit/zend_jit_arm64.dasc. Fixed ARM64 build without libcapstone.
|
#
5fe20625 |
| 18-May-2021 |
Dmitry Stogov |
Correct DWARF frame description. Now GDB correctly shows backtraces that involves JIT-ed code for functional/tracing JIT, HYBRID/CALL VM, x86/AArch64 CPU. (opcache.jit_debug=0x100 sh
Correct DWARF frame description. Now GDB correctly shows backtraces that involves JIT-ed code for functional/tracing JIT, HYBRID/CALL VM, x86/AArch64 CPU. (opcache.jit_debug=0x100 should be set).
show more ...
|
#
fc3157ea |
| 13-May-2021 |
Dmitry Stogov |
Generate veneers to perform long jumps. This makes symfony_demo app working with -d opcacge.jit=1205. (21 MB of JIT-ed code).
|
#
5dd539b8 |
| 12-May-2021 |
Dmitry Stogov |
Fixed JIT memory usage debug info (opcache.jit_debug=0x200)
|
#
94ce76a3 |
| 12-May-2021 |
Dmitry Stogov |
Implemented AArch64 support for GDB/JIT interface. Stack frame description is not accurate, so backtraces that involved JIT-ed code may be brocken. Disassemble and breakpoints on JIT-ed
Implemented AArch64 support for GDB/JIT interface. Stack frame description is not accurate, so backtraces that involved JIT-ed code may be brocken. Disassemble and breakpoints on JIT-ed code work fine.
show more ...
|
#
412c172a |
| 28-Apr-2021 |
Dmitry Stogov |
Attempt to fix Windows build
|
#
2c90fe1d |
| 27-Apr-2021 |
Dmitry Stogov |
Fixed some compilation warnings
|
#
06b9eb50 |
| 25-Apr-2021 |
Hao Sun |
Support failed test case: switch_jumptable.phpt Opcodes ZEND_SWITCH_LONG, ZEND_SWITCH_STRING and ZEND_MATCH are supported in this patch. Change-Id: I71ae3d40e65ec1b29d3d9115ac41
Support failed test case: switch_jumptable.phpt Opcodes ZEND_SWITCH_LONG, ZEND_SWITCH_STRING and ZEND_MATCH are supported in this patch. Change-Id: I71ae3d40e65ec1b29d3d9115ac41caef17cf6ae5
show more ...
|