Hi Dmitry, I can confirm a ~10-11% reduction in execution time of the bench.php from last month build (x64) to today's commit (from 1.154 sec to 1.010). Amazing job!
Albert On Tue, Mar 17, 2015 at 1:39 PM, Gustavo Frederico Temple Pedrosa < gustavo.pedr...@eldorado.org.br> wrote: > Hi, Dmitry. > > Thank you for contacting us. > > Leonardo and Caio (in CC), they will verify. > > Thank you very much. Temple. > > > > > > From: Dmitry Stogov [mailto:dmi...@zend.com] > Sent: terça-feira, 17 de março de 2015 08:01 > To: Ard Biesheuvel; Gustavo Frederico Temple Pedrosa > Cc: PHP Internals > Subject: Fwd: [PHP-CVS] com php-src: Enable GCC global register variables > if available: Zend/Zend.m4 Zend/zend_execute.c > > Hi, > Please consider possibility of using the same optimization for ARM, PPC > and may be other platforms. > On x86(_84) it makes 2-7% speedup. > Only the similar changes in zend_execute.c and Zend.m4 are required to > enable it. > Thanks. Dmitry. > > ---------- Forwarded message ---------- > From: Dmitry Stogov <dmi...@php.net> > Date: Tue, Mar 17, 2015 at 1:51 PM > Subject: [PHP-CVS] com php-src: Enable GCC global register variables if > available: Zend/Zend.m4 Zend/zend_execute.c > To: php-...@lists.php.net > > > Commit: fb4b7069842491eb66272587422a1f61d41eb869 > Author: Dmitry Stogov <dmi...@zend.com> Tue, 17 Mar 2015 > 13:51:02 +0300 > Parents: 92bf4566ea65042b8f84cae7840298ed151a4f7a > Branches: master > > Link: > http://git.php.net/?p=php-src.git;a=commitdiff;h=fb4b7069842491eb66272587422a1f61d41eb869 > > Log: > Enable GCC global register variables if available > > Changed paths: > M Zend/Zend.m4 > M Zend/zend_execute.c > > > Diff: > diff --git a/Zend/Zend.m4 b/Zend/Zend.m4 > index 16f2d5f..e12b00d 100644 > --- a/Zend/Zend.m4 > +++ b/Zend/Zend.m4 > @@ -409,3 +409,48 @@ else > AC_MSG_RESULT(no) > fi > fi > + > +AC_ARG_ENABLE(gcc-global-regs, > +[ --disable-gcc-global-regs > + whether to enable GCC global register > variables],[ > + ZEND_GCC_GLOBAL_REGS=$enableval > +],[ > + ZEND_GCC_GLOBAL_REGS=yes > +]) > +AC_MSG_CHECKING(for global register variables support) > +if test "$ZEND_GCC_GLOBAL_REGS" != "no"; then > + AC_TRY_COMPILE([ > + ],[ > +#if defined(__GNUC__) && defined(i386) > +# define ZEND_VM_FP_GLOBAL_REG "%esi" > +# define ZEND_VM_IP_GLOBAL_REG "%edi" > +#elif defined(__GNUC__) && defined(__x86_64__) > +# define ZEND_VM_FP_GLOBAL_REG "%r14" > +# define ZEND_VM_IP_GLOBAL_REG "%r15" > +#else > +# error "global register variables are not supported" > +#endif > +typedef int (*opcode_handler_t)(void); > +register void *FP __asm__(ZEND_VM_FP_GLOBAL_REG); > +register const opcode_handler_t *IP __asm__(ZEND_VM_IP_GLOBAL_REG); > +int emu(const opcode_handler_t *ip, void *fp) { > + const opcode_handler_t *orig_ip = IP; > + void *orig_fp = FP; > + IP = ip; > + FP = fp; > + while ((*ip)()); > + FP = orig_fp; > + IP = orig_ip; > +} > + ], [ > + ZEND_GCC_GLOBAL_REGS=yes > + ], [ > + ZEND_GCC_GLOBAL_REGS=no > + ]) > +fi > +if test "$ZEND_GCC_GLOBAL_REGS" = "yes"; then > + AC_DEFINE([HAVE_GCC_GLOBAL_REGS], 1, [Define if the target system has > support for global register variables]) > +else > + HAVE_GCC_GLOBAL_REGS=no > +fi > +AC_MSG_RESULT(ZEND_GCC_GLOBAL_REGS) > diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c > index b24218a..17e68dc 100644 > --- a/Zend/zend_execute.c > +++ b/Zend/zend_execute.c > @@ -2049,7 +2049,7 @@ static zend_always_inline void > zend_vm_stack_extend_call_frame(zend_execute_data > } > /* }}} */ > > -#if HAVE_GCC_GLOBAL_REGS > +#ifdef HAVE_GCC_GLOBAL_REGS > # if defined(__GNUC__) && defined(i386) > # define ZEND_VM_FP_GLOBAL_REG "%esi" > # define ZEND_VM_IP_GLOBAL_REG "%edi" > > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >