Yeah, I suppose this is going to be a big task and we will have to collaborate a lot. anyway, next week... It's already Friday evening.
Thanks. Dmitry. On Fri, Mar 19, 2021 at 5:20 PM Hao Sun <hao....@arm.com> wrote: > Hi Dmitry, > > Thanks for your reply. > > > > Yes. Sure. I will CC you next time. > > > > As I mentioned in the previous email, this is our (ARM) initial effort to > enable JIT/arm64 port and there might exist some potential bugs in > implementation or something we haven’t considered/designed soundly. > > Please let us know if you have any question. > > > > Thanks, > > Hao > > > > > > *From:* Dmitry Stogov <dmitrysto...@gmail.com> > *Sent:* Friday, March 19, 2021 9:35 PM > *To:* Hao Sun <hao....@arm.com> > *Cc:* internals@lists.php.net; nd <n...@arm.com> > *Subject:* Re: [PHP-DEV] RFC: PHP JIT/arm64 port > > > > Hi Hao, > > > > I'm the author of JIT for PHP. Please CC me next time, I read @internals > only from time to time... > > I'll try to take a look into your implementation next week. > > I'm not sure how much time I'll be able to invest yet, I'll have to > discuss this with my management. > > > > Thanks. Dmitry. > > > > > > > > > > > > On Wed, Mar 17, 2021 at 6:28 AM Hao Sun <hao....@arm.com> wrote: > > Hi Internals, > > Currently PHP JIT only supports x86 and x86_64 CPUs on POSIX platforms and > Windows.[1] With the prevalence of PHP language and the notable > growth of ARM-based servers market, we believe JIT/arm64 would be in > urgent need in the near future. > > As an initial effort to enable PHP JIT/arm64, we (ARM) have supported the > basic functionality, and (partially) implemented the compilation for > several opcodes. Currently a number of simple JIT test cases from PHP test > framework can be passed on ARM-based machine. There are still a lot > of missing parts, such as hot loops, class/object/array operations, > exception handling, etc, and we will continue working on them. > > We would like to share our work with you (See the draft patch > https://github.com/shqking/php-src/commit/6aaf935). > Any feedback would be greatly appreciated, and please let we know if > anyone wants to contribute to this port. > > Thanks, > Hao SUN > Email: hao....@arm.com<mailto:hao....@arm.com> > > ------------------------------------------------------- > Main updates: > 1. JIT backend for AArch64 > A new alternative, i.e. AArch64, was added while building PHP JIT. See the > updates in the following files. Note that we adopt capstone[2] for > disassembly on AArch64. > > build/Makefile.global > ext/opcache/config.m4 > ext/opcache/config.w32 > ext/opcache/jit/Makefile.frag > ext/opcache/jit/zend_jit.c > ext/opcache/jit/zend_jit_vm_helpers.c > ext/opcache/jit/zend_jit_disasm_arm64.c > ext/opcache/jit/zend_jit_gdb.c > ext/opcache/jit/zend_jit_perf_dump.c > > 2. DynASM library > PHP JIT uses DynASM[3] (developed for LuaJIT project) to generate native > code on the fly. We added two useful but missing features, global label > reference and dynamic register names, into DynASM/arm64. See the updates > in files: > > ext/opcache/jit/dynasm/dasm_arm64.h > ext/opcache/jit/dynasm/dasm_arm64.lua > > Note that these two features are available on DynASM/x86. > > 3. compilation for opcodes on AArch64 > Our main work falls in the following files. > > ext/opcache/jit/zend_jit_arm64.h > ext/opcache/jit/zend_jit_arm64.dasc > ext/opcache/jit/zend_jit_internal.h > Zend/zend_vm_opcodes.h > > * AArch64 registers and calling conventions are defined. > > * Instruction cache must be flushed for the JIT-ed code on AArch64. See > macro JIT_CACHE_FLUSH in file 'zend_jit_internal.h'. > > * We have (partially) implemented the compilation for several opcodes, > mainly for the function-based JIT (with opcache.jit=1203). Currently, > test cases involving internal function call (e.g. var_dump), additions > with integers/floating-point numbers, integer overflows and simple > exception, can be supported now. See our newly added test cases under > directory 'ext/opcache/tests/jit/arm64/'. > > * Trace counter stubs are implemented for tracing JIT (with > opcache.jit=1255). See zend_jit_hybrid_trace_counter_stub() and > zend_jit_hybrid_hot_trace_stub() in file 'zend_jit_arm64.dasc'. Hot > functions can be recognized and compiled successfully. See the test case > 'hot_func_002.phpt'. > > How to build and test: > Our local test environment is an ARM-based server with Ubuntu 20.04 and > GCC-10. We follow the building commands as shown in the readme file [4]. > Note that library capstone should be installed in advance. > > We suggest running the JIT test cases using the following command. In our > local test, 59 out of all 128 cases can be passed currently. > $ make test TESTS='-d opcache.jit=1203 ext/opcache/tests/jit/' > > [1] https://wiki.php.net/rfc/jit > [2] https://www.capstone-engine.org/ > [3] https://luajit.org/dynasm.html > [4] https://github.com/php/php-src > >